§1The problem
Test results, symptoms and advice were scattered across paper, photos and different apps, with no single view and no action plan.
§2What I built
- Five areasDashboard, history, files and analyses, coach (chat) and profile.
- Lab uploadPDF or photo, with values extracted automatically by AI.
- Coach chatA continuous thread, with an option to search guidelines on the web and show the sources.
- HistoryCombines data from my other apps (activities, tasks, habits, calendar) through a data broker.
- Action planThe coach suggests items and I approve them one by one before they become tasks.
- Visit summaryPDF generated on the server.
- Honest empty statesNo fake data where there is no source.
§3The hard parts
5 entries- 01
Extracting structured values from lab results
Varied formats (PDF and photo) read by AI, through a command-line tool signed in with OAuth instead of a paid API.
- 02
Composing history from several apps
Without duplicating data or creating rigid dependencies between them.
- 03
Human approval flow
The AI proposes, the user decides, and dismissed suggestions never come back.
- 04
Large uploads and PDF generation
Files up to 15 MB, and PDFs rendered with a headless browser.
- 05
A rewrite without migrating old data
Starting from scratch.
§4Result
Live and in use.
§5Stack
- Next.js 16
- React 19
- TypeScript 7
- Tailwind 4
- SQLite (better-sqlite3)
- Puppeteer (PDF)
- LLM via command-line agent (OAuth)
- Own design system
- pm2
- Tailscale