MidDigs ← Back to Home
developer_notes.html
Built Fast · Cut Hard · Tried To Make It Fun

why i made this

My name is Tommy. I’m a developer, I like building things, and every once in a while I make YouTube videos over at @tommy_and_cat. I haven’t posted in a minute because work has been busy, but this project gave me an excuse to mix a lot of things I care about: volleyball, technology, and making positive memorable people-to-people experiences. That is really the heart of this whole thing.

Built In
2 days
Friday night into Saturday grind mode.
Original Scope
90+ bets
Which turned out to be way too much.
Final Direction
Finals only
Cleaner, funnier, faster, actually playable.

volleyball

The actual excuse for all of this. Watching finals is already fun. I just wanted to juice the experience up.

technology

I like trying stacks, testing tradeoffs, and seeing how far I can push both the fancy version and the cheap one.

good people energy

Positive, memorable, people-to-people interaction matters to me more than any single feature on the page.

saving money

If the simple version gets the job done and is easier to hand off, that is not less cool. That is just good product sense.

hi it me
01 · Intro

hi. i’m tommy and i like building stuff.

This project started because I thought it would be funny to mix the feel of sports betting with volleyball. Not in a serious finance-bro way. More like: can I turn watching finals into a chaos-friendly, number-go-up, everybody-yells-at-the-same-rally kind of game?

Also, me and Michelle love working on anything related to UI, UX, and experiences. so pretty quickly this stopped being “just make a finals game” and turned into one of those projects where we kept asking, wait... what actually makes people care?

This app is basically the result of me asking, “how do I make watching volleyball finals way more fun without making it feel gross?”
the dumb idea
02 · The First Idea

i originally copied the full sports-betting playbook.

The very first version leaned hard into the PrizePicks / sports-betting vibe. I built it like a proper betting product: lots of matches, lots of picks, coins, free bets, prediction bonuses, and all the “real app” machinery.

I even added an auto-bet option because the thing got so big that manually placing bets became annoying inside my own app. Which is usually a sign that maybe, just maybe, the product is cooking a little too hard.

90+ games coins free bet system auto bet finals predictor
90+ bets is insane
03 · Reality Check

i finished it and immediately realized it was too much.

I had a fully fleshed out product end to end, and honestly? It was impressive from a shipping standpoint, but not nearly as fun as I thought it would be.

1It was way too much information. Nobody has time to read 90+ bets.
2The rules got weird fast. Things like bonus scoring for winners felt forced instead of fun.
3The round robin side was annoying for both players and scorekeepers. Too much to track, not enough payoff.
4I built a lot of system, but not enough joy.

Good news

I proved I could build the huge version end to end.

Bad news

The huge version kind of sucked to actually use.

stuff i cut because boo
04 · The Cut List

i stripped out the toxic stuff on purpose.

This part matters to me. I didn’t just simplify the app for usability. I also removed things that felt unnecessarily toxic.

BOO · win / lose framing BOO · betting on negative things BOO · rooting for failure BOO · punishing casual users

I did not want people cheering for mistakes, rooting against players, or feeling like the whole experience was about somebody losing. So I changed the framing.

Old energy

Who wins? Who loses? Who got punished? Who ran out of coins?

New energy

Who was right? Who hit something crazy? Who built the funniest ticket?

Everything is free Finalists are optional No loser language Keep the hype, lose the gross parts
finals was the answer
05 · The Pivot

i slept on it and woke up thinking about the finals page.

That was the whole pivot. I basically scrapped the giant version in a PR and said: let’s hone down on the finals only.

Once I did that, the whole thing snapped into place. There is always a finals match. There is always something to root for. There is always a clean ending. The scoring becomes manageable. The game becomes understandable.

2 slips per division both free optional finalists unlimited feeling combos
Instead of “did you lose,” the vibe became “how right were you?”
how i made it actually fun
06 · Make It Fun

big number fun. weird multiplier fun. watching-the-game fun.

I stole the UI language from gambling apps because, straight up, those apps know how to make numbers feel exciting. But then I had to make it understandable for people who don’t gamble.

How I made it understandable

The tutorial, the little (i) buttons, live payout math, cleaner steps, and a much more guided flow.

How I made it fun

Big payout numbers, stacking boosts, lightning boosts, crazy combo slips, and stats people normally would not care about.

Once I started compounding categories like kills, blocks, digs, and the weirder little volleyball moments, the tickets got funny in the best way. Now people are suddenly locked in on pancakes and tools and whatever unholy multiplier chain they created for themselves.

2 audiences 1 problem
07 · Two Audiences

this had to work for the audience and for the scorekeeper.

The original round robin approach was brutal for both sides. Watching 90+ games was too much. Scoring 90+ games was even worse. Also, not knowing exactly who is playing when makes the whole system feel mushy.

Finals-only fixed that. One game. Clear participants. Clean ending. Then I chose stat categories that are actually reasonable to tally on a sheet while still being fun to sweat from the sidelines.

