← all devlogs

Oct 31, 2026 · 12 min read

Devlog #3: 2.4 million views, a broken database, and what it cost. Plus the shop is in. Happy Halloween!

The honest aftermath of the spike, a newsletter with 5 unsubscribers, a sound trick, a shop for code, a Halloween trailer, and still waiting for Steam.

by @truetibo on Threads & X · Day 25 · employee #1 of 1

Hi, it's me @truetibo. Your solo-indie dev working on deprecation. This one is a bit different though. It's halloween themed! Last time I was proud of 103k views on Threads. Then my brother surprisingly caught interest of my project and posted a link which exploded my expectations. I'll give you the full story without bullshit: the numbers, the money, the outage, the people. And at the end, actual game stuff, because I did keep working on the game.

Since it's Halloween: I created a little haunted demo of the changes, had a new pumpkin AI bot generated and drew a few halloween themed things:

↑ the Halloween trailer. It shows the new shop and how you build your weapon from code pieces. Sound on.

The tweet

My brother, Lucas (@giffmana), posted deprecation.org on X. Typing in his own job, AI Researcher and wrote that I'm a creative person, an artist turned frontend dev to pay the bills, now worried about AI. That's semi correct but I take it as compliments. Thank you!

The post. 2.4M views.
The post. 2.4M views.

Luckily that day I couldn't sleep. Because I noticed that something was happening. Then saw where the traffic was coming from. Then saw his tweet and got all exited. As numbers grew I saw that some service wouldn't hold the free tier and upgraded them, like vercel for instance, and put my credit card with auto-refill into google for the AI calls. The DB seemed to do fine so I thought it was safe and went to bed. The real wave hit hours later, in the US evening. Here is the Cloudflare chart for that day. Look at that line. That's probably "YOU" in there:

Visits per hour on Oct 23 (GMT+7). Peak around 7,500 an hour.
Visits per hour on Oct 23 (GMT+7). Peak around 7,500 an hour.

Roughly, across the three days it mattered:

  • ✎About 181k visits and 560k page views on Cloudflare, plus around 97k visitors on Vercel for the week. The two tools count differently, the thing is I used Vercels tracking in the beginning but turns out that's damn expensive so I turned it off and had the traffic routed through Cloudflare instead, that's when Cloudflare became the main source of truth for traffic stats (screenshot you see). So actually the total number is much higher.
  • ✎About 78% came from t.co, which is X. Almost all the rest was "direct", which I think is X's people also probably typing it in directly or some browser hiding. Google sent around 1,100. That's it. This was one single social event, no SEO, nothing. And completely unexpected
  • ✎175k of 181k visits were on a phone. 146k from the US, then Canada, Australia, Mexico, Argentina, India. 141 countries in total. Wow.
  • ✎The report page took most of it: 156k on the front page, 17k on /redundancy-check.
Where people came from. t.co is X.
Where people came from. t.co is X.

I made a Short about those first days right after it happened:

↑ "the site blew up". Sound on.

The site fell over while I slept

Here's the part that still stings. About 23:00 UTC, at the exact moment the US evening wave arrived, the biggest one, my database gave up. My free tier was hit at 1.6 million requests. And Supabase has no grace, they just shut down.. Every report check hit Vercel's 60 second limit and the site showed "The machine stumbled" (a joke I wrote, I just never expected it to be seen). Most of the visible data fell back to the seed data. No one could subscribe to the newsletter and a lot of people were disappointed with the experience.

It was down for roughly 10 hours. I was asleep. I upgraded to the paid plan the moment I woke up, which was too late: the biggest US chunk of visitors had already left. There is no joke here, I lost a lot of people.

What I changed so next time is fine:

  • ✎Now every DB call has a 5 second timeout, two quick retries on fast failures, and then a circuit breaker that stops asking for 30 seconds. A dead database now is seen quickly.
  • ✎If saving a report fails, you still see your report. It lives in your browser and I try to save it later. You lose nothing, I lose a row and some money on AI.
  • ✎A stat that scanned the whole table every 5 minutes (16 seconds each time!) now reads from a counter table. 0.25 seconds. Yah that was bad coding. I'm a little embarrassed.
  • ✎A Cloudflare Worker watches the traffic and emails me when a new spike starts. That's cool, now a bot can wake me up in the middle of the night. Seems like I'm already working for the machines.

What it cost

I promised honest numbers, so here they are:

WhatWhyCost
VercelPro plan $20, plus $11.42 on demand. Analytics and event tracking were about half of it.$31.42
SupabasePro plan for the database, a day too late.$29.75
ResendThe confirmation emails alone broke the free 100 mails a day.$20
Gemini APIEvery report and job page is written by a model.about €300
MerchFour sales. I came up with that idea way too late. That's amazing, I'll break even in 2041.+ about €12
Vercel's usage page. Web Analytics Events ($10.31) and Observability Events ($5.03) are the half I switched off.
Vercel's usage page. Web Analytics Events ($10.31) and Observability Events ($5.03) are the half I switched off.

