Describe what you ate in your own words — Kallo derives the full nutrition breakdown from trusted data.
HealthTypeScript · DartGitHub @VoMinhKhoiiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Natural language nutrition tracking platform
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
The only tracking method accurate enough for Vietnamese home cooking is natural language description.
Kallo turns a sentence about what you ate into a structured breakdown of
ingredients, weights, and macros. It began around how Vietnamese meals are
actually composed — not how Western food trackers expect them to be — and now
handles meals globally, matching against both FAO and USDA food data with
multilingual input and output.Read the full README ↗The only tracking method accurate enough for Vietnamese home cooking is natural language description.
Kallo turns a sentence about what you ate into a structured breakdown of ingredients, weights, and macros. It began around how Vietnamese meals are actually composed — not how Western food trackers expect them to be — and now handles meals globally, matching against both FAO and USDA food data with multilingual input and output.
bỏ da and the fat drops; say cân sống and the
weight basis changes; say 2 chén and the rice is counted rather than
assumed from a setting filled in once.A Next.js app at the root, with two satellites:
| Path | What it is |
|---|---|
app/, components/, lib/ | The web app — Next.js App Router, React 19 |
lib/ai/ | The estimation pipeline: decomposition, matching, portions, bounds |
apps/mobile-flutter/ | The Flutter mobile client |
apps/docs/, content/docs/ | The documentation site and its content |
supabase/, scripts/ | Schema, migrations, and operational scripts |
docs/ | Engineering docs — database, billing, email, deploy, data provenance |
Stack: Next.js 16 · React 19 · Drizzle ORM over Supabase Postgres · TanStack Query · next-intl · Tailwind v4 · Biome · Vitest.
You need Bun. Running Vitest also requires Node.js 22.12 or newer. A Supabase project plus a Gemini API key are required for anything that touches the pipeline.
bun install
bun run setup:env # scaffolds .env.local
bun run dev # http://localhost:3000
The estimation pipeline needs real food-composition data, which a bare local
Supabase does not have — point DATABASE_URL at a seeded project, or expect
matching to return nothing.
Common tasks:
bun run test # Vitest
bunx biome check --write <path> # lint and format; scope it to what you touched
bunx tsc --noEmit # types
bun run check:structure # size + folder + test-placement + barrel gate, enforced in CI
bun run eval:pipeline # estimation quality harness
bun run dev:mobile # Flutter client
Database work goes through bun run db:* (Drizzle) and bun run dbr:*
(remote Supabase). docs/DATABASE.md explains which to reach for.
Kallo is in active development. Versions follow
Semantic Versioning; see
CHANGELOG.md for what shipped in each release.
This repository is published under a source-available license
(see LICENSE). You may read, fork, build, and run the code
for non-production use. Commercial use, redistribution, or hosting Kallo as
a managed service requires a separate agreement — please get in touch.
Please report suspected vulnerabilities privately — see
SECURITY.md. Do not file public issues for security
problems.
Issues and pull requests are welcome. By submitting code you agree it can
ship under the project's source-available license. Use
Conventional Commit messages
(feat:, fix:, perf:, etc.) — they drive the automated changelog.
Nutrient reference data derives in part from the Vietnam National Food
Composition Table (2007) and the USDA FoodData Central database. Bootstrapped
with create-next-app
on Next.js 16 and React 19.