TypeScript + NestJS (Docs-only learning)
Goal: Become actually good at full-stack engineering by learning from first principles and official documentation only.
- Use official documentation only
- No ChatGPT / Copilot / AI tools while learning
- Google errors, read GitHub issues, read specs
- If stuck → re-read docs, simplify, retry
This phase never ends.
(Weeks 1–4)
- Semantic tags
- Forms & inputs
- Accessibility basics
- Box model
- Flexbox
- Grid
- Responsive layouts
- Execution context
- Call stack
- Heap
- Closures
this- Prototypes
- Event loop (macrotask vs microtask)
- Sync vs async execution
- Promises
async / await- Error propagation
- Parallel vs sequential execution
- What Node actually provides
- Node vs browser JavaScript
- Global objects
- Streams (basic idea)
-
Build a static website with:
- Proper HTML semantics
- Responsive layout (mobile + desktop)
-
Write pure JavaScript programs (no frameworks):
- Implement a custom
sleep(ms) - Implement parallel API calls using
Promise.all - Log execution order to prove event loop understanding
- Implement a custom
-
Build a bare Node HTTP server (no Express):
- Handle GET and POST
- Parse request body manually
- Send JSON responses
Rule: If you can’t explain the event loop on paper → don’t move on.
(Weeks 5–6)
- Methods
- Status codes
- Headers
- Cookies vs tokens
- Idempotency
- Resource-oriented design
- Proper route naming
- Error responses
- Pagination basics
- Types vs interfaces
- Generics
- Enums
- Utility types
- Type narrowing
-
Design a REST API on paper:
- Resources
- Routes
- Request/response shapes
- Error cases
-
Build a REST API using Express:
- CRUD for one resource
- Centralized error handling
- Strict response format
-
Convert the same project to TypeScript:
- No
any - Proper DTO types
- No
Rule: If your API responses are inconsistent → redo.
(Weeks 7–9)
- Modules
- Controllers
- Providers
- Dependency Injection
- Lifecycle
- Pipes
- Guards
- Interceptors
- Exception filters
- DTOs
- Schema validation
- Request sanitization
- Password hashing
- JWT
- Auth guards
- Role-based access
- Ownership checks
-
Build a NestJS API with:
- Authentication (signup, login, me)
- Role-based access (admin / user)
-
Add:
- Global validation pipe
- Global exception filter
- Logging interceptor
-
Refactor code to ensure:
- Controllers = thin
- Services = business logic
- No business logic in controllers
Rule: If your controllers are fat → refactor.
(Weeks 10–12)
- Relational thinking
- Tables & relations
- Indexes
- Transactions
- Joins
- Schema design
- Constraints
- Foreign keys
- Migrations
- Relations
- Transactions
- Type-safe queries
- Separation of concerns
- Service boundaries
- Configuration management
- Environment variables
-
Design a database schema on paper:
- Users
- Roles
- Relations
-
Implement schema using ORM:
- Migrations
- Relations
- Seed data
-
Implement:
- Ownership checks at service level
- Transaction-based operations
-
Add basic tests:
- Service-level tests
- API-level tests
Rule: If deleting data breaks your app → schema is wrong.
(Weeks 13–14)
- Components
- Props
- State
- Hooks
- Controlled inputs
- Routing
- Data fetching
- API routes
- Server vs client components
-
Build a frontend that:
- Consumes your backend
- Handles authentication
- Shows errors properly
-
Implement:
- Protected routes
- Loading states
- Error boundaries
Rule: Ugly UI is fine. Broken UX is not.
(Weeks 15–16)
- Connection lifecycle
- Authentication over WebSockets
- Broadcast vs unicast
- Event-based protocols
- Global state risks
- Cleanup strategies
- Lifecycle management
- Why async jobs exist
- Retry logic
- Failure handling
-
Build a real-time backend system:
- JWT-authenticated WebSocket server
- Role-based WebSocket events
- In-memory session state
- Persistence to database
-
Implement:
- Broadcast events
- User-specific responses
- Proper cleanup on completion
-
Add:
- Error events
- Guard checks
- Persistence guarantees
Rule: If a server restart breaks logic → redesign.
After completing this roadmap:
- You understand how web systems actually work
- You can read and reason about any backend codebase
- You don’t panic when things break
- You’re ready for AI / system design / infrastructure next
No hype. No shortcuts. Just engineering.