active · 2026-01 → present
Mera
AI calorie tracking app for the Russian market. Three input modes — text, computer vision, and a context-aware advisor — share a single FastAPI backend.
Project highlights
- Co-founded; I own the backend and the platform plumbing end to end.
- Four surfaces in one product: iOS, Android, backend, web.
- Three input modes — text, computer vision on a meal photo, and a context-aware advisor — all writing the same nutrition state.
- Payments live on both sides of the iOS divide: Apple Pay for in-app, YooKassa for the web subscription path.
- Currently active and live in the Russian market.
What I built
- FastAPI backend — auth, food/log/meal data, vision and advisor pipelines, subscription & entitlement state.
- PostgreSQL + Alembic for nutrition data and migrations.
- Celery + Redis for the bursty work: vision inference and advisor turn chains.
- Docker + CI/CD so deploys are not a ceremony.
- Payment integrations — Apple Pay (StoreKit receipts → entitlement) and YooKassa for the web path.
- Web app at app-mera.ru for subscription management.
The product
People log food differently. Some want to type “two eggs and toast” and move on. Some want to point a camera at their plate. Some want a back-and-forth with a nutritionist. Mera supports all three, and the whole point is that they converge on the same nutrition record — calories, macros, portion size, timestamp, photo — regardless of which mode the user picked.
Today the app sits live on iOS, Android, and the web, with a paid Pro tier that unlocks daily quotas across each input mode. The free tier is enough to use the app casually; the Pro tier is for people building a daily logging habit.
Three inputs, one nutrition state
The interesting bit isn’t any single mode — it’s the convergence. Logging a meal as text, recognising it from a photo, and discussing it with the advisor all read and write the same rows. Holding that consistent under three very different latency profiles is most of the work.
Text is synchronous: parse the user’s string, normalise against the food database, write the log entry, return. Vision is a Celery job: the photo passes through a vision model, returns a proposed meal with macros, and the user confirms or edits before commit. Advisor is a multi-turn agent with the user’s diary and goals in context, so when it suggests “swap the bagel for an open-faced toast,” the suggestion is grounded in what the user actually ate this week, not in generic nutrition advice.
The screen on the left shows all three converging in one place: a vision-derived meal, AI advisor commentary inline, and a free-text correction box at the bottom that re-runs the macro estimate against whatever the user typed. One record in the database, regardless of which input wrote which field.
Web platform & subscriptions
The web app at app-mera.ru handles the subscription side of the product — sign-in, plan selection, billing history, account settings. Pro runs 299 ₽/month or 2 490 ₽/year (a 31% annual discount), and unlocks 30 photo logs, 30 text logs, and 30 advisor messages per day.
Payments split cleanly along the platform divide. iOS uses Apple Pay via StoreKit; the receipt round-trips through the backend to set entitlement on the server, so the user’s Pro state is consistent across devices. The web path runs on YooKassa, the Sber/MOEX-aligned Russian payment processor, for ruble card payments. Both flows write into the same entitlement table, and the mobile clients read entitlement from the backend rather than from local receipts — one source of truth.
Shipping in Russia
Honest answer: the development was hard, and the legal & setup work was comparable in weight. Shipping a paid consumer product in Russia means everything ships twice — once as code, once as paperwork. Personal-data handling under 152-ФЗ, consumer-agreement language for the subscription tiers, the merchant agreement with YooKassa and the Apple Pay merchant setup, an actual legal entity to receive payments through, terms of service and privacy policies tuned to the local regulator’s preferred phrasing — all of that is on the critical path before a single ruble moves.
None of it is technically interesting in isolation. All of it is required, and none of it can be skipped or batched. Doing this work for a small founding team, in parallel with the actual engineering, is most of what makes a Russian-market consumer app harder to ship than the equivalent product elsewhere.
Status
Active. Mera is live in the Russian market and growing. Day-to-day work right now is split across the three input pipelines, observability for the Celery/vision path, and gradual tightening of the subscription & entitlement layer as we learn more from real-paying users.