Skip to main content

Writing

2026

Deploying Swagger UI for Bacen's Pix API

A pull request to the Brazilian central bank that was closed without ever being merged, and shipped anyway. Rendering an OpenAPI spec as docs, from CI.

· 2 min read

What My Thesis Assumed About Hardware

Five years on from my paper about coordinating jobs across weak devices. The hardware assumption aged badly. The reliability assumption did not age at all.

· 3 min read

Cutting Backend CI by 76%

A Django test pipeline went from a median of 18.5 minutes to 4.5. Almost none of it came from making tests faster. The last part was a connection budget.

· 6 min read

One Source of Truth for Fair-Usage Limits

A pricing policy is only as real as the number of systems that agree on it. Nine published usage bands, one table, and three codebases reading it.

· 4 min read

queryFn vs select: One Transform, Two Consumers

Transforms in select look textbook until route loaders start prefetching. Why the transform moved into queryFn so observers and loaders read the same shape.

· 3 min read

Designing URLs for a Printed QR Code

A QR code printed in a book can never be reprinted. How that constraint shaped number-keyed routes, an owned domain, and QR codes pinned to a hardcoded origin.

· 2 min read

Rebuilding my personal site

A short tour of the latest rebuild: a static-first site with no client framework, reduced motion as a real signal, and most of the work shifted to build time.

· 3 min read

Audit Scripts for a Design System

How a style guide became a suite of audit scripts behind one umbrella command, grouped by what they protect, with parallel execution and an explicit drift-resolution workflow.

· 3 min read

Test Layers for a Design System

Type tests, an API surface snapshot, story-level token-cascade guards, and property tests. Layered testing that catches the failure modes a design system actually has.

· 3 min read

Caching Sharp-Processed Images in Static Builds

How I cut documentation build times by hashing image inputs, committing the preprocessed webp outputs, and skipping image work on every CI run.

· 3 min read

2025

Replacing Astro Image for a Documentation Site

Why I removed Astro's built-in Image component from a docs site and replaced it with a thin custom wrapper, and the lesson about when generic abstractions cost more than they save.

· 3 min read

Custom markdownlint Rules for Docs Conventions

How I encoded the docs site's actual conventions into project-specific markdownlint rules so contributors stopped having to remember them.

· 3 min read

Building an OpenAPI Code Generation Pipeline with Kubb

How I automated TypeScript type and Zod schema generation from OpenAPI specs using Kubb, with scheduled CI runs and team notifications for breaking changes.

· 4 min read

Building Type-Safe APIs with OpenAPI

How the dashboard API integration layer became its own product: OpenAPI as the single source of truth across multiple consuming teams.

· 4 min read

A Practical Prefetching Strategy with TanStack Query and Router

How I implemented intent-based preloading, route-level prefetching, and pagination prefetching to make a dashboard feel instant.

· 4 min read

Encoding Pricing Rules Without Forking the UI

How I moved pricing math out of components and into the plan definition so a marketing site could absorb new products and billing models without UI changes.

· 3 min read

Mocking the API Contract Before Implementing It

How shipping the API contract first, a live endpoint serving a realistic OpenAPI payload, removed the synchronization tax between backend and frontend.

· 3 min read

Proxy Patterns for Multi-API Dashboards

How I designed a proxy layer to unify multiple APIs with different auth, error shapes, and data models behind one type-safe surface in a React dashboard.

· 3 min read

2024