Game development · Two-month review

Two Months In

Atlas of Doors is a roguelike deckbuilder that runs in a browser tab. No download, no account, no sign-up. It is also an experiment in building a game the way you would build a product: every door opened, every card played and every run walked away from is a logged decision, so almost nothing here has to be a matter of opinion. Month one had a million of those decisions. Month two has 3.7 million, a world twice the size, and one very expensive lesson about who you buy your players from.

3,777,821
Events logged
+2.72M
30,418
Players
+20,239
52,912
Sessions
+36,415
40,784
Runs started
+29,365
28,932
Runs finished
+20,562
669
Committed
+392

The short version

  • 30,418 people have played it. 20,239 of them arrived in month two. That is 3.78 million logged decisions in total, which is the actual product here.
  • The world doubled. Season V added three new regions, eighteen new monsters, nine new afflictions and four new decks. Six places to descend through where there were three.
  • We deleted our own home screen. It was the single biggest place people quit. A brand new player now lands straight on the path choice. Shipped Aug 17, after three rounds of testing that took most of a month.
  • The player base is compounding. Returning players finished 12,867 runs in month two, up from 3,734 in month one. They now finish the majority of all runs.
  • But the traffic got worse, and we can name the day. On Jul 31 a brand new advertising account started delivering and the share of arrivals who go on to actually play a run fell from the mid forties to 22.6% overnight. Same game, same build, same creatives. Switching back fixed it.
  • The three numbers we most need to fix all got worse. Day 1 retention 3% against a 15% goal, day 7 at 1% against 10%, and a median playing session of 2.1 minutes against a 10 minute goal, down from 4.5. Season VI exists to fix exactly this.
  • The game got lighter and it now tells us when it breaks. 6.7 MB off what we upload, roughly 2.2 MB off every cold start, and a crash report that files itself instead of waiting for someone to write in. Both instruments arrived late, and that is a lesson in itself.
  • Two communities exist that did not exist before. A Reddit account posting every day, and a Discord with 30 members.
  • 80 people made an account, in the two weeks since accounts existed. Nothing is locked behind one. It is purely for keeping your progress.

1. Where we are

This is the whole dashboard, read straight off the live event stream. Nobody maintains a spreadsheet behind it, and every metric on it carries its own written definition so it cannot quietly drift between versions and flatter us by accident.

The Atlas of Doors telemetry dashboard: 3,777,821 events, 30,418 unique device ids, 52,912 sessions, 40,784 runs started, a north-star of 27,944 completed runs with a full decision trace, daily bars for players, sessions, runs, completed runs and committed players, per-player ratios, and a row splitting runs and finished runs between first-timers and returning players.
The morning dashboard, Jun 27 to Aug 18, 2026. Read Aug 19.

Month one against month two

Totals always go up, because time passes and we keep buying traffic. So here is the honest version: the same measures, one month against the next.

MeasureMonth 1
Jun 27 – Jul 18
Month 2
Jul 19 – Aug 18
Change
Decisions logged1,058,0682,719,9952.6×
New players10,24620,2392.0×
Sessions16,49536,4152.2×
Runs started11,06829,3652.7×
Runs finished8,36920,5622.5×
Runs finished by returning players3,73412,8673.4×
Runs finished by first-timers4,6357,6951.7×
Releases shipped18321.8×
The one number that matters most
27,944 completed runs with a full decision trace. A run where we know what the player was offered at every fork, and what they took, start to finish. That is one fully labelled decision tree, and it is the unit of the thing we are actually building. Month one ended with 8,020 of them.

The same player does more than they used to

These are the four charts I actually read, because they divide by the number of players and therefore cannot be flattered by simply spending more on ads.

Per active player ratios over the window: sessions per player 1.74, runs per session 0.76, runs per player 1.33, completed runs per player 0.95, committed players 2.2 percent.
Per active playerEnd of month 1NowDirection
Sessions / player1.621.74Up
Runs / player1.091.33Up
Finished runs / player0.820.95Up
Committed players277 (2.7%)669 (2.2%)More people, smaller share

