Yesterday, Sunday, I played EVE Frontier for most of the day. Sat on Discord voice comms with the tribe, doing bits and pieces in game, normal weekend stuff. Going by the git logs, I also shipped work across three different apps between half nine in the morning and half one at night, and CivilizationControl alone went to production seven times. I want to write down what that day actually looked like, because the raw numbers sound like nonsense on their own and I do not think they are the interesting part anyway.
The flow, if you can call it that, is this. Something occurs to me, or someone in game mentions something, and I alt-tab and dictate a prompt. I use voice transcription for nearly everything, I wrote about that in the dictation article a couple of weeks back. The agent goes off and works in the repository, and I go back to whatever I was doing in game. When it is done I look at what it built, usually on a Cloudflare Pages preview deploy, poke at it, tell it what is wrong, and when it is right it goes to production. Then back to the game. The prompts are not clever. Most of them are a couple of sentences of me describing what I want, dictated with all the ums and self-corrections left in, because the agent has enough context in the repository to fill in the rest. That last part is the whole trick, and I will come back to it.
What actually got done
So, the day itself. In CivilizationControl, the market app got a proper public face. The market entry page became a directory of every registered market, browsing no longer demands a wallet at all, and there is a new all-markets view that shows every live market in one workspace. The wallet flow got reworked so connecting is something you click, never a popup that ambushes you on page load, and that one involved an actual A/B experiment with a fake locked vault to prove which code path was firing the popup. There was also a design language audit across about 30 market files that found 44 places using a bare CSS radius instead of the token, a themed scrollbar pass because a screenshot showed the bright browser default, and a small quality of life fix so you can actually get back out of a selected item, which came straight from a user DM. Every one of those went preview first, then production, same day.
RootFit, the fitting tool, got a smaller but quite satisfying set. The module palette gained a plus one button that instantly places a module if there is room and quietly repacks the layout in the background when there is not. Then a polish pass because the first version of that button screamed accent orange twenty times down the list, and a fix for the Ember theme where two panels were still sitting on cool navy because the theme only overrode some of the surface tokens. The validation suite there runs over a hundred Playwright browser tests, and the day added five more.
EF-Map had the busiest log. A brand new tool called the Universalizer shipped, which captures whatever audio your browser can hear and makes the entire three.js universe dance to it, stars pulsing on the beat. The Open Market launch got its full discovery treatment, a Tools Library tile, a landing page, a launch post. The Yeet Planner gained waypoints and avoids, which someone had asked for on Discord. A genuine production incident got diagnosed and fixed, the chain indexer's inventory materialization was not replay safe, so a replay had quietly produced wrong stockpile numbers, and a user on the EF-Map Discord spotted it. Both the indexer and the query semantics got corrected and written up, and the same pass added storage volume queries to the Intel tool and made intelligence results highlight your own name when you appear in them, both from one user's direct message. And the EVE Vault popup fix happened here too, the same bug existed in both apps and got fixed in both, in separate sessions, the same afternoon.
Then after midnight, the bit I enjoyed most. I had noticed that the cinematic embeds on the embed guide were autoplaying music, which they never used to do. The investigation found three separate bugs. The music one turned out to be a same-origin localStorage leak, embeds share the browser's stored preferences with the main app, so my own ambient music setting was leaking into every embedded iframe, with no attribution showing and no way to turn it off. The second was the cinematic camera rig capturing its orbit radius from the camera's first frame, before the zoom parameter had finished flying the camera in, so tight zoom embeds drifted back out to the default distance. The third was multi-system highlight embeds parsing the zoom parameter and then just throwing it away, which means the guide's own example URL had been shipping broken. All three fixed, verified headless with a scripted Chrome run, and while I was in there the whole guide got restructured around one unified embed builder instead of six tabs of accumulated history. Production by half one, and then bed.
Worth being honest about where the list comes from, too. I am not inventing work to fill a day. The waypoints, the indexer incident, the clear selection fix, the volume queries, nearly all of it started as a user request or a user noticing something, some on the EF Apps Discord you can join from EF-Map, some as direct messages. Days like this are mostly me working through what people asked for. And I think that is where something like the Universalizer comes from as well, honestly. You clear the queue of sensible requests and bug fixes and think, right, what would be a fun one for me. Sometimes the answer is making the universe dance to your music.
The numbers, and why I do not rate them
Now, the numbers. It was 66 commits across the three repositories, roughly 11,000 lines added and 2,800 removed, and nothing left stranded on a branch. I used to get excited about lines of code when I first started this, thinking it was some measure of how well I was doing. I place no stock in it at all now. Docs generate a lot of lines, synced discovery surfaces generate more, and ideally you want the tool doing the job with fewer lines, not more. A day that ended with a net reduction would honestly be more of an achievement. Commit count is not much better, I could have done the same work in half the commits by sitting on feature branches longer. The measure that matters is the list above, what a user can actually touch that they could not touch on Saturday.
The part that took a year
Here is the honest bit. None of that speed is the model being magic. It is scaffolding, and the scaffolding took about a year. EF-Map started last September, and for months progress was nothing like this, I was building the codebase, making the mistakes, writing them down. CivilizationControl was born at CCP's hackathon in March. RootFit only started on the 25th of June, and it moved fast from day one precisely because it inherited everything, a template repository from the hackathon to start from, plus the accumulated lessons of EF-Map.
What the scaffolding actually is, concretely. Every repo has an AGENTS.md that tells any agent the rules of the house, what the deploy pipeline is, what needs a feature branch, what zero typecheck errors means. There is a decision log in each repo that agents append to, so the next session knows what the last one did and why, sessions do not share memory otherwise. There is a design language doc so the agent does not invent a new shade of blue, and when yesterday's scrollbar screenshot exposed a gap in it, the rule got added to all three repos the same evening. There are validation gates the agent runs itself, TypeScript strict checks, Playwright smoke tests, headless browser verification of visual changes. There are also all the supplemental pages around the apps, the features directory, the FAQ, the landing pages, the llms files that let other people's AI tools read what the apps can do, and every one of them has to move when a feature moves. Even a year in, rules are still being added there. One landed across all three repos that same day, making those page updates part of the definition of done for any user-facing change, because me trying to remember them was the weak link. None of that is fun, if I am honest. Incident write-ups are not fun, discovery pages are not fun, thinking about design language across three repositories is not fun. It is exactly the stuff that makes a day like Sunday possible though. And there are skills, saved instructions for repeatable jobs. This article was written by one called my-copy, which has been trained on a lot of my own dictation, and yes, there is something a bit recursive about the blog post on agent workflows being produced by the agent workflow, but that is kind of the point.
The effect of all that is the agent rarely needs me to explain context, it needs me to make decisions. Which is what a two sentence dictated prompt is. I said in the dictation article that I am a vibe coder, not a coder, and that has not changed. What changed over the year is that the repositories themselves got good at being worked on.
I do not think Sunday was even an unusual day, that is the slightly mad part, it was just the first one I counted. If you are trying to get an agent workflow going and it feels slow, I would guess the missing piece is not the model or the prompts, it is that the repo does not explain itself yet. Start with an AGENTS.md and a decision log and it compounds from there. And if you want to see what the day produced rather than read about it, it is all live on ef-map.com. Any questions about the setup, ask, happy to share the details.