Thoughts

52

Notes on software engineering, distributed systems, and the future of human productivity.

Waking Apps on Demand

A stopped container frees memory but drops its route. WOC, a small Go proxy, keeps the route up, wakes the app on the first request and sleeps it again.

Choosing a Fast Vector Distance

A distance formula that only shortlists can be as wrong as its speed allows. Choosing between three hinged on a number that runs opposite to throughput.

S3 Conditional Writes

For eighteen years S3 couldn't tell two writers apart. In August 2024 it learned to refuse a write, and systems began moving commit logs into buckets.

Giving an Inbox to Each Agent

Resets, invoices and support replies still arrive by email, and my agents live on HTTP. Mailingest is my Rust mail platform where an inbox is one API call.

Building a Better WhatsApp SDK

WhatsApp's native protocol skips the headless browser but hands you a raw socket and a firehose of events. whatsweb is the thin layer that makes it a bot.

One Bot, Three Chat Apps

Same bot: a few lines on Telegram, a gateway and intents on Discord, a headless browser posing as a phone on WhatsApp. The hard part was never the bot.

Sandboxing Agent Code in MicroVMs

My agents write code nobody reads, then want to run it. So each run gets a Firecracker microVM on a box I own, bounded by a guest kernel, not a promise.

A Repository Layer for Drizzle

Fifteen identical repository files and thirty as-any casts in an ORM sold on type safety. Better Drizzle exists because everyone writes that layer by hand.

Fluid Compute on Your Own VPS

Fluid compute stops billing the I/O wait serverless charges in full. It's a worker pool and a cgroups v2 counter, so I rebuilt what I could on my own box.

Vector Search on S3

I forked VecPuff to keep one bit per dimension resident, so search over vectors in S3 fetches one in full only when the cheap guess is too close to call.

A URL That Speaks Markdown

This article is also a plain markdown file, a .md away: content negotiation that serves the same writing to people and to machines from one source.

Catching Bots with MinHash

Exact-match blocklists miss a bot farm that changes one field per request. MinHash and LSH ask "have I seen something shaped like this" in sublinear time.

Designing a Payments API

Taking a payment is four lines. Making a retry never double-charge and a lost webhook never lose an order is the real work. How I shaped Paybit's API.

A Non-Custodial Payment Gateway

A payment processor holds your money for a moment. Paybit deletes that moment: a non-custodial crypto gateway that splits every payment on-chain.

An Anti-Scraping Seal

A price on a page is a fact someone paid to produce, public for anything to copy. I'm building an anti-bot seal to change what that copy costs.

Anonymous Emoji Reactions

A no-login emoji bar that counts strangers' clicks and still trusts the total: two disposable identities, a row only you can write, and a live SSE stream.

Your Own Vercel on a VPS

How a modern PaaS turns a git push into an immutable deployment, from cold starts to Fluid compute, and how to rebuild the same machine on a VPS you own.

How Bot Detection Works

How modern anti-bot systems work in 2026, from TLS and HTTP fingerprints to obfuscated client probes, server-side ML scoring and tokens that last seconds.

Generative Color Fields

Turning a seed into something that reads like a film reduced to color: seeded noise, OKLCH, a texture model, and a demo you can drive.

More Backend Than a Blog Needs

How pablofr.com is built: three services, Postgres, Meilisearch and Redis, one work queue and a lot of SSE. A personal site over-engineered on purpose.

Watermarks That Trace Leaks

Protomarc marks images, video, audio and PDF so a file can prove who owns it and, if it leaks, point back to whoever it was given to.

Turning a VPS into a Platform

Why I encoded a whole VPS as one Go CLI, pfrctl, instead of renting a PaaS or running a heavy self-hosted panel, and where that trade-off pays off.

Avatars from a Username

Deterministic avatars from a username, first as ordered-dithered identicons, then as halftone dot fields where the dot size does the drawing.

Generating Vasarely in Code

Victor Vasarely's Vega-Nor rebuilt as a pure TypeScript function: OKLab paint ramps, an area-conserving spherical warp, and colorways from a seed.

How React Server Components Work

How React Server Components split an app across the server/client boundary, why they never hydrate, and how to nest server content in a client component.