StackStep helps developers learn tech stacks by generating phased, project-based roadmaps. It pairs an LLM-driven planner with opinionated, actionable tasks so learners can "learn by building" instead of reading large dumps.
This README highlights the architecture, why this project matters, how to run it locally, and where to look when evaluating the code — useful for recruiters and engineers reviewing the repository.
- Purpose: Turn a simple tech-stack prompt (e.g. "MERN", "Next.js + Tailwind") into a structured, phased roadmap of projects and tasks.
- Audience: Junior-to-intermediate developers who want guided, project-based learning.
- What to look for: clear API boundaries, secure auth, well-structured frontend with reusable components, and the server's LLM orchestration logic.
- LLM-driven roadmap generation (server-side service).
- User accounts + JWT authentication.
- Per-user projects and phases with tasks and definition-of-done (DoD).
- Responsive React frontend (Vite + Tailwind) with accessible components.
- Focus on developer experience: clean components, clear data shapes, and small, testable services.
- Frontend: React, Vite, TypeScript (mix of tsx/tsx), TailwindCSS
- Backend: Node.js (ESM), Express, Mongoose (MongoDB)
- Auth: JWT
- LLM integration: server-side service (llm.service.js)
- Tooling: Sonner for toasts, Lucide icons, axios for HTTP
Requirements:
- Node.js 18+ and npm (or pnpm)
- MongoDB running locally or a hosted connection
- Install dependencies
# from repo root
cd client
npm install
cd ../server
npm install- Environment
-
Server: create
.envor set env varsMONGO_URI— MongoDB connection stringJWT_SECRET— JWT signing secret (use strong secret in prod)PORT— optional (default 5000)
-
Client: create
.envinclient/if neededVITE_API_URL— e.g.http://localhost:5000
- Start services
# server (from server/)
npm run dev
# client (from client/)
npm run devOpen http://localhost:5173 (Vite default) to view the app.
- Frontend
Generatepage posts{ techStack, experienceLevel }toPOST /api/projects/generate. - Server invokes
llm.service.jsto compose a phased plan (phases, tasks, DoD). projectService.saveProject()persists the plan to MongoDB with owner information.- Users can view their projects at
/dashboardand project details at/projects/:id.
Key server files to review:
server/service/llm.service.js— LLM prompt composition and parsingserver/service/projectService.js— project persistenceserver/controller/*.js— route handlers (create, get, delete)
Key frontend files:
client/src/pages/GeneratePage.tsx— form to create a roadmapclient/src/pages/ProjectDetailPage.tsx— phase/task rendering (DoD visible)client/src/hooks/useAuth.ts— auth state management
- POST
/api/projects/generate— Generate a roadmap. Body:{ techStack, experienceLevel }. - GET
/api/projects— List authenticated user's projects (JWT required). - GET
/api/projects/:id— Fetch project detail (owner-only). - DELETE
/api/projects/:id— Delete project (owner-only). - POST
/api/auth/register— Register; returns{ token, user }on success. - POST
/api/auth/login— Login; returns{ token, user }.
All protected endpoints require Authorization: Bearer <token> header.
- JWT-based auth with token stored in
localStorage(auth pattern is simple and pragmatic for a demo app; for production, consider httpOnly cookies). - Projects are stored with a
userObjectId — endpoints enforce ownership checks. - LLM outputs are validated before save; untrusted LLM content should be sanitized and treated as user-provided content.
- Code organization and separation of concerns (service vs controller vs routes).
- Error handling and input validation (
express-validatorusage + controller checks). - Auth flow and secure ownership checks.
- Frontend component design (reusability, small components, layout).
- LLM prompt handling and robustness to unexpected outputs.
- The project uses plain Tailwind component classes plus a small UI wrapper library in
client/components/ui. - To change the LLM behavior, examine
server/service/prompt.service.jsandllm.service.js.
- Fork, create a branch, open a PR with focused changes.
- Keep changes small and include tests where applicable.
This repo is provided for demonstration and interviewing purposes.
For questions or a walkthrough, contact: []
Thank you for reviewing StackStep — the codebase is intentionally compact and focused on delivering a production-like experience with an emphasis on learning-by-building workflows.