Three days ago, I published the first devlog. I had a 128-step plan, a blank APK, and 3 Google Play testers. Today, I have 40 days of structured narrative content, 29 endings, a full art pipeline, and a very familiar tightness in my chest.
Let me explain.
The Content Freeze
Between August 10th and August 13th, I completed a massive chunk of the antifragile plan. The most critical milestone was the content freeze.
What does "frozen" mean? It means NICHLYST now has a definitive shape. Unless a miracle happens and I find myself far ahead of schedule with time to consider expanding the lore, the scope is now locked. The JSON file that drives the entire game has been committed, tagged, and backed up to Google Drive.
Here is what that structure looks like:
- 40 days of narrative content.
- 29 endings (main and hidden).
- Multiple resource counters (some visible to the player to manage survival, others running silently under the hood, tracking psychological and moral degradation).
- Over 100 global flags tracking every choice the player makes.
I wrote the initial script as a markdown document, then structured it into JSON. The English translations were finalized alongside the Ukrainian originals, as the hackathon requires all submission materials in English.
The Moral Audit
Before freezing the content, I ran a moral complexity audit on the entire game. My design formula is simple: every choice must pit the value of testimony against the cost of survival. No binary good/evil. No easy outs.
The audit checked every single day for six criteria: no binary good/evil, testimony vs. survival tension, consequence weight, emotional cost, no easy outs, and narrative coherence.
The audit found 39 out of 40 days passing all six checks. One day failed.
It was a breathing space between two heavy acts. The problem? Both choices had zero mechanical consequences. No resource deltas. No flags set. The player could experience the day as cost-free.
That is a violation of the core design philosophy. In NICHLYST, nothing is free. So I fixed it: accepting help now costs a psychological resource (the moral weight of compromise), and refusing help costs a social resource (the cost of pride). The fix was committed, and the content was frozen.
The audit also identified some of the game's strongest moral scenes — moments where the player must decide whose memory gets preserved, whose identity gets erased, and whether to warm the paper archive or the living people in the freezing basement. These are not fun choices. They are not supposed to be.
The Art Pipeline: Style Anchor and Privacy
With content frozen, I moved to art generation. The design document specifies a "muted gouache and ink-wash illustration" style — desaturated, painterly, Eastern-European post-industrial. This is the style anchor.
I am using a single AI model for this: MAI-Image-2.5-Pro.
I rejected other tools because their creations are public by default. I am not publishing art before the game ships. Privacy is a stop-loss.
I generated a series of test images to validate the style anchor. Then I generated:
- Character sheets and portraits for the Archivist and all visitors.
- Base background locations for the underground node and the besieged city.
- Postscript locations reflecting the slow decay after the finale.
- Flat papercut UI icons for the visible resources.
- The 1024×1024 app icon.
Every single image was manually audited against a negative checklist: no real flags, no military insignia, no celebrity likenesses, no readable text, no brand logos. One image initially had a pattern too close to real military gear. I regenerated it with explicit instructions for nondescript, worn winter gear without any insignia, and passed the audit.
The 23:00 Rule Met Reality
In my first devlog, I wrote about the 23:00 hard stop. I said an antifragile plan must absorb bad days.
I had bad days.
War breaks a person. Even a civilian one. It shatters the psyche. But paradoxically, it also builds a strange kind of callus. You start perceiving things not as acutely as you might have years ago. Explosions become background noise. But the internal pressure remains.
On August 10th, I felt the pre-panic state creeping in. A tightness in the chest, shallow breathing. I knew exactly what it was — I've been treating GAD for over a year. It didn't escalate into a full attack, but the physical toll was there. Sitting at my desk, trying to write JSON while my nervous system was bracing for an impact that wasn't coming.
On August 11th, Russian ballistic missiles hit Kyiv again. The explosions were loud. But I didn't panic. I just kept working. There is a strange detachment that develops — you hear the booms, you acknowledge the danger, and you return to the code. The anxiety that day wasn't about the missiles; it was the quiet, creeping dread of an exhausted mind.
None of these days were perfectly productive hackathon days. The plan bent.
But the plan did not break.
On the morning of August 13th, I sat down, opened VS Code, and committed the final content freeze. The JSON was valid. The art was generated. The moral audit was complete. The structure was intact.
The antifragile plan absorbed days of anxiety and war, and the project still shipped its milestones on schedule.
The Tester Update
In my first post, I asked for help with the Google Play 20-tester bureaucracy.
I now have 6 emails.
It is progress, but the math is still unforgiving. I need 20 testers to bypass the 14-day closed testing wall before I can publish to production.
So, I am putting this directly into this devlog again. If you are reading this, have an Android device, and 2 minutes to spare, please help a fellow builder bypass this bureaucratic wall.
👉 https://forms.gle/4hJkWsmuyKp3Tgtr8
You will just need to accept an invite from Google Play later, download the app, and keep it installed for 14 days. No deep QA required. Just your presence to satisfy the algorithm.
What Comes Next
The content is frozen. The art is generated (resizing and compression are deferred to pre-APK build — another stop-loss decision to avoid perfectionism).
Next up: Phase 4 (Audio) and Phase 5 (Engineering — the game engine in HTML5/JS, reading from the JSON). The hardest part is still ahead. Writing a JavaScript state manager that tracks all these counters, flags, and ending conditions — all running inside a Capacitor Android wrapper on a phone.
But the foundation is no longer fragile. It is concrete that was poured during a heatwave, under missile alerts, through the fog of GAD.
NICHLYST is coming. And the content is frozen.
Follow this devlog for the #BuildInPublic journey.


Top comments (0)