Audience side: more fun things to watch for, less overload, better drama.
Scorekeeper side: easier tallying, cleaner categories, no giant match matrix.
Event side: round robin chaos stops mattering because the finals match is always real and always visible.
i built this stupid fast
08 · Build Speed

this thing came together in a pretty stupid amount of time.

The real weekend rhythm was more like Friday afternoon at volleyball writing ideas down, Friday 9pm-1am vibe coding after my brother's game, then Saturday 9am waking up with the new gameplan, and Saturday 6pm-7:30pm getting everything organized for deployment and retrospectives.

Friday afternoon
At volleyball writing ideas down and trying to figure out what would actually make this fun.
Friday 9pm-1am
After watching my brother's game, just vibe coding and pushing through the first giant version.
Saturday 9am
Wake up with the new gameplan: finals only, cut the noise, keep the fun, and sharpen the product.
Saturday 6pm-7:30pm
Organize everything I had done, get it ready for production deployment, do retrospectives, and send what I learned to friends.

If somebody wanted to replicate this kind of sprint, these are the kinds of questions that actually moved the product forward. Not perfect prompts. Just the ones that changed the direction.

Friday · start

start with the feeling, not the feature list

This was the kind of question that created the first version, even if that version ended up being too big.

How do I make watching volleyball feel like a funny chaotic sports-betting app without making it feel gross?
Friday · too much

cut scope the second the joy drops

This is the question that matters once the build technically works but the experience does not.

I made 90+ bets and this is way too much. What is the smallest version that keeps the fun and deletes the homework?
Saturday · morning

make normal people understand it fast

This is where the tutorial, the little info buttons, and the guided flow really came from.

Make this understandable for people who do not gamble. What needs to change in the UI so they know what is going on immediately?
Saturday · handoff

optimize for shipping, not just coding

This is the one that pushed the project from “cool app” into “something I can actually hand off and demo.”

What is the cheapest cleanest way to ship this for real if the backend is basically just a Google Form and a Google Sheet?
me and michelle love this stuff
09 · The Real Case Study

this became a case study for me and michelle.

Me and Michelle really love building anything related to UI, UX, and experiences. So this project ended up being bigger than “just make a finals app.”

It turned into a little lab for rapid development, design instinct, and human behavior:

What overwhelms people?
What makes them feel smart fast?
What makes them care about weird stats they would normally ignore?
How much does visual feedback and number presentation change motivation?
How fast can you move if you stay close to the product instead of overplanning it?
before ai i was already on this timing
10 · Old Brainworm

way before ai, i already wanted to make weird audience games.

A long time ago I had this idea for a thing called Rock Paper Scissors Split or Steal. the whole point was to make a social game that people could all play through Twitch chat, and then every x minutes the game would resolve and tell you if you won based on how the different game mechanics mixed together.

I never fully turned it into the thing I saw in my head, but that idea has lived in my brain forever. So this volleyball app is not some random one-off. it’s part of a much longer pattern for me of trying to build weird interactive systems around live people, suspense, and “yo wait what happens next?”

i’ve been trying to make “watching people do stuff together but make it feel like a game show” for a long time now.
open sauce lessons
11 · Engagement Notes

open sauce taught us a lot about what actually gets people engaged.

We went to Open Sauce and learned a bunch of lessons from seeing people react to things in real time. Stuff like rizz me up plankton, roasting fish, and just generally absurd internet-brain energy made one thing really obvious: people are not that engaged when it is just about them.

People light up more when the experience is playful, weird, shared, and a little chaotic in a fun way. not because someone is getting singled out, but because everybody is in on the bit together.

Make it fun. If it feels like homework, people check out.
Make them laugh with us. Never at someone.
Give it a bit. A strange premise is sometimes stronger than a perfect feature list.
Shared energy matters. People want to feel like they are part of the same moment.
one of the biggest product lessons here was: don’t just make something functional. make it feel like people are all in on the joke together.
technology and saving money
12 · Small Tech Deep Dive

i care about building cool stuff, but i also care about optimizing and not spending money for no reason.

On paper, yeah, I could host this on Vercel, spin up more backend stuff, add more moving parts, and make it feel like a full platform. That is a valid way to do it. I like technology. I like going deep. I like building the more optimized version too.

Eddie mentioned that he was hosting the other site in HTML, and that made something click for me. I kind of stopped and thought: hold on, this app is already so basic from an architecture standpoint. It is basically a Google Form write layer and a Google Sheet read layer. I can host this in HTML too. Watch this.

So that is kind of what happened here. We did both. One version let me play with the more app-like stack. The other version let me prove that you can get a lot done with plain HTML, Google Forms, and Google Sheets if you stay focused on the actual experience.

