Trilha
AI-powered career coaching platform that turns distant professional goals — landing a new job, switching companies, or going international — into a daily, actionable plan with Pomodoro, check-ins, and automatic task redistribution.
- Industry
- AI SaaS
- Role
- Senior Product Designer
- Timeline
- 2 weeks
- Status
- Production-ready

Context & problem
Tech professionals in Brazil face a competitive and ever-changing market. Many know exactly what they want — a better job, a career switch, an international opportunity — but can't turn that goal into consistent action. Generic productivity tools (Notion, Trello) don't understand career context, and human coaches are expensive and inaccessible.
- Career paralysis — The user knows they need to get their career back on track, but the goal is vague and intimidating.
- Consistency disappears — Without granularity, accountability, and adaptation to real life pace, consistency disappears within days.
- What's missing — It isn't information — it's structure, tracking, and automatic adaptation when the plan falls apart.

Process & discovery
I worked full stack: product design, the React front end and the Node.js + Express backend with Supabase and local AI.
- AI API Evaluation — Tested Anthropic (prohibitive cost), Gemini, and Groq (login/stability issues). Conclusion: no paid API was viable for an individual coaching MVP with daily content generation.
- Local AI with Ollama — Migrated to Ollama running llama3.2:3b locally. Trade-off: requires user hardware, but offers zero cost, total privacy, and independence from external services.
- JSON Schema & Carry-over — Implemented structured output via JSON Schema in Ollama (zero fragile parsing) and developed the carry-over algorithm: pending tasks are never lost, always prioritized the next day.

Solution
Trilha is a full-stack app that guides users through a step-guarded flow: login → AI resume analysis → goal definition → daily mission with Pomodoro → AI check-in → productivity report. All with local AI and zero API cost.Complete flow: user logs in, pastes their resume, receives profile analysis, defines goal and pace, executes missions in Pomodoro blocks, checks in daily, and tracks evolution in the productivity report.
- Login — & Onboarding
- AI Resume — Analysis
- Goal — Definition
- Daily Mission — with Pomodoro
- AI — Check-in
- Productivity — Report

Results
Successful JSON parse rate: JSON Schema guarantees structured LLM output without fragile regex. Average mission generation time: llama3.2:3b on modern CPU, acceptable latency for async coaching.
- 99% Successful — JSON Parse Rate
- 3s Average — Mission Generation
Tools
React 19 · Vite 8 · TypeScript 6 · Tailwind CSS v4 · Zustand v5 · React Router v7 · Node.js · Express · Supabase · bcryptjs · cookie-parser · Ollama · llama3.2:3b · JSON Schema · Prompt Engineering · Git
- React 19 — + React Router v7
- Vite 8 — Build Tool
- TypeScript 6 — + Zustand v5
- Tailwind CSS — v4
- Node.js — + Express
- Supabase — + bcryptjs
- Ollama — llama3.2:3b
- Git — + JSON Schema
Learnings
- JSON Schema is indispensable for LLMs in production. — Without it, you live debugging markdown regexes. With Ollama's format parameter, structured output is guaranteed — parse rate close to 100%.
- Local AI is viable for niche MVPs. — 3–5s latency is acceptable for async coaching. The privacy gain (resumes never leave the machine) and zero cost outweigh the hardware trade-off, especially for single-tenant apps.
- JSON state is a double-edged sword. — Persisting the entire app state as JSON in one column accelerates short-term iteration, but requires validation discipline. A migration plan to relational schema must exist from day 1.
- Prompt engineering solves scheduling problems. — The carry-over algorithm doesn't require complex code — an explicit instruction in the prompt ("never discard pending items") makes the AI prioritize overdue tasks automatically.