• To work cleanly on a 'Driod phone (very easy, but important).
  • Quickly add/build this weeks shopping list.
  • To manage dates on shopping lists, so humans do not need to.
  • To be able to swipe-off done items.
  • To be able to swipe-on previous weeks items (as entire list).
  • To be able to swipe-on previous weeks items (as single item).
  • To be able to push a list between client nodes (desktop or phone).
  • Prefer, to be able to host server in LAN only, and have app run in offline mode in the journey and shop.
  • Prefer system to be isolated from supermarket systems, as I am unaware of any supermarket system that lets you wander between merchants without friction.
  • Stretch: to access current floor plan from supermarket, so items can be ordered in “shop order” automatically.
  • Stretch: to be able to read barcodes from empty packets, via phone camera.
  • Not a goal: stock control for dwelling.
  • Not a goal: chat client or selfie interaction.


Since I left school, I rarely handwrite anything, as its not a profitable activity. This means I have an irregular scrawl that a medical doctorate would find awkward. I find paper lists frustrating, slow to access, and whilst in shop, its hard to maintain state. The third issue with dead-tree solutions is there is no easy tool to copy old lists, *and* extend/ alter them. A photocopier would do this, but I do not want to buy a photocopier just for shopping-lists.
I do shopping physically as if you bounce in and out early, it uses the least amount of time (yes faster than net based shopping as you do not need to wait for any deliveries). I split goods between several different supermarkets; as they cover different product ranges (this makes the delivery windows larger again). One supermarket is a vast metal-framed building and has very poor mobile reception (so querying an items presence or absence is hard).
Writing this code is optional/ doesn't led to employment, but is a useful maquette. The LAN only goal is purely to show buzzword compliance, in a niaf fashion. Unless you want to share a list whilst out shopping (which I don't do); there is no need for a server whilst out. No remotely accessible server mean no need to think about security, so the dev process costs alot less.

Sketch solutions:

  • [v1] written before code
  • Get a swipe library 1 2 3. I arbitarily chose hammerJS
  • Define simple list Object (remember TS), each item storing name, state, count; and the list having a name an create date
  • For dev performance, use a minimal vue2
  • Have dict of lists storage in localStorage
  • Index “page” that lists current lists, with date
  • View “page” that renders the list
  • Copy list “page” that displays two lists side by side
  • Manually make list “page”
  • simple REST server to receive pre-built lists, and publish them back
  • Server also manages JS bundles to drive frontend

Code: ..er nil, currently too busy

Some similar articles in research