Skip to main content

Micro-Frontend & Microservices Architecture

🎯 Architecture Philosophy​

"Right-sized services, not micro for micro's sake"

EduPulse follows a pragmatic microservices approach - we split services based on:

  1. Team ownership - Who maintains it?
  2. Deployment frequency - How often does it change?
  3. Scaling needs - Does it need independent scaling?
  4. Technology requirements - Does it need a different tech stack?

πŸ–₯️ Micro-Frontend Architecture​

Why Micro-Frontends?​

BenefitEduPulse Context
Independent DeploymentsUpdate Fee module without touching SIS
Team AutonomyHR team owns HR MFE completely
Technology FlexibilityAI features can use different libs
ScalabilityHeavy dashboards load independently

MFE Strategy: Module Federation​

We use Webpack Module Federation with Next.js for:

  • Runtime integration (not build-time)
  • Shared dependencies (React, UI library)
  • Independent versioning

πŸ—οΈ Shell & Child MFE Breakdown​

Shell Application (Host)​

The Shell MFE is the orchestrator that handles cross-cutting concerns.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ SHELL MFE (Host) β”‚
β”‚ edupulse-shell.vercel.app β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ SHELL RESPONSIBILITIES β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ Authentication & Session Management β”‚ β”‚
β”‚ β”‚ β€’ Global Navigation (Sidebar, Header, Breadcrumbs) β”‚ β”‚
β”‚ β”‚ β€’ Tenant Context Provider β”‚ β”‚
β”‚ β”‚ β€’ Theme Provider (Light/Dark mode) β”‚ β”‚
β”‚ β”‚ β€’ Global Error Boundary β”‚ β”‚
β”‚ β”‚ β€’ Notification System (Toast, Alerts) β”‚ β”‚
β”‚ β”‚ β€’ Permission Context (RBAC) β”‚ β”‚
β”‚ β”‚ β€’ Analytics Wrapper β”‚ β”‚
β”‚ β”‚ β€’ PWA Service Worker β”‚ β”‚
β”‚ β”‚ β€’ Global Search β”‚ β”‚
β”‚ β”‚ β€’ User Profile & Settings β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ SHELL LAYOUT β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ Header (User, Notifications, School Switcher) β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚
β”‚ β”‚ β”‚ Sidebar β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ (Nav) β”‚ REMOTE MFE CONTAINER β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ (Dynamic Loading Zone) β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Shell MFE Tech Stack​

// shell/package.json
{
"name": "@edupulse/shell",
"dependencies": {
"next": "15.x",
"@module-federation/nextjs-mf": "^8.x",
"@tanstack/react-query": "^5.x",
"zustand": "^5.x", // Global state
"@edupulse/ui": "workspace:*", // Shared UI library
"next-auth": "^5.x" // Authentication
}
}

Shell Shared Exports​

// shell/src/shared/index.ts - Exposed to all MFEs
export { AuthProvider, useAuth } from './auth';
export { TenantProvider, useTenant } from './tenant';
export { ThemeProvider, useTheme } from './theme';
export { PermissionGate, usePermissions } from './permissions';
export { useNotification } from './notifications';
export { apiClient } from './api-client';
export { queryClient } from './query-client';

Child MFE Breakdown​

We have 6 Child MFEs organized by domain and team ownership:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CHILD MFEs (Remotes) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ MFE-CORE β”‚ β”‚ MFE-ACADEMIC β”‚ β”‚ MFE-FINANCE β”‚ β”‚
β”‚ β”‚ (SIS + Admin) β”‚ β”‚ (Learning) β”‚ β”‚ (Fees + HR) β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ Dashboard β”‚ β”‚ β€’ Timetable β”‚ β”‚ β€’ Fee Config β”‚ β”‚
β”‚ β”‚ β€’ Students β”‚ β”‚ β€’ Attendance β”‚ β”‚ β€’ Invoices β”‚ β”‚
β”‚ β”‚ β€’ Admissions β”‚ β”‚ β€’ Gradebook β”‚ β”‚ β€’ Payments β”‚ β”‚
β”‚ β”‚ β€’ Classes β”‚ β”‚ β€’ Exam Results β”‚ β”‚ β€’ Reports β”‚ β”‚
β”‚ β”‚ β€’ Documents β”‚ β”‚ β€’ Report Cards β”‚ β”‚ β€’ HR/Staff β”‚ β”‚
β”‚ β”‚ β€’ Settings β”‚ β”‚ β€’ Assignments β”‚ β”‚ β€’ Payroll β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β€’ Curriculum β”‚ β”‚ β€’ Leave Mgmt β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ MFE-AI β”‚ β”‚ MFE-PORTAL β”‚ β”‚ MFE-OPS β”‚ β”‚
β”‚ β”‚ (AI Features) β”‚ β”‚ (Public/User) β”‚ β”‚ (Operations) β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ AI Tutor β”‚ β”‚ β€’ Parent Portal β”‚ β”‚ β€’ Transport β”‚ β”‚
β”‚ β”‚ β€’ Doubt Snap β”‚ β”‚ β€’ Student Portalβ”‚ β”‚ β€’ Assets/Lab β”‚ β”‚
β”‚ β”‚ β€’ Exam Predict β”‚ β”‚ β€’ Teacher Portalβ”‚ β”‚ β€’ Library β”‚ β”‚
β”‚ β”‚ β€’ Question Gen β”‚ β”‚ β€’ Admission Formβ”‚ β”‚ β€’ Wellness β”‚ β”‚
β”‚ β”‚ β€’ Analytics β”‚ β”‚ β€’ Fee Payment β”‚ β”‚ β€’ Events β”‚ β”‚
β”‚ β”‚ β€’ Chatbots β”‚ β”‚ β€’ Alumni β”‚ β”‚ β€’ Notices β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

