Why almost everything I build has “sim” in the name
Fly4cast, Mutfaksim, ArenaSim, QuantDesk, StageLightning. They look like different projects. They are not. All of them try to say what will happen to something that has not happened yet.
Metering systems, customer portals, mobile apps, simulations, servers. Every entry comes from real work — the project is named, linked and measured inside the post.
Fly4cast, Mutfaksim, ArenaSim, QuantDesk, StageLightning. They look like different projects. They are not. All of them try to say what will happen to something that has not happened yet.
I ran the same technical audit by hand for every client: two hours, missing something each time. I turned it into an engine. The hard part was not the scoring formula — it was deciding not to produce a number.
Mutfaksim tells you what comes out of whatever is in your fridge. Then moving its content to social media by hand felt absurd, so the site started publishing itself — along with three bugs.
In a technical product shop the most common question is not price. It is “my model is discontinued, what can I fit instead?”. I built an engine to answer it — and shipped it switched off.
I did not make my best architectural decisions at a screen. Most of them arrived somewhere with no phone signal, by a fire, while doing nothing at all.
Two complaints in one week. One was “the site never opens, but I can get in”; the other “the customer paid and it isn’t in the system”. Both had causes in places that produce no error.
I wrote a disk analyser. Walking folder by folder took nine minutes to scan 1.4 million files. NTFS already keeps a record of every one of them in a single table.
There was a mail loop on the server and my monitoring script had been reporting “bounces = 0” for a month. The number was correct. What it measured was wrong.
NEO is an always-listening assistant at home. My first mistake was treating those three as one question. Splitting them raised accuracy and made it visible where the system was going wrong.
My voice assistant’s brain was far too slow. I was passing settings as command-line flags and all of them appeared to be accepted. Reading the start-up event showed the truth: none had been applied.
My personal projects had lived on a client server for years. I separated them: my own VPS, my own VPN. PC, phone and a VR headset now come in over the same tunnel — and the reason was not technical.
QuantDesk watches the market around the clock, decides which regime it is in, enables the strategies that suit it, and rejects any trade whose expectancy cannot pay the fees. Its most valuable part is not the strategy — it is the measurement.
I did not want an off-the-shelf bot shield: it exposes the user to a third party, does not work in some countries, and image puzzles tire humans as much as bots.
In ArenaSim the server and the browser had to play the same match. I gave both the same seed and got different results. The culprit was not my code.
Automating a cash-flow report, the ERP and the hand-kept spreadsheet disagreed. My reflex was to distrust the spreadsheet. Going line by line, my assumption collapsed.
I wrote Fly4cast’s iOS build on Windows, compiled it in the cloud and shipped it to TestFlight. The hard part was not the code — it was signing. Signing is not a build step, it is a chain of identity.
We were building a conversational layer over an ERP. The model proposed an endpoint that does not exist — fluent, plausible, entirely invented. That moment produced the product’s most important rule.
I wrote a tool to measure my room’s reverberation time. It produced sensible numbers. Then I made the room completely silent and it kept producing the same numbers.
The light show had to rewind together with the track. What made that work was not a complex synchronisation scheme but a single rule: no effect may remember the previous frame.
My lighting interface refused to talk to any software. I swapped its driver, wrote raw bytes at it, and the lights came on. Why a forty-year-old protocol is still standing.
I wired my bulbs to the music. A colour command on every beat. The lights fell behind, then stalled, then started flashing at random. The fix was not sending faster.
I wanted to list the devices on my own network. I scanned with TCP — six minutes later it was still at 18%. Then I dropped one layer and it finished in three seconds.
The .txt a drone leaves behind is not plain text. Older versions you can decode on your own machine; newer ones require a key from the manufacturer’s server. One version byte decides which.
A mechanical contractor’s corporate site came to ninety pages — Turkish, English, German. I did not write ninety files. I generated ninety files.
The sequencer cells in my site’s groovebox went invisible one morning. No JavaScript error, nothing in the console. The cause was two CSS classes with the same name in two different files.
I was preparing a draft for a luxury car service. I opened their site, clicked “Book an appointment”, and PHP errors poured onto the screen. That became the subject of the whole proposal.
The hard part of Fly4cast was not fetching weather data. It was saying what the wind measured at ground level will be at 100 metres — and not collapsing that answer into a single percentage.
A home-textile manufacturer’s only decent digital asset was a 49 MB catalogue PDF. I extracted the product tree out of it — and walked into two traps.
I shipped several times more this year than in previous ones. Not because I work more. I moved AI out of a chat window and into the projects, the file system and the terminal.
Writing the request form for an inspection laboratory, I realised something: people do not know the answer to “which inspection type do you want?”. They do not need to — the system can work it out.
One measure of rakı, two of water, ice last. That is not tradition, it is physics — and it is exactly the class of bug I had been chasing all week.
I built a car dealership’s operating system from scratch. I started at the schema, not the screen, and finished nine layers in one day — each one working on its own. Not out of haste; the opposite.
I put a “thought simulator” in the middle of my own site. You drop in a concept — “Billing” — and the system decomposes it into what it needs. Eight steps later you arrive at “sleep”.
Thirty people work inside a CRM. Which screens are really used, where does someone get stuck, which three steps repeat every single day? Nobody knew. I built a panel — then I gave that data to an AI.
A server was needed to issue licences to field terminals. Instead of installing a framework and pulling 40 MB of dependencies I wrote six classes. Under 900 lines, and the same code still runs.
At period close somebody has to press “render all invoices to PDF”. The server carries it for four minutes, then the browser gives up and nobody knows what happened. First I measured where it was actually stuck.
The CRM ran on PHP 5.6 and had to reach 8.3. The classic route is to branch a copy and modernise that — which had already been tried here and died at 85%. This time I did not make a copy.
A salesperson describes the product but does not know the code. The catalogue has 4,000 items. I closed the gap with AI — without ever letting the AI invent a product.
Everyone in the building has their own meter read. Then they see the bill and say “I did not burn that much”. Both are true — because half the bill comes from your meter and half from the building’s total.
Someone living in a flat wants to see their heating bill. Sounds simple. But the bill lives in another system, the meter in another table, and a tenant who moved out must have their history frozen. That is why I rewrote it from scratch.
I started it as a surprise for my nine-year-old. Backgammon, card games, hangman and a robot-combat RPG. All multiplayer, all on a real server — and the games were not the hard part.
The meter on the radiator knows how much heat a flat used. There are three ways to get that number out of it: by eye, with an optical head, and over radio. I wrote all three — and each is a different world.