A committed player is one who shows up on two or more separate days and averages ten or more active minutes on the days they show up. Idle background tabs cannot inflate it. There are now 669 of those, up from 277, and they are the only group who are unambiguously playing rather than sampling.

The share falling from 2.7% to 2.2% while the count more than doubles is the whole month in one line. We poured in twice as many people, and the new people were, on average, worse. That is the next section.

2. The drop, and what actually caused it

Halfway through the month our numbers fell off a cliff. It was not the game. It was who we were buying, and we can name the day, the hour and the cause.

Of the people who arrive today, how many actually play?
Share of new arrivals who start a run
0 20 40 60 80 new ad account old account backJul 10Jul 20Jul 30Aug 9Aug 18
Jul 10, 2026Started a run36%New devices322of them, played116
Jul 11, 2026Started a run37%New devices603of them, played221
Jul 12, 2026Started a run33%New devices544of them, played177
Jul 13, 2026Started a run40%New devices527of them, played209
Jul 14, 2026Started a run42%New devices543of them, played228
Jul 15, 2026Started a run46%New devices495of them, played230
Jul 16, 2026Started a run41%New devices548of them, played222
Jul 17, 2026Started a run26%New devices368of them, played97
Jul 18, 2026Started a run32%New devices534of them, played172
Jul 19, 2026Started a run43%New devices588of them, played250
Jul 20, 2026Started a run49%New devices720of them, played352
Jul 21, 2026Started a run49%New devices659of them, played324
Jul 22, 2026Started a run48%New devices688of them, played333
Jul 23, 2026Started a run47%New devices663of them, played312
Jul 24, 2026Started a run29%New devices687of them, played201
Jul 25, 2026Started a run37%New devices630of them, played232
Jul 26, 2026Started a run45%New devices668of them, played300
Jul 27, 2026Started a run43%New devices809of them, played350
Jul 28, 2026Started a run49%New devices713of them, played350
Jul 29, 2026Started a run46%New devices746of them, played345
Jul 30, 2026Started a run46%New devices699of them, played320
Jul 31, 2026Started a run23%New devices517of them, played117
Aug 1, 2026Started a run29%New devices826of them, played239
Aug 2, 2026Started a run33%New devices678of them, played221
Aug 3, 2026Started a run35%New devices710of them, played252
Aug 4, 2026Started a run44%New devices599of them, played265
Aug 5, 2026Started a run60%New devices622of them, played375
Aug 6, 2026Started a run66%New devices551of them, played362
Aug 7, 2026Started a run65%New devices890of them, played575
Aug 8, 2026Started a run66%New devices716of them, played475
Aug 9, 2026Started a run62%New devices636of them, played394
Aug 10, 2026Started a run51%New devices608of them, played311
Aug 11, 2026Started a run67%New devices608of them, played410
Aug 12, 2026Started a run66%New devices630of them, played415
Aug 13, 2026Started a run65%New devices508of them, played329
Aug 14, 2026Started a run67%New devices601of them, played401
Aug 15, 2026Started a run66%New devices592of them, played391
Aug 16, 2026Started a run65%New devices564of them, played364
Aug 17, 2026Started a run56%New devices523of them, played291
Aug 18, 2026Started a run29%New devices590of them, played174
Source: live event mirror, read 2026-08-19. One point per day. Hover any day for the exact counts.

Every day we get some number of brand new devices. The only question that matters about them is whether they go on to actually start a run, or bounce off the door. Through late July that ran in the forties. On Jul 31 it hit 22.6%, and stayed low for four days.

What changed on Jul 31: nothing about the game
We moved our advertising to a brand new ad account. Same pictures, same words, same keywords, same communities, same countries, same budget. We checked every one of those against the old account's own setup screens, side by side. The only difference was that the account itself was new, with no delivery history.

