All work003 · AI-assisted full-stack web application

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
Pilote: overview with average progress, projects to watch and alerts
Context

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.

Approach

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.

Pilote: project detail with phases, signals and progressPilote: project list
Challenges

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.

Pilote: "Today" view on mobilePilote: project detail on mobile
Pilote: "Today" view with the day’s tasks
Pilote: AI weekly plannerPilote: monthly task calendar
Outcome

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.

A similar project?

Let's talk about your project.

Describe what you need in a few lines: an app, a dashboard, an AI feature to add. I reply within 24h with an honest first take on your project.