MFE Details​

1. MFE-Core (SIS & Administration)​

AttributeValue
Package@edupulse/mfe-core
TeamCore Platform
EPICsEPIC-1, EPIC-2, EPIC-3
DeploymentDaily
SizeLarge (~150 components)

Modules:

  • /dashboard - Admin dashboard, widgets, quick actions
  • /students - Student CRUD, search, bulk actions
  • /admissions - Inquiry, applications, enrollment
  • /classes - Class/section management, promotions
  • /documents - Document management, verification
  • /settings - School settings, academic year, configurations

2. MFE-Academic (Teaching & Learning)​

AttributeValue
Package@edupulse/mfe-academic
TeamAcademic Team
EPICsEPIC-7
DeploymentWeekly
SizeMedium (~80 components)

Modules:

  • /timetable - Schedule builder, room allocation
  • /attendance - Mark attendance, reports, biometric sync
  • /gradebook - Marks entry, grade calculation
  • /exams - Exam scheduling, seating, hall tickets
  • /report-cards - Generate, customize, print
  • /assignments - Create, submit, grade

3. MFE-Finance (Fees & HR)​

AttributeValue
Package@edupulse/mfe-finance
TeamFinance Team
EPICsEPIC-4, EPIC-5
DeploymentWeekly
SizeMedium (~100 components)

Modules:

  • /fees - Fee structure, invoices, collections
  • /payments - Online payments, receipts
  • /reports - Financial reports, outstanding dues
  • /hr - Staff management, profiles
  • /payroll - Salary processing, payslips
  • /leave - Leave applications, approvals

4. MFE-AI (AI-Powered Features)​

AttributeValue
Package@edupulse/mfe-ai
TeamAI/ML Team
EPICsEPIC-6, EPIC-8, EPIC-9
DeploymentBi-weekly
SizeMedium (~60 components)
SpecialUses Python backend

Modules:

  • /tutor - AI tutoring chat interface
  • /doubt-snap - Camera capture, OCR, solution
  • /predictor - Exam prediction dashboard
  • /question-gen - AI question paper generator
  • /analytics - AI-powered insights
  • /chatbots - Admission, support chatbots

5. MFE-Portal (User-Facing Portals)​

AttributeValue
Package@edupulse/mfe-portal
TeamProduct Team
EPICsEPIC-3, EPIC-4, EPIC-13
DeploymentWeekly
SizeMedium (~70 components)
SpecialPublic pages, SEO optimized

Modules:

  • /parent - Parent dashboard, child tracking
  • /student - Student self-service
  • /teacher - Teacher dashboard, quick actions
  • /admission - Public admission form
  • /pay - Fee payment gateway
  • /alumni - Alumni network, events

6. MFE-Ops (Operations)​

AttributeValue
Package@edupulse/mfe-ops
TeamOperations Team
EPICsEPIC-10, EPIC-11, EPIC-12
DeploymentMonthly
SizeSmall (~50 components)

Modules:

  • /transport - Route management, tracking
  • /assets - Inventory, lab equipment
  • /library - Book management, issue/return
  • /wellness - Health records, counseling
  • /events - Event calendar, registrations
  • /notices - Notice board, circulars

MFE Routing Strategy​

