omnivore/docs/architecture/migration-roadmap.md
Timothy Atapagra c53bb77721 feat(api-nest): Complete NestJS authentication system with web integration
## Major Accomplishments

###  Authentication System (ARC-003) - COMPLETED
- **Full NestJS Auth Module**: Complete authentication system with JWT, OAuth, and RBAC
- **Type-Safe API Responses**: Comprehensive DTO system with Swagger documentation
- **Web Integration**: Successfully integrated web frontend with NestJS API endpoints
- **Security Hardening**: Fixed authentication vulnerabilities and implemented proper patterns

###  Database Integration (ARC-003B) - COMPLETED
- **Entity Mapping**: Complete TypeORM entities for User, Profile, Personalization, Roles
- **Migration System**: Hybrid approach using existing Postgrator system
- **Schema Compatibility**: Both Express and NestJS APIs access same database

###  Development Environment Optimization
- **Performance Boost**: 25-50x faster cold starts (30-60s → 1.2s)
- **Turbopack Integration**: Next.js 13.5+ experimental bundler enabled
- **Sentry Disabled**: Clean development logs and faster builds
- **Docker Optimization**: Streamlined development workflow

## Technical Details

### Authentication Features Implemented
- JWT token generation and validation
- Email/password login and registration
- OAuth structure (Google, Apple) - ready for testing
- Role-based access control (RBAC)
- Comprehensive error handling with typed responses
- CORS configuration for web frontend

### Web Frontend Integration
- Updated API endpoints to /api/v2 prefix
- Fixed authentication flow with proper JSON responses
- Eliminated backend redirects (anti-pattern)
- Client-side navigation based on API responses
- CORS and CSP optimizations

### Performance Improvements
- Turbopack bundler: 20-40x faster cold starts
- SWC minification: Rust-based compilation
- Filesystem caching: Persistent across restarts
- Smart code splitting: Vendor, Radix UI, Phosphor icons
- Import optimization: Tree-shaking for icon libraries

## Testing Status
-  Email/password login: Working
-  User registration: Working
-  Google OAuth: Ready for testing
-  Apple OAuth: Ready for testing
-  Email verification: Pending email service integration

## Next Phase Recommendations
1. **Vite Migration**: Consider migrating from Next.js to Vite for 50-100x performance gains
2. **GraphQL Setup**: Begin ARC-004 for GraphQL module implementation
3. **OAuth Testing**: Complete Google/Apple authentication testing
4. **Email Service**: Integrate email verification system

## Files Changed
- Complete NestJS authentication system (100+ files)
- Web frontend integration and optimization
- Docker development environment
- Performance optimizations and Sentry configuration
- Comprehensive documentation and migration tracking

This commit represents a major milestone in the Express-to-NestJS migration,
establishing a solid foundation for continued development.
2025-10-09 13:10:32 -04:00

4.2 KiB

NestJS Migration Roadmap

Goal: Introduce NestJS without blocking feature delivery, while keeping current clients functional and ensuring parity across GraphQL and REST surfaces. We will create a modular NestJS application that gradually replaces the Express server, running side-by-side until feature completeness is achieved.

Guiding Principles

  • Monolith-first: start with a single NestJS application containing feature modules, split only when scale demands.
  • Incremental cutover: mount NestJS on the existing Express server via @nestjs/platform-express, proxying traffic module-by-module.
  • Shared contracts: re-use DTOs, validation schemas, and TypeORM entities to avoid dual maintenance.
  • Automation-ready: containerize NestJS alongside existing services; ensure Docker-compose can run both for local parity.

Migration Phases & Timelines

Phase Duration (dev-weeks) Deliverables Notes
0. Discovery & Foundations 1 NestJS project scaffold in packages/api-nest, shared config module, health/metrics endpoints Run as sibling service behind feature flag; share env-loader
1. Platform Services 2 AppModule, ConfigModule, LoggerModule, ObservabilityModule; re-enable Sentry & Prometheus via Nest Keep Express as primary server; expose /metrics and /healthz from Nest
2. Authentication Cutover 3 AuthModule (web + mobile), session guards, DTO validation; migrate /api/auth/* & /api/mobile-auth/* Use Nest controllers; Express routes proxy to Nest until clients updated
3. Library & User Domain 4 LibraryModule, UserModule, GraphQL resolvers migrated to Nest @Resolver; article/page/shortcuts endpoints Implement hybrid GraphQL server (Nest Apollo) while Express keeps serving remaining schema via schema stitching
4. Content Ingestion & Workers 3 IngestionModule, background queue module, bridge to BullMQ, ContentWorker orchestrated through Nest providers Run Nest queue processor, gradually decommission legacy worker bootstrap
5. Notifications & Integrations 3 DigestModule, NotificationModule, IntegrationModule; migrate cron/task APIs Ensure email schedules triggered by Nest cron jobs
6. Full Cutover & Cleanup 2 Deprecate Express router, consolidate GraphQL schema, remove dual bootstrap Update Dockerfiles, documentation, monitoring

Total estimate: 18 developer-weeks assuming one senior engineer leading with support. Work can run in parallel (e.g., Phase 3 & 4) once foundations are stable.

Incremental Delivery Strategy

  1. Bootstrap Nest: create packages/api-nest with shared tsconfig, re-use TypeORM configuration via shared module (packages/shared/config).
  2. Dual-run: mount Nest app inside Express (app.use('/api/v2', nestServer)) and gradually route traffic via reverse proxy rules (e.g., ExpressRouter.use('/auth', proxyToNest)).
  3. Shared Entities: extract TypeORM entities & repositories into packages/shared/db so both frameworks share migrations and models.
  4. Schema Bridging: use Apollo Gateway or schema stitching so GraphQL clients query a unified endpoint while underlying resolvers transition.
  5. Worker Alignment: wrap BullMQ producers/consumers with Nest modules (@nestjs/bullmq), enabling dependency injection for job handlers.
  6. Retire Express: once all routers and resolvers live in Nest, simplify bootstrap to Nest-only HTTP server and remove legacy server.ts.

Risks & Mitigations

  • Dual route handling complexity → Introduce integration tests to verify routing under both Express and Nest.
  • TypeORM connection sharing → Establish a shared connection factory module to avoid duplicate connections.
  • Client regressions → Maintain contract tests per endpoint, keep /api/* paths identical while internals change.
  • Team learning curve → Document Nest patterns early, add lint rules & schematics for module creation.

Success Criteria

  • All HTTP traffic handled by NestJS without changes to client URLs.
  • Background workers instantiated via Nest modules.
  • SLOs maintained or improved (latency, error rate).
  • Documentation updated (this folder + README) and exported to Basecamp at each milestone.