back to portfolio
Full-Stack Project · Next.js + Express · 2025

Navigoo

shipped
Period
Jan – Jun 2025
Role
Solo
Type
Full-Stack Web App
Status
Complete

Overview

An interactive goal navigation and timeline planner that lets users design visual learning paths, track milestones, schedule deadlines, and manage tasks — with AI-powered roadmap generation. Community features let you browse and fork public roadmaps. Think Trello meets a curriculum builder, but with AI doing the heavy lifting.

AI-Powered Generation

  • AI generates full curricula from title, description, domain, and skill level
  • Structured JSON output with prompt engineering — segments, goals, and references in one pass
  • AI usage tracking with per-user weekly limits and progressive consumption tiers

Timeline & Segment Management

  • Create roadmap or chronicle timelines with daily, weekly, or monthly time units
  • Segments with goals, references, milestones, and optional date scheduling
  • Timeline forking — clone any public roadmap into your own workspace with version tracking

Authentication & Security

  • Dual JWT token flow — short-lived access + long-lived refresh with automatic silent renewal
  • Bearer token extraction middleware with distinct expired-vs-invalid error handling
  • bcrypt password hashing with configurable salt rounds

Client Experience

  • Dynamic theming — three accent color palettes switchable from settings
  • Framer Motion page transitions and micro-animations across dashboard
  • Built-in time tracker, completion progress gauges, and sound feedback synthesis

On the roadmap

  • Collaborative timeline editing with real-time sync via WebSockets
  • Export timelines as PDF or shareable public links with custom branding
  • Offline segment completion tracking

The thought process

The interesting constraint was making AI generation transactional. The model returns a full curriculum — title, segments, goals, references — but every piece has to fan out into five normalized tables in a single atomic commit. I built a generic withTransaction wrapper around the pg pool that lets any service compose multi-table writes without leaking connection management into business logic.


Tech stack & why

Next.js 15
App Router with route groups, layouts, and standalone output for lightweight Docker containers. Server-side rendering where it matters, client interactivity everywhere else.
Express 5
Minimal, modular REST API. Each domain (auth, timeline, segment, user, LLM) is an isolated module with its own controllers, services, routes, and validations.
PostgreSQL
Relational store for timelines, segments, goals, references, and schedules. Normalized schema with UUID primary keys across all tables.
AI Integration
AI backbone for curriculum generation. Structured JSON output mode with domain-specific prompt engineering for learning path design.
JWT (Access + Refresh)
Dual-token auth with short-lived access tokens and HTTP-only refresh cookies. Client-side interceptor auto-refreshes on 401 without user disruption.
Framer Motion
Page transitions, layout animations, and micro-interactions across the dashboard. Makes the UI feel responsive and alive.
Tailwind CSS
Utility-first styling with theming support — Emerald, Indigo, and Slate accent palettes switchable from the settings page.
Cloudinary
User avatar uploads with transformation and CDN delivery. Multer handles the multipart boundary, Cloudinary handles the rest.
Zod
Runtime request validation on the backend. Schema-first approach catches bad data at the API boundary before it reaches the service layer.
Docker
Multi-stage builds for both client (standalone Next.js) and server (Docker Compose with Postgres). Production-ready containerization.

Major updates

Jun 2025
AI timeline generation
Full curriculum generation via AI. Transactional writes fan structured AI output into five normalized tables atomically.
May 2025
User profiles & theming
Cloudinary avatar uploads, settings page with Emerald/Indigo/Slate themes, transition toggles, and synthesized audio feedback.
Apr 2025
Timeline forking & explore
Community discovery hub. Fork any public roadmap with version tracking. Forked segments marked to preserve attribution lineage.
Mar 2025
Segment scheduling
Date-based segment scheduling with completion tracking. Dashboard stats compute progress dynamically from segment state.
Feb 2025
Auth system & core CRUD
JWT dual-token auth with silent refresh. Timeline and segment CRUD with Zod validation, ownership guards, and modular Express architecture.
Jan 2025
Project bootstrap
Next.js 15 App Router frontend, Express 5 backend, PostgreSQL schema design. Docker Compose for local dev, Vercel adapter for serverless deployment.

What I actually learned


What I'd do differently

Real-time collaboration
Timelines are single-user. WebSocket-based collaborative editing would make shared learning paths actually collaborative.
Prompt engineering
AI prompts are hardcoded strings. A prompt templating system with version control would make iteration faster and more testable.
Rate limiting
AI usage is tracked per-user in the database but there is no middleware-level rate limiter. Redis-backed sliding window would be more robust.
Schema normalization
Normalized to 3NF from day one. Loading a single timeline now requires joining five tables. Storing segment details as JSON would have kept reads simple.

Key takeaways

01
AI features are database problems in disguise. The hard part is not calling the API — it is persisting structured output atomically.
02
Modular backends age gracefully. Adding the LLM module months later required zero changes to existing auth, timeline, or segment code.
03
Silent token refresh is table stakes. If your user ever sees a login screen because a token expired mid-session, you have failed.