A new ad account gets cheap inventory, because the platform does not know yet who to show you to. Cheap is the defect. We were paying about 23% less per thousand impressions and getting between a half and a third as many people who actually played.

Old account (Jul 19 – 30)
43–49%
New account (Jul 31 – Aug 3)
22.6–35.5%
Old account back (Aug 5 – 17)
51–67%

Honest caveat on that third bar: the recovery is higher than the old baseline, and the ad account is not the only thing that changed. From early August we were also testing different opening screens, and one of those arms deals you a hand of cards immediately, which makes “started a run” easier to reach. The fall is cleanly attributable. The size of the recovery is not. Aug 18 then fell back to 29.5% for one day, and we do not yet know why. That is the last day in this window, so it is a loose end rather than a finding.

We killed the theory that it was our own build in the plainest way available: on Jul 31, both accounts ran the same day, on the same version, and the old one converted at 36.8% while the new one managed 3.9%. There is no version of “the game got worse” that only affects one advertising account.

3. Who finishes runs now

Run volume more than doubled. Finished runs did not keep up. Underneath that average, two populations are moving in opposite directions, and only one of them is a problem.

Runs started, and how many of them finished
Started Finished
0 500 1000 1500 2000 new ad account Season VJun 27Jul 10Jul 24Aug 6Aug 18
Jun 27, 2026Runs started10Runs finished0Finished share0%
Jun 28, 2026Runs started50Runs finished28Finished share56%
Jun 29, 2026Runs started93Runs finished35Finished share38%
Jun 30, 2026Runs started106Runs finished49Finished share46%
Jul 1, 2026Runs started63Runs finished34Finished share54%
Jul 2, 2026Runs started88Runs finished46Finished share52%
Jul 3, 2026Runs started242Runs finished151Finished share62%
Jul 4, 2026Runs started613Runs finished463Finished share76%
Jul 5, 2026Runs started649Runs finished489Finished share75%
Jul 6, 2026Runs started869Runs finished634Finished share73%
Jul 7, 2026Runs started723Runs finished534Finished share74%
Jul 8, 2026Runs started713Runs finished520Finished share73%
Jul 9, 2026Runs started871Runs finished676Finished share78%
Jul 10, 2026Runs started629Runs finished546Finished share87%
Jul 11, 2026Runs started833Runs finished676Finished share81%
Jul 12, 2026Runs started599Runs finished463Finished share77%
Jul 13, 2026Runs started643Runs finished490Finished share76%
Jul 14, 2026Runs started693Runs finished511Finished share74%
Jul 15, 2026Runs started688Runs finished506Finished share74%
Jul 16, 2026Runs started769Runs finished591Finished share77%
Jul 17, 2026Runs started502Runs finished431Finished share86%
Jul 18, 2026Runs started622Runs finished496Finished share80%
Jul 19, 2026Runs started803Runs finished608Finished share76%
Jul 20, 2026Runs started1,230Runs finished963Finished share78%
Jul 21, 2026Runs started1,164Runs finished931Finished share80%
Jul 22, 2026Runs started1,163Runs finished921Finished share79%
Jul 23, 2026Runs started1,232Runs finished998Finished share81%
Jul 24, 2026Runs started1,028Runs finished897Finished share87%
Jul 25, 2026Runs started911Runs finished721Finished share79%
Jul 26, 2026Runs started996Runs finished748Finished share75%
Jul 27, 2026Runs started1,215Runs finished950Finished share78%
Jul 28, 2026Runs started1,134Runs finished849Finished share75%
Jul 29, 2026Runs started1,362Runs finished1,106Finished share81%
Jul 30, 2026Runs started1,141Runs finished878Finished share77%
Jul 31, 2026Runs started552Runs finished451Finished share82%
Aug 1, 2026Runs started572Runs finished348Finished share61%
Aug 2, 2026Runs started529Runs finished337Finished share64%
Aug 3, 2026Runs started553Runs finished326Finished share59%
Aug 4, 2026Runs started700Runs finished456Finished share65%
Aug 5, 2026Runs started718Runs finished359Finished share50%
Aug 6, 2026Runs started818Runs finished471Finished share58%
Aug 7, 2026Runs started1,135Runs finished583Finished share51%
Aug 8, 2026Runs started780Runs finished327Finished share42%
Aug 9, 2026Runs started951Runs finished589Finished share62%
Aug 10, 2026Runs started1,066Runs finished778Finished share73%
Aug 11, 2026Runs started1,258Runs finished876Finished share70%
Aug 12, 2026Runs started1,162Runs finished759Finished share65%
Aug 13, 2026Runs started1,015Runs finished704Finished share69%
Aug 14, 2026Runs started931Runs finished540Finished share58%
Aug 15, 2026Runs started747Runs finished364Finished share49%
Aug 16, 2026Runs started948Runs finished599Finished share63%
Aug 17, 2026Runs started828Runs finished554Finished share67%
Aug 18, 2026Runs started723Runs finished571Finished share79%
Source: live event mirror, read 2026-08-19. A run “finishes” when it is won, lost or abandoned, never when it is silently dropped. Hover any day for exact counts.

