When we bought our house in the woods, it came with outbuildings. There’s the Rat Shack, which looked like maybe someone was going to build a granny unit and then gave up and just parked a camping trailer there instead. And then there’s the Toxic Waste Shed, which looks like a shipping container made of plywood and is full of shelves stocked with rusty electronics (!) and half empty cans of paint, tar, and solvents. But our favorite is the Pantry, an 8×8 room with a concrete floor, stud and drywall walls, and electrical wiring but the wires terminate about a foot outside the building. Maybe it was built to house the water pressure pump, which ultimately got located elsewhere, or maybe it was gonna be a weed drying room, or…we dunno. We thought of making it a chapel, but instead we insulated the heck out of it and installed baker’s racks and use it to store bulk and canned goods.
Thing is, the Pantry is a minute’s walk from the house. When we run out of canned tomatoes in the kitchen pantry, sure, we go up and get some from the Pantry, but how many cans are there? Do we even have any tomatoes left up there? We need an inventory! Remember the Milk to the rescue! That’s great: everyone in the house has RTM, we can all look and see just what’s there, and whoever goes and fetches stuff down or puts stuff up there can update the list. Except, it’s kind of a pain because to change the item from, “flour, white, bulk, lb. – 15” to account for taking two pounds of flour to refill the flour jar in the kitchen, one has to edit the item and delete the 5 and change it to 3. On a smart phone’s on-screen keyboard. (Yes, I am still (2019) bitter about losing the physical keyboard and I miss my Motorola Q.)
What we really want is a pantry inventory app that lets us just tap a plus or minus button to change the quantity of a thing. And, it turns out, as of this writing there are precisely 1.2 zillion pantry inventory apps in the App Store. They all want to scan the bar code on the product (home canned pickles, beans, jam, tomatoes, salsa, onion relish, chicken stock, vegetable stock, soup?… yeah, no) and then very helpfully add zero inventory items to the companion grocery shopping list (but wait, that’s actually what we use RTM for, and it’s awesome, we don’t need or want to replace the shopping list!). Sigh.
Fine, this is precisely the situation of discontent for which we are perpetually prepared. We have a problem, it’s a common problem, but all of the commonly available solutions don’t so much solve the problem but change it so that we have a different problem and less money. And thus, we build our own solution. So, I’m writing a pantry inventory app. I started with SQLite for a local pantry just to get the whole UI working. Then when that logic was all good I reimplemented the database with Firestore, and now that’s working. So, I’ve got a single-user, multiple pantry capable app (pantry, deep freeze, kitchen pantry as a use case, because you can have lots of different inventories you want to keep track of).
Next, I’ve gotta figure out how to do invitations/sharing. I need to be able to give access to the pantries to everyone in the house. But also, I’d rather not share the contents of our pantries with everyone on the Internet. Not that it’s a secret, mind, but what business is it of theirs? I’m trying to figure out the right way to do it. My current plan is to generate some random string as an invitation code, associate that code with a pantry, and allow sharing that code via QR code. When someone tries to redeem the code, the app adds the pantry to their account and then deletes the code so it can’t be used again.
Or maybe, the code needs to be associated with the account identifier of the user to whom the invitation is being sent, so that it can be deterministically generated from the pantry ID and the invitee? Still thinking about this.
Oh yeah, and I need an app icon, because as graphic designers go, I’m an awesome programmer. Oh, the hubris of development frameworks that purport to make it easy to make beautiful apps by virtue of using the framework, as if usability and aesthetics were a compiler switch.