// shell/src/app/layout.tsx
const MFE_ROUTES = {
// MFE-Core
'/dashboard': 'mfe-core/Dashboard',
'/students': 'mfe-core/Students',
'/admissions': 'mfe-core/Admissions',
'/classes': 'mfe-core/Classes',

// MFE-Academic
'/timetable': 'mfe-academic/Timetable',
'/attendance': 'mfe-academic/Attendance',
'/gradebook': 'mfe-academic/Gradebook',
'/exams': 'mfe-academic/Exams',

// MFE-Finance
'/fees': 'mfe-finance/Fees',
'/payments': 'mfe-finance/Payments',
'/hr': 'mfe-finance/HR',
'/payroll': 'mfe-finance/Payroll',

// MFE-AI
'/ai-tutor': 'mfe-ai/Tutor',
'/doubt-snap': 'mfe-ai/DoubtSnap',
'/predictor': 'mfe-ai/Predictor',

// MFE-Portal
'/parent-portal': 'mfe-portal/Parent',
'/student-portal': 'mfe-portal/Student',
'/teacher-portal': 'mfe-portal/Teacher',

// MFE-Ops
'/transport': 'mfe-ops/Transport',
'/assets': 'mfe-ops/Assets',
'/library': 'mfe-ops/Library',
};

Shared UI Library​

All MFEs share a common UI library:

// packages/ui/src/index.ts
export * from './components/Button';
export * from './components/Input';
export * from './components/Table';
export * from './components/DataGrid';
export * from './components/Form';
export * from './components/Modal';
export * from './components/Card';
export * from './components/Charts';
// ... 50+ components

export * from './layouts/PageLayout';
export * from './layouts/FormLayout';
export * from './layouts/ListLayout';

export * from './hooks/useDebounce';
export * from './hooks/useInfiniteScroll';
export * from './hooks/useMediaQuery';

πŸ”§ Microservices Architecture​

Service Count Strategy​

"6-8 services is the sweet spot for a team of 8-12 developers"
ApproachServicesProsCons
Monolith1SimpleHard to scale, deploy
Mini-services3-4Easy to manageLimited flexibility
Right-sized βœ“6-8BalancedOur choice
Micro15+Very flexibleComplex, overhead

EduPulse Service Breakdown: 7 Services​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ MICROSERVICES ARCHITECTURE β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ API GATEWAY β”‚ β”‚
β”‚ β”‚ (Kong / AWS) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β–Ό β–Ό β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ AUTH SERVICE β”‚ β”‚ SIS SERVICE β”‚ β”‚ FINANCE SERVICE β”‚ β”‚
β”‚ β”‚ (Node.js) β”‚ β”‚ (Node.js) β”‚ β”‚ (Node.js) β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ Cognito β”‚ β”‚ β€’ Students β”‚ β”‚ β€’ Fee Config β”‚ β”‚
β”‚ β”‚ β€’ JWT/Sessions β”‚ β”‚ β€’ Admissions β”‚ β”‚ β€’ Invoices β”‚ β”‚
β”‚ β”‚ β€’ RBAC β”‚ β”‚ β€’ Classes β”‚ β”‚ β€’ Reports β”‚ β”‚
β”‚ β”‚ β€’ Audit Logs β”‚ β”‚ β€’ Documents β”‚ β”‚ β€’ HR/Staff β”‚ β”‚
β”‚ β”‚ β€’ Encryption β”‚ β”‚ β€’ Promotions β”‚ β”‚ β€’ Leave β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ACADEMIC SERVICEβ”‚ β”‚ AI SERVICE β”‚ β”‚ OPS SERVICE β”‚ β”‚
β”‚ β”‚ (Node.js) β”‚ β”‚ (Python) β”‚ β”‚ (Node.js) β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ Timetable β”‚ β”‚ β€’ AI Tutor β”‚ β”‚ β€’ Transport β”‚ β”‚
β”‚ β”‚ β€’ Attendance β”‚ β”‚ β€’ Exam Predict β”‚ β”‚ β€’ Assets β”‚ β”‚
β”‚ β”‚ β€’ Gradebook β”‚ β”‚ β€’ Doubt Snap β”‚ β”‚ β€’ Library β”‚ β”‚
β”‚ β”‚ β€’ Exams β”‚ β”‚ β€’ Question Gen β”‚ β”‚ β€’ Wellness β”‚ β”‚
β”‚ β”‚ β€’ Report Cards β”‚ β”‚ β€’ Analytics β”‚ β”‚ β€’ Events β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ENGINE SERVICE β”‚ β”‚
β”‚ β”‚ (Go) β”‚ β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚ β€’ Payment Proc β”‚ β”‚
β”‚ β”‚ β€’ Finance Engineβ”‚ β”‚
β”‚ β”‚ β€’ Attendance Engβ”‚ β”‚
β”‚ β”‚ β€’ Notifications β”‚ β”‚
β”‚ β”‚ β€’ Real-time β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Service Details​