Our best day was Jul 29: 1,362 runs started and 1,106 finished, a finish rate of 81%. August recovered the starts, reaching 1,258 on Aug 11, but only 876 of those finished. The gold bars stopped filling the violet ones.

Split it in two and it stops being one story

Every finished run, split by who played it
Returning player First-timer
0 25 50 75 100 Jun 28Jul 11Jul 24Aug 6Aug 18
Jun 28, 2026Finished, returning2 (7%)Finished, first-timers26 (93%)Finished, total28
Jun 29, 2026Finished, returning0 (0%)Finished, first-timers35 (100%)Finished, total35
Jun 30, 2026Finished, returning5 (10%)Finished, first-timers44 (90%)Finished, total49
Jul 1, 2026Finished, returning11 (32%)Finished, first-timers23 (68%)Finished, total34
Jul 2, 2026Finished, returning2 (4%)Finished, first-timers44 (96%)Finished, total46
Jul 3, 2026Finished, returning14 (9%)Finished, first-timers137 (91%)Finished, total151
Jul 4, 2026Finished, returning181 (39%)Finished, first-timers282 (61%)Finished, total463
Jul 5, 2026Finished, returning123 (25%)Finished, first-timers366 (75%)Finished, total489
Jul 6, 2026Finished, returning125 (20%)Finished, first-timers509 (80%)Finished, total634
Jul 7, 2026Finished, returning223 (42%)Finished, first-timers311 (58%)Finished, total534
Jul 8, 2026Finished, returning197 (38%)Finished, first-timers323 (62%)Finished, total520
Jul 9, 2026Finished, returning358 (53%)Finished, first-timers318 (47%)Finished, total676
Jul 10, 2026Finished, returning324 (59%)Finished, first-timers222 (41%)Finished, total546
Jul 11, 2026Finished, returning302 (45%)Finished, first-timers374 (55%)Finished, total676
Jul 12, 2026Finished, returning274 (59%)Finished, first-timers189 (41%)Finished, total463
Jul 13, 2026Finished, returning222 (45%)Finished, first-timers268 (55%)Finished, total490
Jul 14, 2026Finished, returning268 (52%)Finished, first-timers243 (48%)Finished, total511
Jul 15, 2026Finished, returning200 (40%)Finished, first-timers306 (60%)Finished, total506
Jul 16, 2026Finished, returning294 (50%)Finished, first-timers297 (50%)Finished, total591
Jul 17, 2026Finished, returning359 (83%)Finished, first-timers72 (17%)Finished, total431
Jul 18, 2026Finished, returning250 (50%)Finished, first-timers246 (50%)Finished, total496
Jul 19, 2026Finished, returning269 (44%)Finished, first-timers339 (56%)Finished, total608
Jul 20, 2026Finished, returning562 (58%)Finished, first-timers401 (42%)Finished, total963
Jul 21, 2026Finished, returning395 (42%)Finished, first-timers536 (58%)Finished, total931
Jul 22, 2026Finished, returning494 (54%)Finished, first-timers427 (46%)Finished, total921
Jul 23, 2026Finished, returning524 (53%)Finished, first-timers474 (47%)Finished, total998
Jul 24, 2026Finished, returning628 (70%)Finished, first-timers269 (30%)Finished, total897
Jul 25, 2026Finished, returning435 (60%)Finished, first-timers286 (40%)Finished, total721
Jul 26, 2026Finished, returning330 (44%)Finished, first-timers418 (56%)Finished, total748
Jul 27, 2026Finished, returning393 (41%)Finished, first-timers557 (59%)Finished, total950
Jul 28, 2026Finished, returning420 (49%)Finished, first-timers429 (51%)Finished, total849
Jul 29, 2026Finished, returning593 (54%)Finished, first-timers513 (46%)Finished, total1,106
Jul 30, 2026Finished, returning457 (52%)Finished, first-timers421 (48%)Finished, total878
Jul 31, 2026Finished, returning400 (89%)Finished, first-timers51 (11%)Finished, total451
Aug 1, 2026Finished, returning214 (61%)Finished, first-timers134 (39%)Finished, total348
Aug 2, 2026Finished, returning257 (76%)Finished, first-timers80 (24%)Finished, total337
Aug 3, 2026Finished, returning249 (76%)Finished, first-timers77 (24%)Finished, total326
Aug 4, 2026Finished, returning321 (70%)Finished, first-timers135 (30%)Finished, total456
Aug 5, 2026Finished, returning238 (66%)Finished, first-timers121 (34%)Finished, total359
Aug 6, 2026Finished, returning366 (78%)Finished, first-timers105 (22%)Finished, total471
Aug 7, 2026Finished, returning383 (66%)Finished, first-timers200 (34%)Finished, total583
Aug 8, 2026Finished, returning243 (74%)Finished, first-timers84 (26%)Finished, total327
Aug 9, 2026Finished, returning359 (61%)Finished, first-timers230 (39%)Finished, total589
Aug 10, 2026Finished, returning579 (74%)Finished, first-timers199 (26%)Finished, total778
Aug 11, 2026Finished, returning562 (64%)Finished, first-timers314 (36%)Finished, total876
Aug 12, 2026Finished, returning544 (72%)Finished, first-timers215 (28%)Finished, total759
Aug 13, 2026Finished, returning628 (89%)Finished, first-timers76 (11%)Finished, total704
Aug 14, 2026Finished, returning461 (85%)Finished, first-timers79 (15%)Finished, total540
Aug 15, 2026Finished, returning291 (80%)Finished, first-timers73 (20%)Finished, total364
Aug 16, 2026Finished, returning403 (67%)Finished, first-timers196 (33%)Finished, total599
Aug 17, 2026Finished, returning488 (88%)Finished, first-timers66 (12%)Finished, total554
Aug 18, 2026Finished, returning381 (67%)Finished, first-timers190 (33%)Finished, total571
Source: live event mirror, read 2026-08-19. “Returning” means the device had already started a run on an earlier day. Days with fewer than 5 finished runs are left out so a two-run day cannot print 100%. The white dashed line is the halfway mark.

