CLOSED-LOOP BODY COMPOSITION · v0.1 · BENGALURU
Set a goal
Log your weight
Everything else runs on autopilot
bodyctl turns weight tracking into a controller: set a goal, log your weight, and watch your macro targets, grocery list, and progress checks run on autopilot. Built for Indian lifters who are tired of apps that stop at tracking.
Everything else runs on autopilot only after your goal, weight trend, portion calibration, and training pattern give the controller enough signal to adjust macros without guessing.
closed beta · 47 lifters · bengaluru, mumbai, hyderabad first
THE GAP
Every fitness app stops one step short
You can track lifts, log calories, or order groceries, but no tool connects daily weight tracking, training load, macro progress, and the food that needs to show up at home.
| Tool | What it does | What it misses |
|---|---|---|
| MacroFactor | Adaptive TDEE, clean logger | Western food DB, no grocery, ignores your training |
| HealthifyMe | Calorie chat, human coaches | Shallow engine, wild restaurant macros, upsell loop |
| Cronometer | Most accurate logger | Pure log, no controller, and no automation |
| MyFitnessPal | Massive crowd-sourced DB | Stale UI, ads, no Indian depth |
| Hevy | Best lift tracker on the market | Training only, while nutrition stays your problem |
| bodyctl | Goal → macros → cart, training-aware, Indian-first | v1 is COD-only, and restaurant macros are envelopes rather than logs |
SYSTEM ARCHITECTURE
Boring layer first, then automation
The macro engine is a pure function with weight history and goal going in, daily targets coming out, and no network calls, UI state, or ORM hidden inside the calculation. We tested it against 200 synthetic lifters before a real user touched it.
Everything else is plumbing around that controller: Swiggy MCP for Instamart, Hevy MCP for training data, IFCT 2017 plus Docling OCR for nutrition, Postgres for state, and pgvector for SKU matching. The agent orchestrates those systems without inventing nutrition facts.
CORE COMPONENTS
Five small things, wired together
Each component does one boring job: estimate the target, choose Indian meals, convert meals into groceries, read training stress, and handle messy restaurant days without pretending precision exists.
goal engine
Mifflin-St Jeor seeds the first target, then a PI controller adapts TDEE from your weight trend. The engine changes macros only when the signal is strong enough. First 4 weeks stay hard-clamped because early data is mostly noise.
meal planner
ILP solver picks from 50–100 Indian meal blocks calibrated to your portions. It solves against macros, budget, prep time, and food you will actually repeat, without pretending another balanced bowl fixes Indian meal planning.
grocery aggregator
Maps the week's meals to live Instamart SKUs for your pin code. bodyctl builds the cart from required ingredients and pack sizes. You triple-confirm before any COD order is placed.
hevy power-up
Reads volume and session RPE from Hevy when you connect it. Heavy lower-body days get more carbs; full rest days pull back. It is optional because the weight-based macro controller still works without training data.
restaurant fallback
Dineout integration logs restaurant meals as macro envelopes, not fake point estimates. Indian curries can carry honest ±300 kcal error, so the controller treats them as uncertainty instead of pretending a bad number beats zero.
HONEST CONSTRAINTS
Things this product cannot do, and why we say so upfront.
Every fitness app over-promises, so bodyctl publishes constraints before the beta asks anyone to trust its automation.
Orders are COD-only and irrevocable in v1, so bodyctl triple-confirms the cart before any place-order call and waits for UPI checkout until Swiggy ships it.
Catalogue churns per pin code every week, so SKUs are cached aggressively, never hardcoded, and your Monday cart is not assumed to exist on Sunday.
IFCT 2017 gives 542 raw food entries for dal, atta, paneer, and eggs, while branded packaged foods like whey or protein bars still need OCR via Docling.
One roti can use 25–50g atta depending on whose hand rolled it, so onboarding calibrates portion sizes once instead of pretending everyone eats the same gram weight.
Controller output can whip wildly during the first 4 weeks of user data, so early estimates stay hard-clamped and visible with a confidence band.
Weight, food, and training data are health data under DPDP 2023, which means data minimization is default and third-party analytics stay off user records.
BUILD STATUS · UPDATED WEEKLY
Where this is right now
| IFCT 2017 ingestion · 542 foods | shipped |
|---|---|
| Synthetic test harness · 200 lifters | shipped |
| Macro engine · PI controller | shipped |
| Postgres + pgvector schema | shipped |
| Meal planner · ILP solver | in progress |
| Hevy MCP integration | in progress |
| Onboarding · portion calibration | pending |
| Swiggy MCP · Instamart cart | |
| Web app · Next.js 15 | pending |
| Dineout · restaurant fallback | pending |
| iOS shortcut · weight log | pending |
Swiggy Builders Club approval pending. Track at github.com/akl773/bodyctl.
commit: github.com/akl773/bodyctl@586af38
Closed beta has 47 lifters in, with Bengaluru, Mumbai, and Hyderabad first.
We onboard manually because weight tracking, macro changes, and Indian food habits need calibration before autopilot makes sense, and every reply is read by a builder rather than a drip campaign.
or email contact@akhilsingh.inwith your weight in kg, goal, and screenshot of last week's hevy, because that context is the application.