<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>xofactory blog</title><description>Notes from building xofactory products.</description><link>https://xofactory.com/</link><item><title>Merging SPF instead of overwriting it</title><link>https://xofactory.com/blog/merging-spf-instead-of-overwriting-it/</link><guid isPermaLink="true">https://xofactory.com/blog/merging-spf-instead-of-overwriting-it/</guid><description>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.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>A short link&apos;s hot path: Redis, a 302, and a queue</title><link>https://xofactory.com/blog/a-short-links-hot-path/</link><guid isPermaLink="true">https://xofactory.com/blog/a-short-links-hot-path/</guid><description>How urlxo redirects without waiting for analytics, which characters it refuses to put in a code, and what it does not store about you.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate></item><item><title>ClickHouse for events, MariaDB for issues</title><link>https://xofactory.com/blog/clickhouse-for-events-mariadb-for-issues/</link><guid isPermaLink="true">https://xofactory.com/blog/clickhouse-for-events-mariadb-for-issues/</guid><description>loggerxo stores every event in ClickHouse and every issue in MariaDB. How the ingest path works and why one database was not enough.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Keeping a four-year-old CodeIgniter app healthy</title><link>https://xofactory.com/blog/a-legacy-codeigniter-app-four-years-on/</link><guid isPermaLink="true">https://xofactory.com/blog/a-legacy-codeigniter-app-four-years-on/</guid><description>clinicxo started in 2022 on CodeIgniter 3 and is still on it. What changed underneath it so that it could stay there.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Fingerprints that agree with each other</title><link>https://xofactory.com/blog/fingerprints-that-agree-with-each-other/</link><guid isPermaLink="true">https://xofactory.com/blog/fingerprints-that-agree-with-each-other/</guid><description>Spoofing a user agent is easy and useless. facetbrowser generates a whole profile from one seed so that every signal tells the same story.</description><pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate></item><item><title>The payment provider only ever sees your domain</title><link>https://xofactory.com/blog/the-provider-only-sees-your-domain/</link><guid isPermaLink="true">https://xofactory.com/blog/the-provider-only-sees-your-domain/</guid><description>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.</description><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Making a support bot stay in its lane</title><link>https://xofactory.com/blog/making-a-support-bot-stay-in-its-lane/</link><guid isPermaLink="true">https://xofactory.com/blog/making-a-support-bot-stay-in-its-lane/</guid><description>zingxo&apos;s assistant answers questions about your shop and refuses to write poems. The prompt layering and the tool design that make that hold up.</description><pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Docker publishes ports straight past ufw, and most people never notice</title><link>https://xofactory.com/blog/docker-publishes-ports-past-ufw/</link><guid isPermaLink="true">https://xofactory.com/blog/docker-publishes-ports-past-ufw/</guid><description>The most common finding in adminxo security scans is a database that was supposed to be firewalled. It is not Docker&apos;s fault, exactly.</description><pubDate>Mon, 23 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Guessing how long a cron job has left</title><link>https://xofactory.com/blog/guessing-how-long-a-cron-job-has-left/</link><guid isPermaLink="true">https://xofactory.com/blog/guessing-how-long-a-cron-job-has-left/</guid><description>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.</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate></item><item><title>One Traefik per server, with routes written to a file</title><link>https://xofactory.com/blog/one-traefik-per-server/</link><guid isPermaLink="true">https://xofactory.com/blog/one-traefik-per-server/</guid><description>dockxo does not use Traefik&apos;s Docker provider. It generates a routes file from Docker events instead. Here is why.</description><pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Your servers dial out. The panel never dials in.</title><link>https://xofactory.com/blog/your-servers-dial-out/</link><guid isPermaLink="true">https://xofactory.com/blog/your-servers-dial-out/</guid><description>Every xofactory agent connects outbound and nothing else. Why that constraint is worth the trouble it causes.</description><pubDate>Mon, 02 Sep 2024 00:00:00 GMT</pubDate></item><item><title>A backup that is 97% complete is 0% useful</title><link>https://xofactory.com/blog/deleting-the-incomplete-backup/</link><guid isPermaLink="true">https://xofactory.com/blog/deleting-the-incomplete-backup/</guid><description>What backupxo does when the dump dies mid-stream, and why partial objects are the dangerous case.</description><pubDate>Mon, 26 Aug 2024 00:00:00 GMT</pubDate></item><item><title>Streaming a 50 GB MariaDB dump into R2 with a few hundred megabytes of RAM</title><link>https://xofactory.com/blog/streaming-a-50gb-dump-to-r2/</link><guid isPermaLink="true">https://xofactory.com/blog/streaming-a-50gb-dump-to-r2/</guid><description>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.</description><pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate></item><item><title>Why the server tools are free, and what pays for them</title><link>https://xofactory.com/blog/why-the-xo-tools-are-free/</link><guid isPermaLink="true">https://xofactory.com/blog/why-the-xo-tools-are-free/</guid><description>A short note on the business model behind dockxo, backupxo, cronxo and adminxo, written before anyone asks.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate></item></channel></rss>