At the end of June, a first-timer played four out of every five finished runs. By mid August, returning players play seven or eight out of ten on most days. The bar quietly inverted, and that is the single best signal in this whole write-up.

WhoRuns startedRuns finishedFinish rate
First-timers, month 17,3634,63562.9%
First-timers, month 216,6597,69546.2%
Returning players, month 13,7053,734—
Returning players, month 212,70612,867—

Returning players have no finish rate in that table on purpose. A run started at 11pm and finished the next morning counts as started on one day and finished on the next, which pushes their ratio just past 100% and makes it meaningless. Their volume is the honest measure, and it tripled.

Read that table slowly
We more than doubled the number of first-timers who start a run, and the share of them who see it through fell by 16.7 points. Returning players, meanwhile, finished 3.4× as many runs as last month. The people who already know the game are compounding. The people arriving are worse than the ones who arrived last month, which is exactly what the previous section said would happen.
Dashboard row: 80 registered accounts, runs by first-timers 59.3 percent, runs by returning players 40.7 percent, finished runs by first-timers 42.4 percent, finished runs by returning players 57.6 percent.
Across the whole 53 days, first-timers start 59.3% of runs but only finish 42.4% of them. Returning players start 40.7% and finish 57.6%.

4. The opportunities

This is the section where the numbers are bad. All three of them are the same problem wearing different clothes: people do not stay long enough, on the day or across days. Season VI is aimed squarely at it.

