Welcome to the Showcify Blog

LatestPopular6 articles

Layered bot defense for a public form: honeypot, Turnstile, email verification, and the pieces between

A public, unauthenticated form that writes to the database and sends email is a bot's favorite denial-of-service target. No single control is enough. The point is layering honeypot, Turnstile, rate limiting, and email verification so one layer failing doesn't sink the rest.

Jul 30, 202617 min readsecurity
A medieval castle viewed from outside its outer wall. Multiple defensive layers visible in one frame.

Moving JWTs out of localStorage: the surprises waiting in ActionController::API

A JS-readable token in localStorage is one XSS away from account takeover. Moving it into an HttpOnly cookie is the well-known fix but ActionController::API has no cookies, no CSRF, and a few other surprises waiting on the first commit.

Jul 30, 202613 min readsecurity
An old key being lifted off a hook on the wall and locked into a wall safe.

CSP nonces vs. 'unsafe-inline': the silent override that broke our admin UI

A nonce and 'unsafe-inline' in the same CSP directive: the browser silently drops 'unsafe-inline' by spec. Debugging a policy that quietly broke production.

Jul 30, 202610 min readsecurity
Two locks side by side on a door, only one is actually engaged. The other is decorative.

Three Ways VCR Cassette Recording Lied to Me

Three vcr recording behaviors that never raise an error: the config beats the CLI flag, ambient traffic gets taped, and re-records append instead of replacing.

Jul 15, 20265 min readVcr
Three ways VCR cassette lied to me

Cross-provider LLM failover without losing observability

Every LLM provider goes down eventually, so the obvious move is to retry against another one. The naive rescue-and-retry works until your bill spikes and the logs can't tell you how often failover fired or what it cost. Here's the version that keeps the receipts.

Jul 15, 20267 min readLlm
Cross-provider LLM failover without losing observability

How a Private Draft Can Hide Your Live Portfolio From Google

A published portfolio — complete, polished, exactly what search engines want — quietly vanished from Google. The culprit wasn't the live page at all. It was a private draft nobody could see, plus a one-line assumption in our SEO gate that counted it as a duplicate. A short debugging story about canonical URLs, sensible defaults, and the danger of de-indexing both copies of a tie.

Jul 15, 20266 min readEngineering
Showcify blog — a private draft portfolio casting a noindex shadow over a live one