This document tracks feature parity between the legacy Express implementation and the new NestJS architecture, ensuring a safe, structured, and complete migration.
The migration tracker exists to:
- Provide visibility into migration progress
- Prevent feature regressions
- Ensure no endpoint or business logic is lost
- Guide safe deprecation of Express code
- Align team members on what’s done vs pending
| Status | Meaning |
|---|---|
| ✅ Completed | Fully migrated and tested in NestJS |
| 🟡 Partial | Partially migrated (missing logic, guards, validation, etc.) |
| ❌ Not Started | No migration work done yet |
| 🚫 Deprecated | Express version removed and replaced |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Admin Auth | express/auth/admin.js |
auth/ |
✅ | JWT + RBAC implemented |
| Student Auth | express/auth/student.js |
auth/ |
✅ | |
| Tutor Auth | express/auth/tutor.js |
auth/ |
✅ | |
| Refresh Tokens | express/auth/refresh.js |
auth/ |
🟡 | Rotation not fully implemented |
| User Profile | express/users/ |
users/ |
✅ |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Create Course | express/courses/create.js |
courses/ |
✅ | |
| Update Course | express/courses/update.js |
courses/ |
✅ | |
| Course Listing | express/courses/list.js |
courses/ |
✅ | Filtering improved |
| Course Reviews | express/reviews/ |
reviews/ |
🟡 | Missing moderation |
| Course Analytics | express/courses/analytics.js |
reports/ |
❌ | Pending |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Points System | express/gamification/points.js |
gamification/ |
✅ | |
| Leaderboard | express/leaderboard/ |
leaderboard/ |
✅ | |
| Badges | express/gamification/badges.js |
gamification/ |
🟡 | Partial logic |
| NFT Rewards | express/gamification/nft.js |
gamification/ |
❌ | Not started |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Certificate Issuance | express/certification/issue.js |
certification/ |
✅ | |
| Certificate Download | express/certification/download.js |
certification/ |
✅ | |
| Name Change Requests | express/certification/name.js |
certification/ |
🟡 | Workflow incomplete |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Application Submission | express/financial-aid/apply.js |
financial-aid/ |
✅ | |
| Admin Review | express/financial-aid/review.js |
financial-aid/ |
🟡 | Missing audit logs |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Student Analytics | express/reports/student.js |
reports/ |
❌ | |
| Tutor Analytics | express/reports/tutor.js |
reports/ |
❌ | |
| Course Reports | express/reports/course.js |
reports/ |
❌ |
| Feature | Express | NestJS Module | Status | Notes |
|---|---|---|---|---|
| Notifications | express/notification/ |
notification/ |
🟡 | No queue yet |
| FAQ | express/system/faq.js |
common/ or faq/ |
❌ | |
| Contact Messages | express/system/contact.js |
common/ |
❌ | |
| Subscription Plans | express/subscription/ |
subscription-plan/ |
🟡 | |
| Organization | express/org/ |
organization/ |
🟡 |
To ensure consistency, every feature migration should follow:
-
Identify Express feature
-
Map to NestJS module
-
Rebuild using NestJS patterns
- Controllers
- Services
- DTOs
- Guards
-
Add validation & Swagger docs
-
Write tests (unit/e2e)
-
Mark status in tracker
-
Deprecate Express implementation
Express code should only be removed when:
- ✅ Feature is fully implemented in NestJS
- ✅ API contract is verified
- ✅ Tests are passing
- ✅ No active consumers depend on Express route
NestJS Complete → QA Verified → Mark ✅ → Mark Express 🚫 → Delete Code
- Each module owner is responsible for updating this tracker
- Update status immediately after PR merge
- Use this file during sprint planning & reviews
To make this even more powerful:
- Add GitHub Issues linked per feature
- Track PR links per migration
- Add API diff references (Express vs Nest)
- Integrate with project board (Linear/Jira)
If you want this to actually work in a team:
- Don’t keep this only in README → move to
docs/migration.md - Assign owners per module
- Enforce updates via PR checklist:
- [ ] Migration tracker updated