People do not come back tomorrow

Day 1 retention

Of the devices old enough to count, the share that opened the game again the very next day. It was 4% a month ago. Mobile web games generally floor around 10 to 15%.

20% of goal
3%
as of Aug 18
15%
goal

Day 7 retention

Still playing a week later. This one has actually climbed from roughly zero at launch to a peak of 2%, and sits at 1%. The direction is right and the size is not.

10% of goal
1%
as of Aug 18
10%
goal

Day 7 is the lever worth the most over time, because a change that lifts it lifts it for every future group of players as well, not just for the people currently in the game. Going from zero to a 2% peak in two months is genuinely good news buried inside a genuinely bad number.

And they do not stay long on the day they do play

Median playing-session length

How long a session lasts, counted only over sessions where somebody actually started a run. It was 4.5 minutes a month ago. The typical web game runs 5 to 6 minutes.

21% of goal
2.1 min
as of Aug 18
10 min
goal
Month 1 median session
4.6 min
Month 2 median session
1.5 min
Where we want to be
10 min

Two windows, so both are honest: the dashboard reads 2.1 minutes on Aug 18 alone, and across the whole of month two the median was 1.5 minutes, against 4.6 in month one. Whichever you take, it went the wrong way by roughly two thirds.

Even the finish rate fell, not just the volume

This is the one that worries me most, because it is a ratio. Volume can fall because we bought fewer people. A ratio falling means that of the people who did start a run, fewer saw it through.

Jul 11 – 17
77.6%
Jul 18 – 24
80.3%
Jul 25 – 31
78.0%
Aug 1 – 7
57.3%
Aug 8 – 14
63.8%
Aug 15 – 18
64.3%

Share of that week's started runs that reached an ending, won, lost or walked away from.

Some of that is the worse traffic in section 2, and the timing lines up exactly. But the fall also lands right after a run of releases, which makes the other explanation uncomfortable and plausible: we shipped bugs and slowness, and they cost us players. We are now tracking both. The crash reporter went live on Aug 15 and the speed measurement on Aug 18, so for the whole period this chart covers, we were flying blind on exactly the two things most likely to explain it.

Lesson one: quality is not a follow-up task
Ship a slow or broken build and the damage is not a bug report, it is a person who never comes back. We had no crash reporting and no real-device speed measurement while shipping 32 releases in a month. Both exist now, and both should have existed first. If you are building something like this: put the instruments in before you put your foot down.
Lesson two: build on your own accounts from day one
Our worst week came from moving advertising to a fresh account. What we actually learned is the reverse of what it looks like: an ad account's delivery history is an asset, it takes weeks of spend to build, and it cannot be transferred. The same is true of a community account, a channel, a following. Start them on day one, keep them tied to the game, and never plan around moving them later, because you will lose the history and you will not get it back.

What Season VI is for

All three failing numbers point at the same fix. A run has to be worth more of your evening, and it has to leave you with a reason to open the game tomorrow.

