BUILD_LOG
7 ENTRIES · LAST 2026-10

Build Log.

Shipping notes, learning moments, and honest write-ups from the things I've built — newest at the top.

PINNED · LATEST

Date

Oct

2026

IN PROGRESS
4 min read

Superposed - Devlog #1: From Idea to First Photon

My first mobile game and my first blog post: quantum light-puzzle game about a photon escaping an abandoned lab built with Flutter and Flame in the gaps between my internship and research.

Currently, I am finishing my internship and conducting the research for my degree, and the little free time I have, I want to dedicate to something interesting, and what could be more interesting than physics and games? Superposed is where the two intersect, and it is also my first ever publication of a mobile game to the Play Store, and this is my first blog post. New things all around.

Superposed is a 2D puzzle game for Android, where you play as a single photon that wakes up in an abandoned quantum optics lab and has to escape. Each level is a little grid in which you place mirrors, beam splitters, and phase shifters to direct light to a target. As light is a wave, two paths of light can interfere constructively or destructively, resulting in a higher or lower chance of photons reaching the target. Between levels, you find pages from the notebook of the scientist who disappeared in the lab, with the story being a mystery for now.

Before writing any code I drafted two documents. A Game Design Bible with the story outline, five characters, all gameplay objects, the art direction (dark, quiet lab, with the only light being the beams themselves) and the build order. And a Software & Setup guide covering the technology choice, costs, licensing and the project structure. Having them, meant that all following decisions had some sort of reference to look at.

I also had the help of AI in the process. I discussed ideas with it, to iron out the concepts and mechanics before building anything. Then I created concept boards with Gemini, for the characters, objects, and backgrounds. They were used as references only, as I enjoy drawing, and the real artwork, specially the story pages, will be hand-drawn on paper, inked, and scanned so that it feels like it was written in a scientist's notebook. We'll see how that turns out.

For the engine, I evaluated Flutter + Flame, Godot 4, Unity, and Native Kotlin. While Godot has better built-in 2D tools, the game logic is simple (grid + wave math) and it requires more UI: menus, level select, notes, and a shop. Flutter is superb for UI, I already used it for Uplift Health, and Google maintains the official AdMob plugin. So Flutter + Flame it is, and two rules guided me during development: the beam logic should be implemented in pure Dart, without engine code, to allow unit-testing, and the most risky question should be asked first. The most risky question is not "Can I draw it?" but "Is the puzzle fun and understandable?" so placeholder shapes come before art, and the rendering gets deferred until last.

For the setup, I relied on automations as much as possible. An AI coding assistant (Claude Code) created the project, added the packages, built the folder structure, and configured Android, while I did code reviews. It was also an unexpected lesson on disk management. The flutter upgrade failed halfway through because my C: drive only had 0.6 GB of free space. We cleared caches, old emulators, moved Flutter and its caches to another drive, found a broken Android NDK from a previous Windows account, and a mysterious 11 GB drop was the Windows page file growing while Gradle was building. Not glamorous, but the toolchain is clean.

The first real code is the beam solver, which represents light as a complex number, that moves from tile to tile. Beam splitters split the beam amplitude into 1/√2 going straight and i/√2 going sideways (a 90° phase shift), and phase shifters rotate the phase, and when two beams meet at a beam splitter again, their amplitudes are added, resulting in interference. I left the rules simple on purpose, as mirrors and path-length differences do not affect the phase, so players only have to worry about splitters and phase shifters. The test case is the classic Mach–Zehnder interferometer, in which all light reaches one detector, and a 180° shift in one arm swaps the light to the other. Unit tests check that, energy conservation, and light not getting trapped in loops.

Then came a themed test screen, featuring the lab's great ring machine at night, with the photon glowing in the middle, a glowing ring for the O in the title, and the lab's old monitoring system typing status messages. Also, a beam test board, where tapping the phase shifter moves the light between the target and a warning detector. Watching it run on my phone (after convincing my Xiaomi to accept USB installs) was the highlight of the day.

Next steps are to decide the exact rules on paper, test a few paper puzzles with friends, and build a playable prototype with ten levels to find out if it is fun. And start drawing, photon first. Let's see where this goes.

FlutterFlameGame DesignQuantum
6 of 6 entries