Skip to content
Software is eating the world and I have snacks for it

I keep turning my Google Sheets into phone-friendly webapps, and I can’t stop

How I tackled takeout, spices, and meal ideas with spreadsheets and Glide.

Kevin Purdy | 111
A spreadsheet folded into a paper airplane
Credit: Aurich Lawson
Credit: Aurich Lawson
Story text

It started, like so many overwrought home optimization projects, during the pandemic.

My wife and I, like many people stuck inside, were ordering takeout more frequently. We wanted to support local restaurants, reduce the dish load, and live a little. It became clear early on that app-based delivery services like DoorDash and Uber Eats were not the best way to support local businesses. If a restaurant had its own ordering site or a preferred service, we wanted to use that—or even, heaven forfend, call the place.

The secondary issue was that we kept ordering from the same places, and we wanted to mix it up. Sometimes we'd want to pick something up nearby. Sometimes we wanted to avoid an entire category ("Too many carbs this week, no pasta") or try the newest places we knew about, or maybe a forgotten classic. Or just give me three places randomly, creative constraints, please—it's Friday.

At its core, this is a shared list, i.e. spreadsheet. But my spreadsheet maintenance enthusiasm greatly outweighs that of my spouse. More than that, have you ever pulled up a Google Sheet or online Excel file on your normal-sized phone to make changes? I do so only in moments of true desperation.

For things that are bigger than a note or dry-erase board but smaller than paying for some single-use, subscription-based app, I build little private webapps with Glide. You might use something else, but Glide is a really nice entry into the spreadsheet-to-app milieu. The apps it creates are the kind that can easily be shared and installed (i.e., "Add to Home Screen") on phones, tablets, or desktops, from a browser. Here's how it worked for me.

Why you might want to make a little personal webapp

Glide is technically a no-code tool aimed at businesses, but you get one user-based published app for free, and you can have more "private" apps if you're truly keeping it to your household or friend group. Each full-fledged app can have 10 users and up to 25,000 rows, which should probably be enough for most uses.

I do wish there was a "prosumer" kind of account that billed for less than $828 per year. If you want more than one (relatively) small-scale apps, there are alternatives, like Google's AppSheet (included in most paid Google Workspace accounts). But most are just as business-oriented, and none have struck me as elegant a tool as Glide.

As mentioned, my primary use for a sheet-based app is to make searching, filtering, reading, and editing that sheet far easier. In the case of my takeout app, that meant being able to search anything—a specific restaurant, "tacos," a quadrant of the District of Columbia. And a sorting option for when I added a restaurant, so I can find the place I added while a friend was recommending it.

Let’s whip up a webapp

Google Sheet showing the columns Restaurant, Category, Address, Order Link, Phone, Quadrant, Notes/Hours, and Added
The spreadsheet behind my "DC Takeout" app.
The spreadsheet behind my "DC Takeout" app. Credit: Kevin Purdy

Throwing that sheet fresh into Glide, it's not off to a bad start. The main view of Glide is a usable version of your app, and I can see that I can already type whatever I want into the search bar, and it will search across fields.

First version of takeout app, with a "Public" title at the top and restaurants listed below a search bar, like "Albi: Greek/Mediterranean"

I could honestly stop here if I wasn't picky about some of the quirks I'm seeing. The app is showing screens, "Public" and "Users," and I want to hide them. In the upper-left corner, in Navigation, I'll click an eye icon to hide the "Users" section. With "Public" selected, I'll change the Label in the upper-right to "DC Takeout," and, if I was going to have more than one screen, give it an icon.

The app already provided a "+" button for adding restaurants, just a simple vertical stack of entry boxes, along with a date picker for Date Added. If you prefer something static, toggle off the options in the "Actions" field in the bottom-right.

Searching is pretty robust, but what if you want to browse a broad category or just see stuff that's nearby? In the "Options" section to the right, you can add in In-App Filter, which creates a familiar arrow-shaped three-bar button to the right of the search bar. I've added Quadrant and Category filters. If I want to go further here, it's on me and my spreadsheet. Open on Mondays? Offers pick-up? Has a bar? The possibilities are endless, even if my weekend spreadsheet time is not.

Phone app showing a filter for quadrant and restaurant catgegory.
Simple filter for my takeout app. I need to get the category to be comma-separate values, not a single pile of descriptors.
Simple filter for my takeout app. I need to get the category to be comma-separate values, not a single pile of descriptors. Credit: Kevin Purdy

What happens when you click on a restaurant? Right now, you see, essentially, a vertical readout of everything in that spreadsheet row. What could you see? Well, you've got an address there, so how about a map?

Click on a restaurant in the fake phone, and on the left you can see "Components," one of which is our map. Set the address to equal the address column in your sheet, and, in "Options," set Visibility so that it only shows up when the address field is not empty. In "Actions," you can set it so that clicking the map opens the phone's default mapping app, set to the proper address. (If you're struggling to get the right place to show up, you might want to check out a sample address in Mapbox's API; it can be a little finicky about how it parses them.)

Map showing on a phone layout, with La Casina, a Romano pizza place, selected with details showing.
Take me to the slightly different pizza!
Take me to the slightly different pizza! Credit: Kevin Purdy

Glide offers dozens more ways to customize every little thing about your app.

That's about all I need from a "mix up your takeout and use the right apps" app, one made mostly for me, my spouse, and nearby friends and visitors. Pretty much anything you'd find useful while sitting down at a spreadsheet, you can also make useful through a little phone webapp.

Joyful overkill

