Blog
Notes from building the products. Mostly how something works under the hood, occasionally why we chose not to build something.
2026
Merging SPF instead of overwriting it
Mail setup tools love to replace your SPF record. mailbuda merges into it, finds the right Cloudflare zone across accounts, and waits until the world agrees.
A short link's hot path: Redis, a 302, and a queue
How urlxo redirects without waiting for analytics, which characters it refuses to put in a code, and what it does not store about you.
ClickHouse for events, MariaDB for issues
loggerxo stores every event in ClickHouse and every issue in MariaDB. How the ingest path works and why one database was not enough.
Keeping a four-year-old CodeIgniter app healthy
clinicxo started in 2022 on CodeIgniter 3 and is still on it. What changed underneath it so that it could stay there.
Fingerprints that agree with each other
Spoofing a user agent is easy and useless. facetbrowser generates a whole profile from one seed so that every signal tells the same story.
2025
The payment provider only ever sees your domain
orcapayz runs checkout on pay.yourshop.com, verifies the domain end to end and strips referrers. What that takes and why merchants ask for it.
Making a support bot stay in its lane
zingxo's assistant answers questions about your shop and refuses to write poems. The prompt layering and the tool design that make that hold up.
Docker publishes ports straight past ufw, and most people never notice
The most common finding in adminxo security scans is a database that was supposed to be firewalled. It is not Docker's fault, exactly.
Guessing how long a cron job has left
cronxo shows a progress bar for a shell command that has no idea it is being watched. The heuristic behind it, and where it is wrong.
2024
One Traefik per server, with routes written to a file
dockxo does not use Traefik's Docker provider. It generates a routes file from Docker events instead. Here is why.
Your servers dial out. The panel never dials in.
Every xofactory agent connects outbound and nothing else. Why that constraint is worth the trouble it causes.
A backup that is 97% complete is 0% useful
What backupxo does when the dump dies mid-stream, and why partial objects are the dangerous case.
Streaming a 50 GB MariaDB dump into R2 with a few hundred megabytes of RAM
backupxo never writes a dump to disk. Here is the pipeline from mariadb-dump to zstd to a multipart upload, and the two things that went wrong on the way.
Why the server tools are free, and what pays for them
A short note on the business model behind dockxo, backupxo, cronxo and adminxo, written before anyone asks.