Ongoing Foods is our own product, not a client engagement: a daily meal-subscription and delivery service that JIGOMIT built, operates and keeps store-compliant. We built the whole engine behind it — the Laravel API that powers the Flutter app, the recurring-subscription logic, and the web admin that vendors use to run the kitchen. It is live on the App Store and Google Play, and we are the ones who keep it there, so it is the one project we can show end to end, including the part that happens after launch.
The problem: a subscription kitchen is a daily operation
A meal-subscription business isn't like a normal store. The same customers need food every day, on a schedule — and every day someone has to turn "who's subscribed" into "what we cook and deliver today." Do that by hand and it falls apart fast:
- Regenerating each day's deliveries from the list of active subscriptions — tedious and error-prone.
- Customers who travel or skip a day — someone has to track pauses and one-off skips so meals aren't cooked and wasted (or missed).
- Coordinating delivery timing across customers and slots.
- Onboarding mobile customers without the friction of passwords and sign-up forms.
- Keeping the kitchen and delivery in sync as orders move through the day.
The customer app
The Flutter app runs on iOS and Android from one codebase and talks to a token-authenticated Laravel API we built for it. From the customer's phone:
- Passwordless login. Sign in with a phone number and a one-time code — no password to remember, no email required.
- Browse the menu. Menus and dishes with images, served fast from the API.
- Subscribe to a plan. Pick a menu over a date range on a daily or alternate-day schedule — then pause and resume anytime, or skip a single day without cancelling.
- One-time orders alongside subscriptions.
- Saved addresses with map coordinates and a default, so checkout is one tap.
- Push notifications that keep customers updated as their order moves.
The subscription engine
This is the heart of it. A scheduled job runs automatically and turns active subscriptions into the day's real delivery orders — respecting each customer's schedule, pauses, and skips. It's built to be safe under load: idempotency keys and row-level locking mean it never double-creates or double-charges, even if it runs twice. The daily "who gets what" that used to be manual just happens.
The vendor admin
Running the business happens in a web admin we built with Vue and Inertia:
- Menus, dishes and categories — the catalog the app reads from.
- Delivery slots the team defines and attaches to orders.
- Order operations — accept or reject orders and move them through to out for delivery, with payments recorded (Cash, COD or UPI).
- Multi-vendor by design. The platform is team-based, so more than one food brand can run on it, each with its own menus, slots and orders, and staff roles (Owner, Admin, Member).
Built to run a real business
Because this handles real customers, money and daily deliveries, it's engineered for correctness: a status for every state (orders, subscriptions, deliveries, payments), idempotency to prevent duplicates, per-resource access policies, and a broad automated test suite covering auth, orders and subscription generation. It also ships the store-compliance pieces a published app needs, including in-app account deletion.
Kept in both stores
Shipping was the start, not the end. Google and Apple move their requirements every year — target API levels, Xcode and SDK floors, privacy manifests, page-size rules — and an app that misses one cannot ship an update. Because this is our own product, the same release discipline we sell as the Mobile module runs on it: the Flutter and dependency bump each quarter, the rebuild against the current toolchain, and the resubmission to both stores under the product's own accounts. The result runs live on iOS and Android today.
Want an app like this?
We build Flutter apps on Laravel APIs and keep them in both stores. See how a Flutter build runs, at a fixed price with the care plan attached — or, if you already have an app that has fallen behind the store calendar, start with the mobile app review.
