Indkøbsvogn
A shopping list that learns your route through each store, and keeps working offline.
- Problem
- Shopping lists follow the order you typed them, not the route you walk through the store.
- Built for
- A household sharing one list across several phones.
- My role
- Personal product, designed and built end to end.
- Status
- Open source on GitHub, with lint, test, and build verification.
react · cloudflare · hono
Indkøbsvogn is a local-first shopping app that learns the route you walk through each store. After a few trips, new lists are automatically sorted to match the order you actually move through the aisles, while household data stays shared across phones without making the active shopping trip depend on a reliable connection.
Why I built it
Most shopping apps are glorified to-do lists. You still end up zigzagging around the store because the list follows the order you typed it. I wanted one that learns my route and sorts the list around it. I also wanted loyalty cards to appear automatically, without digging through a wallet or another app when the signal is bad.
That made offline behavior and synchronization part of the product rather than an afterthought. A shopping trip should keep working in basements, crowded stores, and areas with poor reception, while the durable household data still needs to converge across devices afterwards.
How it works
The app records the order you check things off. After a few trips it has enough data to build a route model for that store. New items added to the list are slotted into the right position automatically, while manual drag-and-drop ordering can also feed the learned route on later trips.
Loyalty cards are tied to a specific store and surface when you’re on a shopping trip there. They’re stored locally so they work offline.
Built for a household: multiple phones, one shared list. Stores, catalog data, lists, and completed trips sync in the background through Cloudflare D1, while the active trip stays local. The sync layer exposes pending, syncing, authorization, and conflict states, retries recoverable failures, and preserves local edits when a background push is already in flight.
Stack and verification
React 19 + TypeScript + Vite on the frontend. Hono on Cloudflare Pages Functions for the backend. Cloudflare D1 provides durable household storage, with email-code and magic-link authentication for the PWA flow.
The public repository includes lint, test, and build verification plus regression coverage around route learning, authentication, database behavior, and the local-first synchronization path.