So the next season extends the loop itself, so there is more to do inside a run rather than simply more to look at. Longer, better runs are the mechanism for a longer session, and a longer session is the only honest route we have to day 1 and day 7. Then a tuning pass: performance first, then balance.

5. The world doubled

Season V shipped on Aug 9 and it is the biggest single thing we have ever released. Before it, a run passed through three places. Now there are six, and which ones you get is drawn per run, so two descents down the same map no longer look the same.

WhatBeforeAfterWhat it means when you play
Places to descend through36Your run draws which ones it passes. Two runs stop looking alike
Monsters294718 new ones, each with its own art, its own sound and its own way of hurting you
Afflictions—+9Nine new ways to be hurt, built on three shared rules rather than nine special cases
Decks to play48Hourglass, Dusk, Cairn and Poise. Cairn is free, the other three are sealed
Boss ladder11 gatekeepersThe victory screen now names who is waiting on the next rung

Sealed, not sold

Three of the four new decks start locked. You open one by winning a run with a deck you have not won with before. There is no purchase, no key, no currency and no waiting timer anywhere in that sentence. The picker tells you which decks are eligible and how many are left.

And everybody started over
A new season resets your Keys, your Keyring and your place on the leaderboard. Your streaks, your armed Pacts and your Codex carry over untouched. We got that wrong once during the launch: the note explaining the reset to returning players said Keys and Atlas were safe, when they are not. It was corrected the same day. If you read the wrong version, that one is on us.

Thirty-two releases went out in month two, from v3.1.0 to v5.4.0, on 605 commits. The full plain-English changelog for every one of them is on the devlog, and the Season V write-up is here.

6. We deleted our own front door

The biggest single place people quit was the first screen we showed them. So we removed it. This took three rounds of testing and most of a month, and the result was not the one we expected.

The leak, measured
9,831 players reached our home screen and never got as far as choosing a path. That was 53.3% of everyone standing on that step, and three and a half times bigger than the next-worst leak in the whole game. Most of them never tapped anything at all, so the problem was the screen itself, not the button on it.
1

Round one: skip the title, four ways

We tried dropping brand new players straight onto the path picker, straight through a door, and straight into a fight with a hand already dealt. The fight arm won the headline metric by a mile, and we refused to ship it. Dealing you a hand on arrival means the treatment itself arranges the tap it is being measured on. Downstream, none of that lead survived: reaching floor two, finishing a run and winning a run were all statistically flat.

2

Round two: stopped early, and marked as undecided

The second round was stopped by hand at 7% of the sample it had committed to needing, because we changed the question. It reads as NOT DECIDED in our records and always will. A test stopped early is not a result, and pretending otherwise is how you learn things that are not true.

3

Round three: the picker wins on the number that cannot be faked

4,005 brand new devices, split between landing on the path picker and landing in a fight. On reaching floor two the two tied. On finishing a run, the picker won: 4.20% against 2.82%, which is a real difference and not noise. The fight arm won “played a card” by 10.7 points and that lead bought nothing.

4

Shipped Aug 17

Every brand new player now opens the game on the path choice. Pick Blood, Flame, Frost, Storm or Cairn, and you are in. If you already play, nothing changed, and a run you left half-finished still greets you with Continue Run before anything else.

The uncomfortable part
Across three rounds, no front door beat any other front door by much. Depth past the title screen is not the lever we hoped it was. What the picker actually bought us is one fewer tap between a stranger and the game, which is worth having, but it is not the fix for the 53% leak. That question is still open.

7. The game got lighter, and it now tells us when it breaks

Two unglamorous things landed this month that will pay off for the rest of the project.

Lighter

An audit of every file we ship found several megabytes being downloaded that no player could ever see. Nothing visible changed. Not one image was re-compressed or lowered in quality.

What we upload, before
32.52 MB
What we upload, after
25.79 MB
Cut from every cold start
~2.2 MB

