nutri.

Nutrimetry — personal project, in production

Nutrition tracking with laboratory-grade precision.

A PWA I use every day: 108 micronutrients, phased targets, semantic search and AI analysis. Built end to end — product, data, design and infrastructure — by one person.

Today · Jul 16 On target
1,842 / 2,100 kcal
Protein132 / 150 g
Carbs178 / 220 g
Fat58 / 70 g
Sodium · 1,240 mg ⚠ under 1,500 mg

Real interface data model — the safety floor never turns off.

108micronutrients
163automated tests
20SQL migrations
4.5:1minimum contrast

Decisions, not just features

Every trade-off resolves in favor of data accuracy. These are the calls that shaped the system.

Data integrity

Accuracy wins every trade-off

Everything is stored per 100 g and computed in SQL views at read time — values are never copied between tables. Doubtful data gets flagged ⚠, never saved silently.

Declared kcal are checked against Atwater factors (4/4/9, fiber at 2 kcal/g): a gap over 25% demands review before saving.

label · OFF · USDA · AI normalized to 100 g SQL view at read time
Bananastoredlogged: 150 g
kcal89134
protein1.1 g1.7 g
potassium358 mg537 mg
fiber2.6 g3.9 g
⚠ 89 kcal declared · 132 per Atwater — needs review

One correction to the food fixes every historical entry — the view scales, it doesn't copy.

A deliberately small stack

~45 source files, zero TypeScript, no state library. Restraint is a feature: every dependency must justify itself in one line.

React PWAVite · Tailwind · Recharts · offline · es/en
Postgres · SupabaseSQL views · pgvector · Auth · Storage
Photo or labelcanvas compression → 1024 px
AI cascadeGemini 3.8 → … → 2.5 → Groq → Mistral
MCP clientsClaude · ChatGPT · Perplexity…
The same log8 tools: log, search, audit
git push mainGitHub Actions: lint · 186 tests · build
Vercelproduction — no staging, verified locally
ReactSupabase · Postgres + RLSpgvectorTailwindRechartsVite PWAGemini · Groq · MistralMCPGitHub ActionsVercel

Behind the project

nutri. is a personal project — precise data, honest interfaces, end-to-end delivery: from the SQL schema to the pixel.