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
- aws-bedrock
- aws-ecs
- claude
- docker
- fastapi
- github-actions
- google-font
- httpx
- next-js
- oauth
- oidc
- open-food-facts-api
- pillow
- postgresql
- pwa
- pydantic
- pytest
- python
- react
- sqlalchemy
- supabase
- tailwind
- typescript
- zxing
Log in or sign up for Devpost to join the conversation.