I went a good deal further with my "DIYRoot" app. After using a couple meal delivery services, I sussed out the kinds of recipe formulas they were mixing up each week, plus the items or equivalents I had found at nearby stores. Knowing that I could figure out the basic cooking, I made an app that listed as many recipes as I could find, broke them into components, let me add them to an erasable menu plan and shopping list, and even had some pictures.

Image of a phone app, showing "Roasted Chimichurri Salmon + Crispy Potatoes"
The best version of an entry has an image, ingredients, and recipe. There's a button to add it to the menu and all the items to a list.
The best version of an entry has an image, ingredients, and recipe. There's a button to add it to the menu and all the items to a list. Credit: Kevin Purdy

I didn't quite master this app (the shopping list is plagued by blank items/rows), and it's now technically an outdated "Classic" Glide app; maybe I'll give it another shot. More successful is my most recent effort, "Pantry Items," which is just a searchable list of spices and sauces, a note about how much I have left of each, and, through a webhook, add anything I see missing to a shopping list on Bring.

I can feel some people reading this article demanding that I just learn Swift or some mobile-friendly JavaScript package and make some real apps, but I steadfastly refuse. I enjoy the messy middle of programming, where I have just enough app, API, and logic knowledge to make something small for my friends and family that's always accessible on this little computer I carry everywhere, but I have no ambitions to make it "real." Anyone can add to it through the relatively simple spreadsheet. Heck, I'll even take feature requests if I'm feeling gracious.

I use Glide, but you might have something else even simpler (and should recommend it as such in the comments). Just be warned that once you start thinking (or overthinking) along these lines, it can be hard to stop, even without the worldwide pandemic.

Photo of Kevin Purdy
Kevin Purdy Senior Technology Reporter
Kevin is a senior technology reporter at Ars Technica, covering open-source software, PC gaming, home automation, repairability, e-bikes, and tech history. He has previously worked at Lifehacker, Wirecutter, iFixit, and Carbon Switch.
111 Comments
Staff Picks
c
My go-to tool for projects like this has become TiddlyWiki, which, on its surface, is a quirky little wiki with a fun party trick where the code and data of the wiki can be entirely self-contained in a single HTML file. Browser extensions can allow the page to write changes back to the file locally, or you can make edits in-browser and save a new file, or, easiest of all if you know what all the words mean, you can run a very lightweight Node server that saves changes server-side and requires no extensions at all. (It's the only Node package I've ever seen with zero dependencies.) If you bundle it up into a single file, that's the entire, fully-functional wiki, so even if you're editing with the server, you can send the HTML file to someone else and all the same viewing and editing tools are there, even offline. Images can even be included (they get base64 encoded and put in the file). Neat.

But! This is just the surface level. The thing is, TiddlyWiki is almost entirely written in TiddlyWiki. There's a very small core of JavaScript to bootstrap the thing, but after that, basically everything is implemented in wiki objects called "tiddlers" (they apparently didn't feel that any other word fully conveyed what these things are, haha. But they're basically objects of key-value pairs). There's a whole little universe of tools built with them in there: widgets are custom HTML-like tags that take input and produce output, there's a query language called "filters" that's simple on the surface but has SQL-like abilities if you get fancy, and "transclusion" where a tiddler is piped through another tiddler which allows templating. Everything on the page of a TiddlyWiki is a tiddler if you go digging. The "articles" themselves, buttons, checkboxes, radio buttons, drop-down menus, the search box, the wiki editing tools, all of it. And any tiddler can be edited or replaced.

Are you getting it? They haven't built a quirky little wiki. They've built a lightweight and user-friendly web development framework with front end tools, an object database, and a query language for interacting with it, and they used it to make a quirky little wiki.

Everything is available for customization. You can tear out the wiki editing interface and write your own. You can restructure how everything behaves. You can burn the whole thing to the ground and write your own, or augment what's there with your own stuff. There's basically nothing that "the system" can do that you can't. I've written a todo app in it, I've made databases like the one described in the article to track a game they play on a podcast I like, and I've written a Super Bowl prop bet game for friends to play, complete with a question form and dashboard for tracking the results, with live updates during the game thanks to the server version's ability to seamlessly sync in the background.

I used to reach for spreadsheets for things like this, but now I reach for TiddlyWikis. It's weird, it has its own little universe of terminology and takes some time to wrap one's head around, but for little projects like this, it's in an incredibly satisfying sweet spot for me. Quick to bang something together but powerful enough for anything I've wanted to do with it, and it's all HTML in the end so with a bit of spit and CSS you can make it look nice as well. It's well worth your time if you regularly find yourself wanting the simplicity of a spreadsheet but the customizability of a web app.
Aurich
I was annoyed that Glide didn't have a cool paper plane icon for some reason, so I decided to fix that for the listing image. I think this might actually be the first time I uploaded a story image straight from my iPhone.

I printed the list, folded a paper airplane out of it, shot the photo on my phone on a cutting mat, did some quick color correction in the app, and then dropped it in the CMS.

Was kind of fun to keep it so simple, feels appropriate for the spirit of the story itself.
waldo22
@Kevinpurdy Time to Eat is a local restaurant delivery service in DC. Ordering directly from the restaurant is always best, but when they don't deliver or don't have a good app, using a local service is preferable.

Source: I'm the former President of the RMDA, the industry association for locally-owned restaurant delivery services. I've been doing this since the late '90s, and we're trying not to go out of business from DoorDash and UberEats with all their Saudi SoftBank money. I am not affiliated with Time to Eat and have no financial stake in their success, just trying to help a local guy/gal out.
  翻译: