A weekend project for one enthusiastic zoologist
What I built when Power Apps couldn't reach my user.
The setup
My nephew is three. He is, to put it gently, very into the small animals in his neighborhood. Ants, frogs, turtles, the occasional squirrel. He finds them, he names them, he tells me about them. Andy the Ant. Tremble the Frog. Shelly the Turtle. I love this for him.
Here's the thing: there are a lot of them. More every week. My nephew remembers all of them effortlessly. I, an adult with calendars and a job, could not. I'd ask him about Andy the Ant and he'd patiently explain that Andy was last week, we're on Cassidy the Caterpillar now, T, keep up.
So one weekend I decided I was going to fix this on my end. I was going to build him an app. He didn't ask. He's three. But I needed it, and he was going to love it, and that was good enough.
My first instinct, naturally, was Power Apps. But my sister doesn't have a Power Platform license, and asking her to manage one so her kid could log a frog felt like the wrong end of the lift. So Power Apps was out.
This is a thing I run into a lot, actually. Power Platform is amazing when your user has access. When they don't, you need a different door. This was an excuse to walk through that other door.
What I wanted
Calm requirements list, all from me, because the user was three:
- He can take a photo or pick one from his mom or dad's camera roll
- He can give the animal a name, jot a note, save it
- He sees everyone he's met, in a list, with photos
- It works on a phone (because that's his platform)
- It costs me approximately nothing
- His mom can use it, his cousins can use it, his nana can use it
- I can lock it down so only family sees it
That's the whole brief.
The part I want to be honest about
I'm a solution engineer. I work with low-code platforms, not full-stack web apps. I do not, on my own, know how to wire up a static site to an API to a database to a deployment pipeline. That is not the part of the building I have muscles for.
So to the GitHub Copilot CLI we went. Again.
I described what I needed in plain English. The CLI picked the stack, scaffolded the project, set up the infrastructure, wrote the API, configured deployments, and then sat patiently while I tested it on my phone, found bugs, and asked for changes. I knew what I wanted the app to do. The CLI knew how to make a computer do that. That was the whole arrangement.
This post is a recap of what the two of us shipped together. I'm not going to pretend I would have known to reach for Azure Static Web Apps on my own, because I wouldn't have.
What it ended up being built on
Azure Static Web Apps, free tier. HTML and CSS and a little JavaScript on the front. An Azure Functions API on the back. Cosmos DB for the data, free tier there too. Bicep to set up the infra. GitHub Actions to deploy automatically every time I push.
Every one of those pieces was picked by the CLI based on what I told it I needed. "Free, runs on a phone, only family can see it, photos, lock it down." The stack fell out of those requirements.
For auth, Microsoft accounts, GitHub, and a few others where the kids could land. I invite each person by email and only invited people can sign in. That part took us a minute to figure out and is honestly the only piece I'd call interesting under the hood.
The bumps I won't pretend didn't happen
Real-world bugs showed up the moment I opened the thing on a phone. None of them were the CLI's fault and none of them were mine. They were just normal first-time-running-on-an-actual-device bugs. I described them in plain English, the CLI fixed them.
- The first time I opened it on my phone, the new-friend button did nothing and friends I'd added were quietly evaporating into the void. Classic. Drifter would have been disappointed in both of us.
- Photo upload only let you take a new picture. The kid wanted to use the camera roll. Of course he did. Fixed.
- An iPhone-specific bug where the popup got cut off at the top. Fixed.
- Microsoft single sign-on kept pulling in my employee account on my phone instead of the family account I was trying to test with. This is just life.
- Domain validation got stuck for what felt like a full afternoon. I walked away. When I came back, it was fine. Sometimes that's the move.
The asks (or: I am also essentially a child)
Once it was running, the feature ideas kept coming. I have to be honest about where they came from. I came up with most of them while using the app, because I am, by all available evidence, also a small child. My older nephew and I co-designed the big ones together.
Most of these are mine, from opening the app, seeing something I wanted, and asking the CLI to add it:
- Search, sort A to Z, filter. Reasonable. Done.
- A count of all the friends at the top of the page. Now I can see at a glance: we are up to seven friends.
- Field titles next to the data on the detail page so it's clear what you're looking at. I was looking at my own UI thinking it could be clearer.
- Plenty of room for notes, because there are things to say about these animals.
- An "added by" field so people can mark who logged each friend. The kids call me T, so the easiest version of this was just a free-text field. Now I'm in the database as T. Honored.
And the big ones, from my older nephew and me, brainstorming together:
- A dashboard page with stats. Because of course.
- Birthdays for every animal. Some are real, since the family pets ended up in there too. The wild critters get invented birthdays, because nobody knows the actual birthday of a frog you met yesterday. I think that's beautiful.
- The Floofiness ranking, zero to five. Some animals are floofier than others. Shelly the Turtle is a zero. I made a custom SVG icon from a cutout of Floofers' face, my own cat, to use as the rating star. Floofers is now permanently rendering as the unit of measurement for fluff in a small child's database. This is the highest honor I have ever received as a builder.
What I'd do differently next time
Honestly? Not a lot. The boring parts (deploy, domain, auth) were the hardest. The fun parts (Floofers icons, dashboard tiles, all the little feature requests I filed against myself) were the easiest. If anything, I'd start with the boring parts and let the fun grow on top, rather than building the fun first and then panicking about how it was going to ship.
The other thing: I'd pull my older nephew in even sooner. The features we came up with together were better than the ones I came up with alone. Floofiness as a real, queryable, sortable attribute was his energy and my engineering, and it's the best feature in the app.
The takeaway
If you build for makers and admins and consultants all day, you can forget how much fun it is to build for someone who just wants to remember a frog. This took a weekend. It costs nothing to run. And it gave my nephew a place to put his friends. That's the whole point.
I didn't have to learn a full stack to ship a full stack. I knew the shape of the thing I wanted. The CLI knew the rest.
Together we built an app for one three-year-old, and seven of his closest animal friends. That's a Saturday well spent.
If your platform of choice can't reach your user, build a smaller door. Static Web Apps is right there. Free tiers exist. The CLI is right there. Your nephew is waiting.