TENNO.DAT is a mastery tracker for the video game Warframe: keeping track of which of several hundred frames, weapons and unfortunate pets I’ve levelled, which Primes are rotting unbuilt in my foundry, and exactly how far away the next dopamine hit of a level up is. Every veteran maintains a spreadsheet for this. Mine got out of hand.
It looks like a fansite from 1999 because, canonically, it is one. The Warframe: 1999 DLC dropped the game into an alternate-history millennium — dial-up, instant messengers, a boy band — and once the game made retro computing canon, the only correct costume for a fan tool was period dress.
Visit tenno.club ☞Source on GitHub
Every Warframe veteran keeps a mastery spreadsheet. At what point did yours need Postgres and a hexagonal backend, and how do you feel about that?
Because spreadsheets are hard to keep up-to-date, and they lie. I didn’t realise until I started building this, but Mastery XP spans 15+ categories with different rules (intrinsics, legendary ranks, exceptions like the newly released Sirius & Orison - and the wiki manages to disagrees with itself on a surprisingly regular basis), and before long you need something automated and expressed in a Turing-complete way to accurately measure your progress.
Also at some point “my spreadsheet” quietly acquired users, which is how all my worst decisions start.

The KIM OS look — set dressing, or load-bearing?
Warframe: 1999 is arguably the best expansion - it’s certainly my favourite - and it made retro computing canon, so the tracker dresses as software from inside the game’s own time-travel plot. The set dressing also gives me a handy way of being visually distinct (even inside the Warframe fan site landscape, which is overwhelmingly Orokin-gold) while staying true to the lore. It’s a win-win!
You run Playwright visual regression on a UI that's supposed to look wrong. Explain yourself.
Ha. Actually, this all comes down to LLM-assisted development. I can guarantee I’d have gotten bored with this project without an LLM to build the boilerplate and spar with to understand the nuances of the mastery calculation, but one of the issues with using LLMs for development is you quickly become the bag of meat in the middle, typing “pls fix” at 2am with tears streaming down your face while the robot manages to make every change except the exact one you mean.
Ask me how I know.
By giving the LLM a feedback loop, you create back-pressure which significantly reduces turnaround time, defects, and the agent’s toll on my sanity. Tests - including UI tests - are a big part of that strategy.

Syncing from DE's public API means parsing what the game actually says about a player. What did that teach you that the wiki couldn't?
That DE will ban your IP address if you spam them too hard? 😅 For a month, after finding that out the hard way, I had to log into the game via a VPN.
But it’s a great way to validate your numbers. Right before deployment, I had a round of hopping into the game, levelling some weapons from my foundry, and double checking all the numbers matched - from DE, to in-game, to my own calculations.
Warframe in particular is a game held together by edge cases - mainly due to the complexity and how damn imaginative some of the frames in the game are. It’s a lot of the charm for me, and I’ve gained a greater appreciation for it when seeing how many sharp edges certain items or frames have. Small example of one I had to work around after discovering it manually: Venari Prime, Khori Prime’s pet, isn’t marked as a Prime item in the API.
That’ll be surprising to the two readers who actually play Warframe.
The whole project is one long commitment to the bit — and the bit turned out to be a decent forcing function. When every feature has to answer “what would this look like on Windows ME?”, you ship smaller, weirder, and more coherent than any design system would have allowed.