From 073bcb95a646902f75d1f29b651d5ba96f22fcb5 Mon Sep 17 00:00:00 2001 From: Alex Price Date: Mon, 20 Jul 2026 14:43:32 +0100 Subject: [PATCH] docs: link "Boring on purpose" article from README Add a callout in the "Why Billet?" section linking to the published write-up on why Billet uses a server-rendered architecture. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 96af801..6ce292d 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,8 @@ Billet takes the opposite approach. It's a single-instance server-rendered app w This isn't a limitation. It's a deliberate architectural choice that plays to AI's strengths: strong type information to reason about, functional input/output patterns, and a feedback loop (write code → run tests → see results) that works in seconds, not minutes. +> 📝 For the longer story behind why Billet works this way — the fat front-end, RLS, and the case for a real server — read [**Boring on purpose**](https://alexprice.dev/writing/boring-on-purpose). + ### Capture your backpressure AI agents work best when they get told they're wrong immediately. Not by you — by the toolchain. Type errors, failing tests, lint warnings, broken builds — that's [backpressure](https://latentpatterns.com/principles), and it's the single most important thing you can invest in when working with agents. Every automated check that catches a mistake is one less time you have to context-switch back in to fix something a machine should have caught.