Short write‑ups of problems we hit running a real commerce operation and what we changed in the code because of them. No product announcements; just the reasoning.
Maya ran warehouse pallet and stock work; Han handled clocking in and out. Both React Native apps were finished, tested and production-ready, and neither was ever launched. What beat them was not a new technology but a question nobody asked early enough, because the answer had been sitting on every supermarket checkout since the eighties. How we proved in production that nothing had ever called them, the two threads out of 58,000 lines that still reached back into the live app, and what a year of good work that never met a user is actually worth.
The new system's name wasn't invented for a rebrand — and it wasn't even the first name. In October 2020, years before aiku served its first request, a file called trait.Aiku.php appeared inside Aurora, pushing entity changes to a system that barely existed. The app that eventually caught those changes was born as "Pika" — an experiment to extract warehouse picking into a micro-service, started on a warehouse visit in Eastern Europe — and only became aiku by a rename ticket in March 2023. This is the archaeology of a name.
Every codebase has a birthday; Aurora — the system aiku replaced — has a timestamp, a timezone and a table by the window. The header at the top of its entry point reads "Created: 27 August 2015 12:49:03 GMT+8, Singapore", and the commit from that day says "thought experiments to a full SPA". This is the origin story — the 2008 system that came before it, the habit of writing the city into every file header, and how "aiku" was a trait inside Aurora years before it was a product.
14,880 commits from 2008 to today, read not as a changelog but as a diary. The ticket prefixes that name the eras (KAKTUS, CSER, PIKA), the hour histogram with its 3am tail, a New Year's Day spent chasing a search bug with the typos getting worse by the hour, "brexit nightmare", "leap year hack", and the honest admission a commit message almost never makes: "Stock Levels don't add up..we think".
Every file in Aurora starts with a header recording the exact time — and the city — where it was created. Nobody asked for it, and for seven years it recorded nothing but a company name. Then, from October 2015, the headers start naming places, and read end to end they become a travel diary — Spain, Sheffield, Macau, Penang, a factory city in China, Bali, Bangkok, Mexico City, Tokyo, Kuala Lumpur — including three files created mid-flight. The typos are the proof it was all typed live.
Aurora has no framework, because in 2008 there was nothing worth adopting — so it grew its own. A 5,864-line router, an active-record ORM with a built-in audit trail, a process-forking job runner years before queues were a composer require, translations in sixteen languages with a homemade string extractor, and a Content-Security-Policy assembled by string concatenation. A tour of what one developer hand-rolls in fourteen years, what each piece is called today, and why the answer to "was it bad?" is more interesting than yes or no.