Service 1: Auth Service (Node.js)​

AttributeValue
LanguageNode.js/TypeScript
FrameworkNestJS
DatabasePostgreSQL (shared)
EPICsEPIC-2
TeamPlatform

Responsibilities:

  • Cognito integration
  • JWT token management
  • Session management
  • RBAC/Permissions
  • Audit logging
  • Data encryption/decryption service
  • DPDPA compliance

API Prefix: /api/v1/auth/*


Service 2: SIS Service (Node.js)​

AttributeValue
LanguageNode.js/TypeScript
FrameworkNestJS
DatabasePostgreSQL
EPICsEPIC-3
TeamCore

Responsibilities:

  • Student management
  • Guardian management
  • Admission workflow
  • Class/Section management
  • Document management
  • Transfer certificates
  • Promotion/Transfer

API Prefix: /api/v1/sis/*


Service 3: Finance Service (Node.js)​

AttributeValue
LanguageNode.js/TypeScript
FrameworkNestJS
DatabasePostgreSQL
EPICsEPIC-4, EPIC-5
TeamFinance

Responsibilities:

  • Fee structure configuration
  • Invoice generation
  • Payment tracking
  • Financial reports
  • HR/Staff management
  • Leave management
  • Payroll configuration

API Prefix: /api/v1/finance/*, /api/v1/hr/*


Service 4: Academic Service (Node.js)​

AttributeValue
LanguageNode.js/TypeScript
FrameworkNestJS
DatabasePostgreSQL
EPICsEPIC-7
TeamAcademic

Responsibilities:

  • Timetable management
  • Attendance (mark, reports)
  • Gradebook
  • Exam management
  • Report card generation
  • Curriculum management

API Prefix: /api/v1/academic/*


Service 5: AI Service (Python)​

AttributeValue
LanguagePython
FrameworkFastAPI
DatabasePostgreSQL + Qdrant
EPICsEPIC-6, EPIC-8, EPIC-9
TeamAI/ML

Responsibilities:

  • AI Tutor conversations
  • Doubt Snap (OCR + solution)
  • Board Exam prediction
  • Question generation
  • AI-powered analytics
  • RAG pipelines
  • Claude API integration

API Prefix: /api/v1/ai/*


Service 6: Ops Service (Node.js)​

AttributeValue
LanguageNode.js/TypeScript
FrameworkNestJS
DatabasePostgreSQL
EPICsEPIC-10, EPIC-11, EPIC-12, EPIC-13
TeamOperations

Responsibilities:

  • Transport management
  • Asset/Inventory management
  • Library management
  • Wellness/Health records
  • Event management
  • Alumni network

API Prefix: /api/v1/ops/*


Service 7: Engine Service (Go)​

AttributeValue
LanguageGo
FrameworkGin
DatabasePostgreSQL
EPICsEPIC-4, EPIC-5 (critical paths)
TeamPlatform

Responsibilities:

  • Payment gateway processing
  • Double-entry finance engine
  • Attendance engine (biometric sync)
  • Notification dispatcher
  • Real-time sync (WebSocket)
  • Background job processing
  • Event sourcing

API Prefix: /api/v1/engine/*


Service Communication​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ SERVICE COMMUNICATION PATTERNS β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ SYNCHRONOUS (REST/gRPC) β”‚
β”‚ ──────────────────────── β”‚
β”‚ β€’ User-facing API calls β”‚
β”‚ β€’ Auth validation β”‚
β”‚ β€’ Real-time data fetches β”‚
β”‚ β”‚
β”‚ Frontend ──REST──► Node.js Services ──gRPC──► Go Engine β”‚
β”‚ ──REST──► Python AI β”‚
β”‚ β”‚
β”‚ ASYNCHRONOUS (Message Queue) β”‚
β”‚ ──────────────────────────── β”‚
β”‚ β€’ Notifications (SMS, Email, Push) β”‚
β”‚ β€’ Bulk operations β”‚
β”‚ β€’ AI processing β”‚
β”‚ β€’ Event sourcing β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ MESSAGE QUEUE (Redis + NATS) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β–² β–² β–² β–² β–² β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”΄β”€β”€β” β”Œβ”€β”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”΄β”€β”€β”€β” β”‚
β”‚ β”‚Auth β”‚ β”‚ SIS β”‚ β”‚Financeβ”‚ β”‚ AI β”‚ β”‚Engine β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Database Strategy​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DATABASE STRATEGY β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ SHARED DATABASE (Phase 1: 0-100K users) β”‚
β”‚ ──────────────────────────────────────── β”‚
β”‚ β€’ Single PostgreSQL instance β”‚
β”‚ β€’ Schema-per-tenant (tenant_id in every table) β”‚
β”‚ β€’ Simpler operations, easier debugging β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ PostgreSQL (Single Instance) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ auth β”‚ β”‚ sis β”‚ β”‚ finance β”‚ β”‚academic β”‚ β”‚ ops β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ schema β”‚ β”‚ schema β”‚ β”‚ schema β”‚ β”‚ schema β”‚ β”‚ schema β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ DATABASE-PER-SERVICE (Phase 2: 100K+ users) β”‚
β”‚ ─────────────────────────────────────────── β”‚
β”‚ β€’ Separate databases for critical services β”‚
β”‚ β€’ Finance gets dedicated instance β”‚
β”‚ β€’ AI gets dedicated instance + Qdrant β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Repository Structure​

Monorepo with Turborepo​

edupulse/
β”œβ”€β”€ apps/
β”‚ β”œβ”€β”€ shell/ # Shell MFE (Host)
β”‚ β”œβ”€β”€ mfe-core/ # Core MFE
β”‚ β”œβ”€β”€ mfe-academic/ # Academic MFE
β”‚ β”œβ”€β”€ mfe-finance/ # Finance MFE
β”‚ β”œβ”€β”€ mfe-ai/ # AI MFE
β”‚ β”œβ”€β”€ mfe-portal/ # Portal MFE
β”‚ └── mfe-ops/ # Ops MFE
β”‚
β”œβ”€β”€ services/
β”‚ β”œβ”€β”€ auth-service/ # Node.js Auth
β”‚ β”œβ”€β”€ sis-service/ # Node.js SIS
β”‚ β”œβ”€β”€ finance-service/ # Node.js Finance
β”‚ β”œβ”€β”€ academic-service/ # Node.js Academic
β”‚ β”œβ”€β”€ ai-service/ # Python AI
β”‚ β”œβ”€β”€ ops-service/ # Node.js Ops
β”‚ └── engine-service/ # Go Engine
β”‚
β”œβ”€β”€ packages/
β”‚ β”œβ”€β”€ ui/ # Shared UI components
β”‚ β”œβ”€β”€ types/ # Shared TypeScript types
β”‚ β”œβ”€β”€ utils/ # Shared utilities
β”‚ β”œβ”€β”€ config/ # Shared configurations
β”‚ └── eslint-config/ # Shared ESLint
β”‚
β”œβ”€β”€ infrastructure/
β”‚ β”œβ”€β”€ cdk/ # AWS CDK
β”‚ β”œβ”€β”€ docker/ # Docker configs
β”‚ └── k8s/ # Kubernetes manifests
β”‚
β”œβ”€β”€ docs/ # Documentation
β”œβ”€β”€ turbo.json # Turborepo config
β”œβ”€β”€ pnpm-workspace.yaml # PNPM workspaces
└── package.json # Root package

πŸ—ΊοΈ MFE to Service Mapping​

MFEPrimary ServicesSecondary Services
ShellAuthAll (for context)
MFE-CoreSIS, AuthEngine
MFE-AcademicAcademicSIS
MFE-FinanceFinanceEngine, Auth
MFE-AIAISIS, Academic
MFE-PortalSIS, FinanceAuth
MFE-OpsOpsSIS

πŸ“Š Summary​

MFE Summary (6 Child + 1 Shell)​

MFETeamSizeDeploy Freq
ShellPlatform30 componentsWeekly
MFE-CoreCore150 componentsDaily
MFE-AcademicAcademic80 componentsWeekly
MFE-FinanceFinance100 componentsWeekly
MFE-AIAI/ML60 componentsBi-weekly
MFE-PortalProduct70 componentsWeekly
MFE-OpsOperations50 componentsMonthly

Service Summary (7 Services)​

ServiceLanguageTeamEPICs
AuthNode.jsPlatform2
SISNode.jsCore3
FinanceNode.jsFinance4, 5
AcademicNode.jsAcademic7
AIPythonAI/ML6, 8, 9
OpsNode.jsOperations10-13
EngineGoPlatform4, 5 (critical)