We also built proper measurement of how fast every screen appears on real phones on real connections, and the first honest answer is that all four main screens are over budget, with the map the worst at four times its target. That is now the headline item for month three, and we would not have known without building the instrument.

It reports its own crashes

Until Aug 15, if the game broke on your phone, we found out only if you told us. It now files a report by itself, with no personal data in it, and everything it sends is named on the terms page.

It caught its first real bug almost immediately: dragging the sound slider to zero crashed the game rather than muting it. Fixed the same day.

A rule we wrote down after getting it wrong
In the release that fixed the very first reported error, we also stopped listening for it. “We fixed it” and “we stopped counting it” produce an identical zero, which makes the fix impossible to prove. Ship the fix, keep counting for one more release, then go quiet. An empty crash list has four possible causes and they all look the same.

8. People

Month one had a game and no audience. Month two has the beginnings of one, on three surfaces.

Reddit · organic

An account that posts every day

31 comments across 7 communities in 14 posting days. 29 are still standing, 2 were removed, and 16 of them got a reply. Everything is written with tooling that reads the thread first and often answers “do not comment here”, but a human presses send, because that is what Reddit's rules ask for.

Discord

30 members

Three channels, deliberately. An empty server with fifteen channels reads as abandoned. It opened on Jul 20 and it is where the season announcements land first.

The Atlas of Doors Discord server member list, showing 30 members with names blurred, joining between August 7 and August 16 2026.
The Discord member list. Names blurred, because they are not ours to publish.

Accounts: 80 people, and nobody was made to

Accounts arrived on Aug 4. They are entirely optional, nothing is locked behind one, and signing out leaves everything on your device untouched. All they do is let your climb follow you to another phone.

80 people made one in the first fifteen days. You also choose the name you go by rather than inheriting whatever your sign-in provider had on file, which took four separate releases to get completely right.

Why grow a community at all when you are buying ads?
Because bought players stop the moment you stop paying. The Reddit work is slow, it produces small numbers, and it is the only channel here that does not switch off with the budget. We are 12 karma into a 100 karma gate on that account and we are going to walk the whole way.

9. The engine we are not showing anyone

Season V, the eighteen monsters, the nine afflictions and the four decks were not designed one at a time by hand.

There is a machine behind them: a loop that proposes a season, plays it against a simulator tens of thousands of times, measures whether the result is actually fun by rules we agreed in advance, and iterates until it converges or gives up honestly.

That machine is the reason a two-person-scale project can double its world in a month and still hold a win rate inside a target band. It is also the one part of this project we are not going to write a blog post about.

Everything else here is open. This is not.

10. What is next

Four things, in order.

Next few days

Better players, on purpose, at a cost

We are going to run a few more ad rounds, and for the first time we will let the ad platform measure conversions properly. We have refused to do that until now.

Weeks

Season VI

The next season extends the loop itself, so there is more to do in a run rather than simply more to look at. It is aimed at the three failing numbers: longer runs, longer sessions, a reason to come back. Then tuning: performance first, then balance.

After that

Two new front doors

A small release to CrazyGames, and the game going to the App Store. Same game, more places to find it.

Standing goal

A game that runs itself

The long bet is an engine that designs, measures and improves this game largely on its own, with a human holding the wheel. The seasons machine is the first piece of it working.

The trade we are taking on the ads, said plainly

Measuring ad conversions properly means a tracking pixel, and a tracking pixel means a cookie consent banner on the game. A banner is a wall between a stranger and the door, and some people will turn around at it. We expect to lose players.

We are doing it anyway, and the reason is narrow: we do not need this to sell anything. We need it to know which people stay. Right now we can see that our traffic quality collapsed and recovered, but we are reading that from the inside, after the fact. Handing the ad platform the outcome lets us buy for the players who play for a long time, rather than for the players who are cheap.

Deeper data on fewer, better players beats shallow data on more of them. If it turns out the banner costs more than the targeting is worth, we will say so here and take it back out.

What we are still failing at

Play it in a browser tab