Building GatherUply.com

Every Monday evening a group of us gets together for indoor floorball. For years, organizing that meant a link to an old Swedish sign-up site — the kind that hasn’t touched its layout since the early 2000s, every page wallpapered in inline ads, and even the reminder emails it sent out were full of them. I’d been threatening to replace it for a long time. Earlier this year I finally did, and it’s called GatherUply.com.
I wrote about the setup I used to build it in my last post — the agents-and-skills structure for GitHub Copilot, the Planner/Implement/Review modes, the quality gates. That post was about the tooling itself. This one is about what came out the other end of it.
What GatherUply.com actually does
It’s deliberately narrow — a recurring-event scheduler for small groups, not a general-purpose calendar app. You create a weekly event (day, time, location, minimum number of players needed), invite people by email, and everyone marks yes, no, or maybe for the next occurrence. The dashboard shows who’s in, whether you’ve hit the minimum, and sends a reminder before game time. No ads, no clutter, nothing to click through.
Under the hood it’s React 19 and MUI on the frontend, Node/Express and Firestore on the backend, deployed to Cloud Run — the same stack from the previous post.
Building it with the same agent setup
This is the part I found genuinely useful rather than just interesting in theory. GatherUply.com has real users now — my indoor floorball friends, with real email addresses and real attendance data in Firestore — which is exactly the situation the agent setup was built for. Every schema change (adding createdAt to occurrences, fixing how average response time gets calculated) went through the Database agent’s migration checklist instead of me just hoping nothing broke for existing events. The Security and A11y agents caught things I wouldn’t have thought to check for a side project — the kind of “quietly bypasses an auth check” failure mode I wrote about last time turned out not to be hypothetical.
None of that is glamorous. It’s mostly small, unremarkable fixes — a notification when an organizer pauses an event, preserving line breaks in a participant’s comment, cleaning up a duplicate canonical tag that was confusing search engines. But that’s kind of the point: the setup is what makes shipping a stream of small, correct changes to a real product sustainable without me reviewing every line myself.
Where it’s at now
We’ve fully switched. There’s no soft rollout with a tool like this — everyone in the group has to use the same one, or the whole point falls apart. As the group’s admin, that’s my call to make, and I made it: GatherUply.com, for everyone. It’s held up fine through a few months of weekly use.
What’s next is less obvious. A native app feels like the obvious move, but I’m not sure it’s worth it for a group this size when the web app already works fine on everyone’s phone. The more interesting idea is an agent that just sits on the sideline in our WhatsApp group — watching people reply, and commenting when it’s actually worth commenting, like when we’ve hit the minimum number of players for the week. It could also field the inevitable “are we on today?” and nudge whoever hasn’t answered yet. I don’t know yet which of those is worth building next, or if either is.