bodyctl

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.

join the bodyctl waitlist

drop your email — i'll reply with a few questions to calibrate before onboarding.

see how it works ↓

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.

Comparison of bodyctl against existing fitness and nutrition tools.
ToolWhat it doesWhat it misses
MacroFactorAdaptive TDEE, clean loggerWestern food DB, no grocery, ignores your training
HealthifyMeCalorie chat, human coachesShallow engine, wild restaurant macros, upsell loop
CronometerMost accurate loggerPure log, no controller, and no automation
MyFitnessPalMassive crowd-sourced DBStale UI, ads, no Indian depth
HevyBest lift tracker on the marketTraining only, while nutrition stays your problem
bodyctlGoal → macros → cart, training-aware, Indian-firstv1 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.

weight logdailyhevy mcptrainingbodyctl agentgoal enginePImeal plannerILPgrocery aggregatorpostgrespgvectorifct 2017docling OCRswiggy mcpinstamart

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.

±5% macro accuracy after week 4

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.

roti, dal, paneer, whey, eggs, curd, oats

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.

COD ONLY · v1

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.

requires hevy pro

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.

±300 KCAL ENVELOPE

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.

SWIGGY

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.

INSTAMART

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

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.

PORTIONS

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.

TDEE

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.

DPDP

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.

join the bodyctl waitlist

drop your email — i'll reply with a few questions to calibrate before onboarding.

or email contact@akhilsingh.inwith your weight in kg, goal, and screenshot of last week's hevy, because that context is the application.