Inspiration

Most nutrition apps only track calories, protein, carbs, and fat. That leaves out anyone managing blood sugar, following a religious or cultural diet, or just trying to eat more fiber and produce. Comparing dense nutrition labels against a goal that isn't "lose weight" is still entirely manual, standing in the aisle. Solum puts that goal-specific reasoning directly into that moment.

What it does

  • Goals across four axes: health focus, dietary pattern, hard restrictions, free-form nutrient targets, not just calories and macros.
  • Scans a barcode, a label photo, or a whole shelf in one shot.
  • Falls back to Claude's vision when a barcode has no usable data.
  • Scores every product against your full goal profile in one call, with a plain-language reason and interaction warnings.
  • Answers nutrition questions by text or voice, with real tables, not paragraphs.

How we built it

  • Frontend: Next.js (App Router), TypeScript, Tailwind. Mobile-first PWA.
  • Backend: FastAPI (Python), pytest-gated deploys.
  • Data and auth: Supabase Postgres and Auth, row-level security.
  • AI: Claude (Anthropic API, AWS Bedrock fallback) for vision, scoring, and chat.
  • Voice and identity: ElevenLabs, Persona.
  • Deploy: GitHub Actions, OIDC, AWS ECS. No stored secrets.

Scan pipeline: $$\text{Barcode} \rightarrow \text{Open Food Facts}$$ $$\text{No match} \rightarrow \text{Claude Vision} \rightarrow \text{Structured Nutrition Data}$$

Recommendation pipeline: $$\text{Goals} + \text{Scanned Products} \rightarrow \text{Claude (one call)} \rightarrow \text{Scored Picks} + \text{Warnings}$$

Chat pipeline: $$\text{Question (text or voice)} \rightarrow \text{Claude} \rightarrow \text{Text + Table Blocks} \rightarrow \text{ElevenLabs (optional)}$$

Access gate: $$\text{3 Free Calls} \rightarrow \text{Persona Check} \rightarrow \text{Unlimited Recommendations}$$

Challenges we ran into

  • Redesigned goals mid-build: one enum to four flexible axes, no migration needed for new nutrients.
  • Made Claude's output renderable: a typed schema of text and table blocks, not parsed prose.
  • Real camera UX: viewfinder framing that worked in a mock broke on a real phone.

Accomplishments that we're proud of

  • One recommendation engine, full goal profile, one Claude call, self-explained.
  • One scanning pipeline for three real inputs: barcode, label, shelf.
  • Shipped to real infrastructure: containerized, zero stored credentials, not a laptop demo.

What we learned

  • Model the data around real goals, not form-friendly ones.
  • Give an LLM a schema if its output has to render. Don't parse prose.
  • Backend progress isn't user-facing progress until the frontend catches up.

What's next for Solum

  • Save and track a shopping list against daily targets.
  • Beyond Rice, anywhere a store catalog can be seeded.

Built With

Share this project:

Updates

Submission history