Blog
How VINlist is built
Notes from building VINlist: what changed under the hood, why, and what it measured.
Why VINlist would rather leave a gap than guess
Mateusz Mysiak ·
A wrong engine on a decoder page can make an honest seller look like a liar, or a dishonest ad look confirmed. Why VINlist leaves a gap instead, and what to check when You see one.
Shipping VINlist in 11 seconds
Mateusz Mysiak ·
From about 100 seconds to 11 per release, with every check still in place and the build as optimized as before; an undo in seconds; and fewer "new version" prompts for people reading the site.
Moving VINlist to Fedora CoreOS
Part 3 of 3 · Mateusz Mysiak ·
Moving production to Fedora CoreOS with SELinux enforcing: rebuilt from backups, switched in 61 seconds, and what the rehearsals caught on the way.
Containers without an operating system
Part 2 of 3 · Mateusz Mysiak ·
No Debian, no shell, no package manager: what's inside VINlist's containers now, the system-call allowlists around them, and a trial with no operating system at all.
From Bun to Rust: rewriting VINlist's server in a week
Part 1 of 3 · Mateusz Mysiak ·
How VINlist's server moved from TypeScript on Bun to Rust in five days, checked byte for byte against production, and then dropped the whole JavaScript toolchain.