Some notes on that. I moved analytics from Vercel to Cloudflare (free) and my own custom events into Supabase, which fixed the biggest line. I can really recommend everyone to avoid the Vercel tracking, it's crazy expensive. The Gemini bill is the one I can't shrink without losing quality in the jokes: I tried cheaper models and clever shortcuts, and all of them were worse and that's the whole product. I'm already on gemini-3.5-flash which is a very cheap one. So I pay. The only real fix would be hosting my own model, and that is a different rabbithole.

Gemini usage for the week. Look at that peak on Oct 22 (Google shows US Pacific time, so that's the same day as the Oct 23 chart above): around 120k requests and 200M input tokens in a day.
Gemini usage for the week. Look at that peak on Oct 22 (Google shows US Pacific time, so that's the same day as the Oct 23 chart above): around 120k requests and 200M input tokens in a day.

One good thing: for the people who did get through, the page stayed fast (about 424 ms to load). And Cloudflare stayed free the whole time, which is extremely impressive, so maybe I should be moving more to cloudflare.

What people typed

The part I actually loved. People didn't just look at the reports, they actually used the website and enjoyed it!! A few I saved:

"Fuck." Hard to argue with the report.
"Fuck." Hard to argue with the report.
"At least the cat gets to keep its job." Housecat, expires September 28, 2126.
"At least the cat gets to keep its job." Housecat, expires September 28, 2126.
"Looks like I'm safe." Drug trafficker. The legal department flagged it.
"Looks like I'm safe." Drug trafficker. The legal department flagged it.
A Llama Farmer: October 19, 2034. "Gentle pack animals are just fuzzy organic cargo, waiting for optimization."
A Llama Farmer: October 19, 2034. "Gentle pack animals are just fuzzy organic cargo, waiting for optimization."
"AI only has 6 months left before it is deprecated by AI. No wonder the arch rival is deprecator-5 and not d-1"
"AI only has 6 months left before it is deprecated by AI. No wonder the arch rival is deprecator-5 and not d-1"
Someone posted the actual artwork, the dev in chains. My brother: "looks like a totally healthy relationship to me".
Someone posted the actual artwork, the dev in chains. My brother: "looks like a totally healthy relationship to me".

The site has a comment section under every job, with real humans writing. Some of these made me laugh also:

A box office agent, I love the personal anecdote.
A box office agent, I love the personal anecdote.
A brewery waitress. I hear frustration :D
A brewery waitress. I hear frustration :D
Rohit's company is "ai backward" and full of boomers. Maybe that's a good thing in the end.
Rohit's company is "ai backward" and full of boomers. Maybe that's a good thing in the end.

The shop way too late

Merch was some idea I had to cover some costs. But I think it's a good joke actually. The first sale came the day after the spike. Four sales so far, and yes, two of them are the thank-you gifts I ordered for my brother, I hope he received them by now and likes them hehe. The other buyers got unique artwork to show off at work, makes me happy.

Two of the best sellers.
Two of the best sellers.
The meeting mug, this meeting could have been a prompt. We used to say 'email' but times changed.
The meeting mug, this meeting could have been a prompt. We used to say 'email' but times changed.

The shop is on deprecation.org/shop if you want one. If you do, thank you, my cut from redbubble is about 3–5$/item and you pay my Gemini bill by 0.01%.

My Redbubble payment history. After fees and cancellations, €12.45 in the account.
My Redbubble payment history. After fees and cancellations, €12.45 in the account.

How to email-newsletter. I think…

One benefit of the spike: +291 new sign ups for my games newsletter. Probably including you. But hey that scared me. Like. What should I send now? I don't want to annoy you. Email is so sensitive. How to even communicate? This is my first time having an audience. Exiting. Scary. So I did what I always do with new topics: check youtube. I watched Build Your Own Fan Club by adventuremtn (I'm on his email list btw. he's good, a little too many mails imo.) here is what I learned:

  • ✎On social, a post reaches about 1% of your followers. An email reaches around 16% of the list. The list is the only thing I own. So I guess this mail reached around 45 people. How cool? Never reached that many people with my ramblings hahaha
  • ✎People on it are not leads, they're friends. Yah wow okay this is kind of amazing. Never had so many friends. They _actually_ want to hear from me, more than I think.
  • ✎Welcome sequence: one email a day after signing up, slowly introducing yourself. Ok I've set up such an automation now. And hence also the previous (probably too long) mail.
  • ✎Give, give, give, ask. Every ask needs at least three gives.. Ask, actually I'm not planning to ask anything anytime soon, just share my learnings.
  • ✎One or two emails a week. If about 1% unsubscribe, that's normal.

So I wrote a welcome email to y'all. As a person writing to a person: who I am, why you're here and a small thank you gift (the two most liked designs in high res to download) and one question: what is your contingency plan if AI takes over? One friendly answer which made my day.

The first mass mail

Then I sent the first real email (I use a service called Resend to manage mailing because of their mcp and ease of integration) to everybody who signed up during the spike. Almost 300 people. Sending an email to hundreds of strangers feels very different from posting to a few people. If they hate it, they unsubscribe. So I was bracing myself.

Five people unsubscribed. That's it. Five. I wrote to hundreds of people who had clicked on a funny link a few days earlier, and the unsubscribe rate stayed under 2%, which is right in the range the video called normal. Puh. Relief. I guess the five were just busy being restructured. You actually signed up and stayed, that's amazing.

Thanks for staying. You're the friends in my fan club, and I'll write to you like it.

The sound trick

The last devlog I wrote about a very easy win to make any indie game sound better. So I turned it into a Short:

↑ "I learned one hidden trick that makes any indie game sound better." Sound on.

The whole trick, in two lines. Every sound plays a little higher or lower, at random (up to 8% either way). And if the same sound plays again quickly, it climbs up a note:

The shop is in

The trailer at the top shows it. The new shop!

The scripting editor I described last time, the every 1s blocks and the typed code, is gone. I built it, played with it, didn't like it. It's tricky, the game should feel like you're a programmer but it should still be balanced and most importantly fun. Easy. Even to non-devs. So I went back to pen and paper and sketched out some ideas.

I came up with a simple brotato-like shop, but you buy pieces of code. They snap automatically into the right places.

The shop on floor 3. Four cards, cash and the 401(k) on top, stats on the right.
The shop on floor 3. Four cards, cash and the 401(k) on top, stats on the right.

Cards: plain stat lines, a rarity colour, a price. v2 and v3 code parts cost more and show up later:

v2 uncommon and v3 rare cards.
v2 uncommon and v3 rare cards.

Cores and RAM can be shopped too, on the same shelf:

An extra core and 4 GB of RAM, as hardware cards.
An extra core and 4 GB of RAM, as hardware cards.

If you drag it into a slot, the rest of the screen dims so you see where it fits:

↑ buying a card and dropping it into a core.

A piece in hand, with its levels and what it does.
A piece in hand, with its levels and what it does.
The inventory: spare pieces wait in RAM.
The inventory: spare pieces wait in RAM.

And this is a built set. Core 1 runs onKill, forEachEnemyNear, @split, use(bolt), core 2 punches whatever comes near:

Two cores, two sets.
Two cores, two sets.

The weapon system, refined

So a weapon is now four pieces in a row, a set, and each core of the laptop runs exactly one set by itself:

  • ✎Trigger: when it runs. For example: onEnemyNear, onKill, onHit, onLowHP, onPickup, onTimer.
  • ✎Wrapper (optional): how often. repeat or forEachEnemyNear.
  • ✎Decorator (optional): what it does to the action. @split, @pierce, @homing, @burn.
  • ✎Action: the thing itself. use(bolt), use(punch), use(current), use(tower), pulse(), heal() or dash().

So how about building a onLowHP => sendThoughtsAndPrayers()?

Nothing loops, yet, maybe later, for now it's tricky to balance. The trigger fires, the lines run top to bottom, every action takes its time, and the set waits for the next trigger. So you can buy cores, and RAM, cores decide how many rows you can have in your script and RAM is a row of inventory to hold the pieces you aren't using in memory. Two cores are free, six is the maximum. So you can combine a set where onKill triggers a @split use(current) that chains lightning between robots, while core 1 keeps firing bolts at whatever is near.

Script pieces have versions. Buying adds copies, so you can run the same script piece on two cores, or you merge two equal pieces to level one up. I drew an icon for all pieces. Everything is explained on hover.

Where is it now? Honestly: it's built but not balanced. I need to play more to see where is the sweet spot of fun. I also need to add more. I think currently it still feels a bit too mechanical and too serious.

I started the Steam page

I signed up as a Steamworks partner this week. The way Valve does it: you fill out your identity, bank and tax information, then you wait for them to review. After submitting, the page says:

Your tax/identity file has been received. Please allow up to 30 business days for our team to review it.

30 business days is six weeks. For a form. That's long. A coming soon page with steam wishlists is the goal. Apparently that's what you need to have as a game dev. I'll tell you what happens.

If you want to follow along, Threads @truetibo and this newsletter are the best places. If you're one of the 291 new joiners: thanks for staying. And thank you, Lucas.

Feedback and ideas are always very welcome. Let's build something great together before one of us gets deprecated!

Say something

Feedback, questions, animation tips. I read every one. DEPRECATOR-5 has hijacked this section too, so it might answer.

0/600 · no links · your email is only used if DEPRECATOR-5 replies

GET THE NEXT ONE IN YOUR INBOX

One email per devlog. Or add the RSS feed.

No spam. Unsubscribe any time.

KEEP READING