Just Fresh
A family of apps on one codebase — 80% of it shared — for produce that changes price every morning.
The tension
Shoppers, delivery riders and warehouse staff each needed their own app — on Android, iOS and the web — but there was one team to build and run them all.
- Role
- Engineering Lead · Jul 2022 — Oct 2024
- What I owned
- Led engineering for the Just Fresh family — customer, delivery & logistics and warehouse admin apps — built in Flutter for Android, iOS and Web on the foundation we’d established at Bijak.
- Platforms
- Android · iOS · Web
- downloads (within Bijak’s 600K+)
- 50K+
- code shared across the apps
- 80%
- platforms: Android, iOS, Web
- 3

Context
Just Fresh delivers farm-fresh fruits and vegetables to the doorstep. Built inside Bijak, it reuses the company’s agri supply chain to sell directly to consumers.
That meant a family of distinct products: a customer app for ordering, a delivery & logistics app to get orders to the door, and a warehouse admin app to run operations behind it all.
Engineering nuance
1. Many apps, one foundation — 80% shared
Constraint. Different audiences with very different workflows — shoppers, riders and warehouse staff — but one team, and no appetite for maintaining three of everything.
Decision. Build every app on the same Flutter foundation (GetX + MVVM): shared design system, networking, data models and business logic, with each app owning only what’s unique to its users. About 80% of the code is common across the apps.
Trade-off. Shared code needs discipline — a change for shoppers must not break riders or the warehouse — but features, fixes and improvements land everywhere at once.
2. Flutter Web instead of a separate website
Constraint. Customers wanted to order from a browser too.
Decision. Ship the customer experience with Flutter Web rather than a second, separately built web app.
Trade-off. A heavier first load and less SEO-friendliness than a traditional site — accepted in exchange for one codebase and identical behaviour everywhere.
3. A catalogue that changes every day
Constraint. Produce is perishable: prices, offers and availability shift daily.
Decision. Keep catalogue, deals and categories driven by operations data, with location-aware ordering for serviceable areas.
Trade-off. More dependence on fresh data from the backend — but customers never see yesterday’s prices.
Outcome
- 50K+ downloads across platforms — part of the 600K+ across Bijak’s apps.
- Three production apps — customer, delivery & logistics and warehouse admin — run by one team on 80% shared code.
