Thoughts

52

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

Catching Spam Campaigns in 64 Bits

A spammer changes one name per copy, and every copy hashes differently. How Mailingest counts near-identical mail with SimHash, four bands and Redis.

The 21st Visitor Broke Live Mail

Buzontemporal's live inbox held one Mailingest stream per visitor, and Mailingest allows 20 per account. Why raising the cap wasn't the fix, and how Centrifugo was.

Building a Temporary Email Service

A temporary inbox takes mail from anyone, for anyone, with no account. How Buzontemporal runs on Mailingest: no attachments, a light path, hard limits.

pg_cron as a Clock, Not a Worker

Per-customer scheduled jobs, several workers, no duplicates. In Sumalos pg_cron only inserts a row and sends a NOTIFY; the work stays in the app.

Every File in S3 Gets Its Own Key

Sumalos encrypts every file in its bucket with its own key, wrapped by the organization's, wrapped by a master key. A leaked bucket is noise.

Invoices Postgres Refuses to Change

Spanish law says an issued invoice can't change and numbers can't skip. In Sumalos Postgres enforces it: freezing triggers, a locked counter, a hash chain.

An Agent Plan That Runs Exactly Once

An AI agent that issues an invoice can't take a step back. How Sumalos turns its plan into a preview, a confirmation, steps that run once, and an undo.

An AI Reply That Survives a Restart

If the tab reloads mid-answer, an AI reply should carry on, doing nothing twice. Sumalos does it with a Postgres row, a Redis lease and a fencing token.

Every AI Call Gets a Receipt

One AI bill a month, twenty kinds of model call. How Sumalos prices every attempt as it happens and caps spending per person and per company.

The AI Is One Vote on the Receipt

A vision model misreads a crooked receipt and sounds sure of it. Sumalos reads documents several times, checks digits, and lets the model be one vote.

Red-Teaming an AI Agent Without a Model

Red-teaming an AI agent against a real model is slow, costly and never repeats. For Sumalos I assume the model is compromised, script it, test the rest.

Assume Your AI Agent Will Be Fooled

An AI agent reading messages from strangers will obey one someday. Sumalos' guardrails assume it: a classifier, limits in code, a canary in the prompt.

An Agent That Remembers Across Channels

Payment terms said on the web on Monday should be known on WhatsApp on Thursday, by the right people only. How Sumalos designs its AI agent's memory.

The Agent Borrows Your Permissions

One AI agent, five people with different rights. Sumalos limits the agent's tools to what the person talking to it could do in the app.

Four Layers of What an Agent Knows

One AI agent, many companies, many people. Its knowledge comes in stacked layers, and the work is keeping each layer from leaking past who it belongs to.

An AI Agent That Only Sees Pseudonyms

An AI agent that sends invoices never needs to hold the customer's data. A clear proxy gives the model handles and puts real values back on the server.

A Privacy Filter Below the Prompt

Telling an AI agent not to read an IBAN is only a request. In Sumalos the privacy filter sits in the one module every read passes through.

Tax Rules the Agent Can Only Explain

In Sumalos the language model never computes a tax. A deterministic rules engine does, with hashed bundles, exact decimals and two clocks.

k3s vs k0s vs Kubernetes

All three pass the same conformance tests. What separates them is everything between an API server and an HTTPS URL, and that's why pfrctl runs k3s.

Building a Pixel-Art AI Assistant

Sumalos' assistant is a 48-pixel rubber stamp with no sprite sheet: every frame is computed from distance functions, its face shows what the model does.

Alternatives to Jev

A month after Jev, there are over twenty decision models you can call or self-host, and most beat Jev on its own benchmark. What each is and how to choose.

A Model That Decides for You

Most model calls in a product are multiple-choice questions. A decision model answers in one pass, with a probability. I ran one on a four-core VPS.

A 3D Book in Pure CSS

Each Secondbook travel guide is a hardcover you can turn in your hand. No WebGL: twenty-five divs, a few CSS transforms and a light model run per pose.

URLs in Eight Languages

Secondbook speaks eight languages, and so do its URLs. One registry drives every link, redirect, guard and robots.txt line, with a single folder per page.

Skew Protection for Next.js

Every deploy strands open tabs asking for chunks only the old build had. My skew protection for self-hosted Next.js on k3s: a Go router that pins each tab.