Skip to main content
Projects Live

Root PWA

The user photographs a product and within seconds knows whether they can eat it given their active restrictions (celiac disease, diabetes, lactose intolerance), combinable with each other. Root goes beyond the scanner: curated recipes with strict filtering and an offline food diary for those who already know what they cannot eat and want to know what they can.

By Valentina Ramírez · Updated: June 19, 2026

Summary

Offline-first PWA that scans food labels with AI (Claude API) and instantly tells you whether you can eat a product based on your active restrictions (celiac, diabetes, lactose intolerance). Django, DRF, PostgreSQL, React.

Stack
DjangoDRFPostgreSQLReactTypeScriptClaude APIPWA
01

The problem

Eating with celiac disease, diabetes, or lactose intolerance means reading every label, deciphering hidden ingredients listed under other names, and finding recipes that comply with multiple restrictions at the same time, all manually and scattered across sources.

02

What I built

  1. 01

    Offline-first PWA with Service Workers: the food diary works without connection and syncs when connectivity is restored.

  2. 02

    AI food label scanner: the user photographs a product and Claude API analyzes the ingredients against their active restriction profile.

  3. 03

    Persistent health profile that conditions all model responses (celiac disease, type 2 diabetes, lactose intolerance, combinable).

  4. 04

    Curated recipe system with strict filtering by multiple simultaneous conditions.

  5. 05

    Backend in Django REST Framework + PostgreSQL; frontend in React + TypeScript.

Label scanner

Photograph a product and the AI analyzes the ingredients against the user's active profile, including hidden ingredients listed under technical names.

Curated recipes

Catalog filtered by multiple restrictions: a recipe is validated against celiac disease, diabetes, and lactose intolerance simultaneously.

Food diary

Consumption log with full offline support. Records are persisted locally and sync when connectivity is restored.

03

Architecture decisions

1. Real medical niche, not generic wellness

Context
Many eat-healthy apps exist. People with celiac disease, diabetes, or intolerance have specific needs and real consequences if they make mistakes.
Trade-off
A broader product reaches more users but dilutes the proposition and lowers the validation standard.
Decision
Root is designed for people with a diagnosed medical condition. That defines the catalog, scanner criteria, and how results are presented.

2. Compound restrictions: AND logic, not OR

Context
A user can have celiac disease, diabetes, and lactose intolerance simultaneously. Most apps apply restrictions in silos.
Trade-off
Validating one restriction is simple. Validating three simultaneously with hidden ingredients under technical names requires a persistent profile model and specific prompts.
Decision
The health profile is persistent state, not session context. Each scanner analysis validates against all active restrictions at the same time.

3. Offline-first PWA for the food diary

Context
Consumption logging happens in the moment, not always with a good signal.
Trade-off
A traditional web app fails without connection. A native app requires store publishing and more maintenance.
Decision
Service Worker that persists the diary locally and syncs in batch when connectivity returns. Installs from the browser without going through the App Store.
04

Results

  • Functional label scanner: the user photographs a product and Claude API analyzes the ingredients against their active restriction profile, even when multiple conditions apply simultaneously.

  • Operational offline food diary thanks to offline-first design; records are persisted locally and sync when connectivity is restored.

  • Complete core in production: persistent health profile, AI scanner, and recipes with strict filtering on Django REST Framework, PostgreSQL, and React.

05

Learnings

  • Offline-first is not a layer added at the end: it conditions the sync model from the first endpoint and forces resolving data conflicts instead of assuming a single source of truth.

  • For the model's responses to be reliable, the health profile cannot go only in the prompt: treating restrictions as persistent verifiable state, not context that is lost between requests, is what prevents false negatives when combining celiac disease, diabetes, and lactose intolerance.

One click away

Your next idea deserves
code that can carry it.

I design and build complete products: from the backend to the interface your users love. With integrated AI and security by design.

Projects from COP 2,000,000 / USD 500 depending on scope (MVP from 3-6 weeks).

Limited availability, I respond within 24h.