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.
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.