Menu
E-commerce

Grocery basket price comparison and ordering app for native iOS and Android

Native iOS and Android apps that compare an entire shopping basket — not just individual items — across nearby grocery stores, flag products a store does not stock, and let the customer order from the cheapest option.

Client — a grocery price-comparison startup
Concept visuals — not actual screenshots
01 — Challenge

Comparing grocery prices item by item is nearly useless — no single store is cheapest across everything, so a shopper is left with information they can't act on. The only comparison worth building is at the basket level: for the specific things someone is actually buying this week, where should they shop? That's a harder problem, because stores don't carry identical ranges. If a store's missing items are silently dropped from its total, that store comes out looking cheapest purely because it stocks less — the comparison becomes actively dishonest, and shoppers find out at the till.

On top of that, pricing a full basket across several stores is much heavier than pricing one item, and it has to happen while the shopper is waiting on the screen. And with two fully native codebases, any pricing logic duplicated on both platforms was guaranteed to drift apart eventually.

02 — Approach

Built the comparison around the assembled basket as the unit rather than the individual product, computed entirely server-side so both native clients always render the same result regardless of platform. Products a store doesn't stock are surfaced through an explicit missing-item flow instead of being dropped from that store's total, so a comparison is either genuinely like-for-like or clearly labelled as not — protecting the one thing the product actually sells, which is trust in the number.

On iOS, each screen has its own dedicated service class handling its API calls, with separate handler classes owning data-source behaviour for list-driven screens, rather than routing everything through one monolithic network manager. On Android, a single generic HTTP layer covers every verb and body encoding so no screen writes its own transport code. Store discovery runs off live location and mapping, and both apps shipped with light and dark themes from day one rather than as an afterthought.

03 — Impact

Shoppers get an answer they can act on — a specific best-value store for their specific basket — rather than a table of per-item prices to interpret themselves. Because unstocked items are called out rather than hidden, the comparison holds up at checkout instead of falling apart the moment a shopper notices something's missing. And because both platforms render a single server-computed result, iOS and Android never disagree about which store is cheapest.

Stack
KotlinSwiftRetrofitGlideGoogle Maps SDK
More work
VEDUMI — storefront, commissions and admin platform for a resin art studio→Four-sided e-commerce marketplace: admin, agent, seller and buyer→Peer-to-peer marketplace with offer negotiation and object-scoped chat→

Something holding you back?

New build, rebuild, or adding AI to what you already have — I'll take a look and give you an honest perspective.

Get in touch ↗