Tomás Reyes
Ships performance budgets like love letters. Has never once said "it works on my machine" without irony.
- Role
- Head of Engineering
- Based
- Melbourne
- In the journal
- 35 articles · 3 case studies

Meridian Climate: making council emissions data impossible to ignore
A scrollytelling climate data explorer that turned council emissions spreadsheets into a story residents actually read — and acted on.

Hearthbrew: the subscription club that retained like a magazine
A specialty coffee roaster's subscription club rebuilt around skip-when-you're-ahead honesty and packaging-as-content. How churn fell without a single retention trick.

Brumby Air: booking a Cessna seat like ordering coffee
A booking engine for a 14-route outback airline: weight-limit honesty, calendars that admit empty days, fare comparison, and pages that survive rural connections.
Experiments that don't shift the layout
A/B testing without layout shift: server-side assignment, experiment flags that never leak into the DOM, metric integrity, and the true cost of visual editors.
Monorepo or not? A studio's decision framework
Monorepos solve code-sharing and coordination problems most studios don't have, at tooling costs they don't predict. When we say yes, and what we do when we say no.
View transitions in the wild: lovely, fragile, worth it
Eight projects in, we still love the View Transitions API — with our eyes open. Where it shines, how it fights your router, and the tiers that keep it honest.
Syntax highlighting with zero runtime
Syntax highlighting with zero runtime: tokenise at build time, theme code with design tokens, keep language support honest, ship an accessible copy button.
WebSockets vs SSE: a realtime guide without religion
An honest guide to realtime transport: WebSockets vs SSE vs polite polling. Lifecycle, reconnection with backoff, presence, scaling and mobile battery realities.
State machines for checkout and onboarding flows
Multi-step flows rot into boolean soup. Explicit state machines fix back-button bugs and analytics blindspots — with a worked checkout example.
Errors are design material: engineering graceful failure
Failures are part of the product, not exceptions to it. Typed errors, retry policies, circuit breakers and writing the failure copy in the same sprint as the happy path.
Bulk actions: power without the footguns
Bulk operations done safely: selection across pages, previewing effects before applying, undo vs confirmation, progress states and permission boundaries.
Designing APIs that frontend teams don't route around
API design judged by its frontend: pagination contracts, error shapes you can build UI on, BFF vs direct, honest versioning, and the endpoint autopsy.
Fine-tuning vs RAG vs prompt: a decision guide
Prompt, retrieve or fine-tune? The decision tree we run with clients — real cost curves, data needs, iteration speed and maintenance burden.
Auth for content and commerce: passkeys, magic links, and the recovery flow
Passkeys, magic links, or passwords with rules? How we choose auth for content and commerce sites — and the account-recovery flows everyone forgets to design.
Rolling your own markdown pipeline (and knowing when to)
When MDX stops paying rent: deterministic rendering, frontmatter validation at build time, link auditing of prose, and owning your content format end to end.
Frontend observability for teams without an SRE
Frontend observability without an SRE: the three signals that matter, sourcemaps done privately, and the dashboards a small team will actually open.
Web workers for real work: what we move off the main thread
Web workers aren't a WebGL party trick. CSV parsing, fuzzy search, image pipelines, zipping exports — how we move real work off the main thread without the plumbing pain.
Choosing a framework without the fashion show
How to choose a web framework honestly in 2026: content site vs app, team skills, hiring, SSR needs, ecosystem gravity, exit costs — plus our decision memo.
Service workers: an honest production guide
Service workers are the most powerful and least forgiving API in the browser. Cache strategies by content type, update flows, offline fallbacks and production debugging.
Playwright suites that survive the redesign
How to write browser tests against intent, not pixels: accessible locators, honest page objects, visual diff quotas, and keeping the whole suite under ten minutes.
Design tokens that survive contact with engineering
Most token pipelines rot within a year. Here's the architecture we use at Brassfern to keep design decisions flowing from Figma to production without drift.
Error boundaries: designing UI that fails gracefully
Error boundaries are a product decision, not a try/catch. Granularity, fallbacks that save user work, retry semantics and reporting that actually gets read.
Streaming SSR: practical notes from shipping it
Streaming SSR in practice: what actually streams, where Suspense boundaries help or hurt TTFB, hydration ordering, mid-stream errors, and how to measure it.
The one-day performance audit (a playbook)
Run a credible performance audit in a single day: lab vs field data, Lighthouse and WebPageTest against CrUX, and an effort/impact findings template that ships.
Dependency hygiene: the boring audit that saves the launch
Client codebases rot at the package.json line. Audit cadences, update windows, vendoring decisions, and the licence review nobody does until procurement asks.
Supply-chain security for JS teams (without the panic)
A calm, runnable supply-chain security practice for JS teams: lockfile hygiene, dependency cadence, audit triage and provenance — no fear-mongering.
Bundle budgets: the 170kb rule and how we hold it
Our rule: 170kb of compressed JavaScript per route, or the PR explains itself. How the budget works and where we spend bytes on purpose.
Realtime collaboration tech: CRDT, OT, or a polite refresh
Choosing a collaboration stack honestly: OT versus CRDTs, Yjs in production, presence as a feature, and when a polite refresh beats a sync engine.
Transactional email is a product surface: engineer it like one
SPF, DKIM and DMARC without tears, email HTML that survives Outlook, suppression lists, and why templates belong in CI — email as a product surface.
CSV import and export: the UX of tabular handoffs
CSV imports that survive real spreadsheets (mapping, previews, error files people can fix) and exports people can trust — stable schemas, honest metadata.
A preview environment for every pull request
Per-PR preview environments cost less than the meetings they replace. How we build them: seed data, infrastructure on a budget, and demos as the default.
The headless CMS migration runbook
A field-tested runbook for migrating to a headless CMS: content inventory, model mapping, redirect strategy, preview parity, and the cutover weekend checklist.
Core Web Vitals in the field: budgets that survive sprints
A practical Core Web Vitals program: LCP element archaeology, INP triage, CI-enforced budgets, and real-user monitoring on a shoestring. Recipes that work.
Islands architecture: sprinkle, don't soak
When islands beat a full SPA: hydration costs, interaction latency budgets, the pragmatic hybrid pattern we use on content-heavy sites, and the traps.
A testing strategy that ships: what to test, what to skip, what to delete
Our testing pyramid, rebuilt for reality: contract-first unit tests, a thin layer of Playwright journeys, flake budgets, and a CI bill we defend monthly.
Edge rendering: an honest guide for content sites
What edge rendering actually buys a content site, what it quietly costs, and the decision framework we run before moving a single route to the edge.
Estimating: how studios price and how to read a quote
Demystifying software estimates: scope decomposition, risk loading, fixed price vs retainer maths, variation clauses, and the questions buyers should ask.
Design handoff that doesn't decay in a sprint
Why handoffs rot and how we stop it: living tokens, component specs over pixel mocks, motion specs with real easing values, annotations that survive sprints.