Pilote
Pilote is a personal project management app. It breaks each project into phases, tasks and sub-tasks, and tracks progress with threshold-based counters and declarative signals. An AI-assisted weekly planner proposes a weekly plan, synchronised with Google Calendar. I designed and built the whole thing: NestJS API, PostgreSQL database, Next.js interface and a provider-agnostic AI layer.
- Context
- Personal project
- Role
- Full-stack design and development, solo
- Duration
- 3 months
- Front
- Next.js 16, React 19, React Query, React Hook Form, Zod, Recharts
- Back
- NestJS 11, Prisma 6, PostgreSQL 15, JWT, Swagger
- AI
- Anthropic, OpenAI, Gemini, Groq, DeepSeek, Mistral or Ollama, user’s choice
- Integration
- Google Calendar (OAuth, tokens encrypted with AES-256-GCM)
- Quality
- Unit, e2e and component tests, lint, pre-commit hook

Steering several projects
without scattering
Pilote splits projects into phases, tasks and sub-tasks, with progress tracking. The need comes down to three points: knowing where each project stands, being alerted when an indicator drifts, and turning goals into a realistic weekly plan.
A fully typed
monorepo
I split a NestJS API (14 controller modules, Swagger documentation) from a Next.js frontend organised by domain. Prisma and PostgreSQL carry a relational model of 14 models, versioned through 6 migrations. Authentication relies on JWT, and Zod validates data on both client and server.
The AI layer is abstracted behind a provider interface, with Anthropic, OpenAI, Gemini and an OpenAI-compatible provider (Groq, DeepSeek, Mistral, Ollama). Each user picks their provider and key in Settings. Google tokens are encrypted with AES-256-GCM before storage.


Alerts, AI and
data consistency
Counters had to alert over a sliding window. I isolated the logic in a pure function that returns "normal", "alert" or "no data" based on the threshold, the comparator and the number of days, and covered it with its own unit test.
The data model evolved with use, through migrations: tasks without a project, phase status, project archiving, reopening a completed task, editing and deleting counter and signal entries. A confirmation dialog and notifications frame deletions, which are permanent.
A consolidation phase followed: clean lint on backend and frontend, then component tests with vitest and Testing Library.





A working, documented
and tested application
The application covers the cycle of projects, phases, tasks, counters and signals, AI suggestions (phase tasks, project draft, deviation analysis), the weekly planner and an agenda synced with Google Calendar. It is documented and tested (unit, e2e and component). Stated limits: no trash bin, and a planner that still ignores phases.