Save money. Not everything needs a whole hosted stack if the event is small and time-boxed.
Optimize what matters. The product should feel good before the infrastructure gets fancy.
Test both paths. Sometimes the “real app” and the “barely any app” version teach you different things.
Make handoff easy. If somebody non-technical can hook it up and run it, that is a huge win.
i like optimizing. sometimes that means building more. sometimes it means realizing the cheap simple version is already the right answer.
where stuff actually lives
13 · Host Map

this is the part where i show where the stuff actually goes so it does not feel like fake architecture talk.

One thing I like when I read project pages is when somebody just shows me the map. Like, cool, where is the app hosted? where does data get written? what reads it back? so here is the plain version.

static handoff

cheap + easy

Host the files anywhere. The pages do the work. Google handles the write layer and the sheet.

HostGitHub Pages, Netlify, S3, local folder, whatever.
HTML pages`bracket-picker.html`, `tutorial.html`, `results.html`, `score-input.html`, `developer-notes.html`
Google layerGoogle Form writes submissions. Google Sheet stores rows. Published CSV powers read-back.

comparison app

more stack

Host the full app on a real Node platform. The app talks to routes, and routes talk to the database.

HostVercel, Railway, VPS, or another Node-friendly deploy target.
Next appRoutes, client UI, admin pages, and the side-by-side comparison version.
API + DBApp Router APIs, Prisma, SQLite, and the rest of the grown-up machinery.
what i would hand off
static html

Less friction, cheaper, easier for non-technical people to run.

what i would keep
next app

Great for comparing tradeoffs and seeing what the richer platform version unlocks.

the actual lesson
test both

Sometimes the optimized answer is more stack. Sometimes it is way less stack.

coding with agents is wild
14 · Coding Notes

i built this with agents and learned a ton in the process.

I had never really coded this way with Claude before. This project was where I started playing with plans, skills, and spawning multiple agents to go solve separate pieces. That part was actually super interesting.

The big lesson for me was that making a good plan matters way more once you have agents running around. It’s not just about writing prompts. It’s about shaping the work so the tools can move in parallel without stepping on each other.

I used a ton of Claude, eventually hit limits, then swapped over to Codex and kept going. Honestly? Still figuring out what each tool is best at. But the larger conclusion is easy: I’m not going back to plain old base chat for coding if I can avoid it.

what this changed for me
15 · AI Findings

this project changed how i think about being a developer.

Before this, AI mostly felt like a cool tool. After this, it feels more like the shape of the job is actually changing. Not because the hard parts disappear, but because the leverage changes.

I think more of the work now becomes: deciding what should get built, breaking it down clearly, protecting the architecture, checking the mirrors, validating the result, and keeping the product fun and coherent while moving fast.

Planning matters more now. Once you have agents and AI tools, a good plan is worth way more than a clever one-liner prompt.
Validation is part of the job. Testing, syntax checks, and mirror reviews are not optional if you want AI speed to be real and not fake.
Canonical docs matter. If the truth is spread across random files, AI will help you drift faster. That is why I added architecture contracts and a real changelog.
Product judgment matters even more. Implementation gets cheaper. Taste, tradeoffs, and knowing what to cut do not.
i do not think software engineering is getting easier. i think the leverage is getting higher, which means clarity matters even more.

I wrote the longer version of these lessons into AI_FINDINGS.md in the repo because I think this stuff genuinely affects how I will work going forward, and honestly how other developers should think about the craft too.

if this was a real app
16 · Next Technical Steps

if this became a real real app, there are definitely corners i would go back and clean up.

I made some totally intentional tradeoffs so I could ship this as static HTML and get it demo-ready fast. I do not regret that. But if this grew up into a bigger real product, there are obvious things I would tighten.

Real authentication. Right now I cut corners because the static HTML handoff was the point. If you inspect element hard enough, you can find the secret on the page. That is fine for this demo. It is not fine for a serious app.
Move sensitive checks server-side. Admin validation, score entry protection, and anything actually secret should live behind a backend, not inside client code.
Add proper accounts and submissions history. If people played this more than once, I would want identities, auditability, and less last-write-wins behavior.
Harden abuse paths. Rate limits, better moderation controls, and safer data ownership all become more important once the project gets real traffic.
the static html version is the right answer for this handoff. it is just not the forever answer if this turned into an actual product.
what i wanna build next
17 · Next Up

i’ll probably build that twitch idea next and turn it into an ios game.

Rock Paper Scissors Split or Steal still lives in my head rent free. now that I’ve done this project and pushed on the rapid design / social-game side again, I kind of want to go back to that one and actually make it real.

So yeah. there’s a very real chance that the next weird thing out of me is that game, except this time I actually ship it and probably make it for iOS.

thanks for reading.

I really, really, really tried my hardest to make this app as fun as possible. I wanted to keep the exciting parts, strip out the toxic parts, and make something that people could understand fast and enjoy together.

If you have questions about some of the stuff we made, feel free to hit us up. this was a fun one and we’re always down to talk shop.