The tools, and where they run
Current, fast tools for each job. Dependencies always track their latest stable versions, and every product runs on Cloudflare's network, close to the people using it.
Languages and frameworks
One language on the web, a native one on the Mac.
- TypeScript7
- Every web project, type-checked by the new native compiler
- React19
- Sites, dashboards and games
- TanStack
- Start, Router, Query, Form and Table
- Svelte5
- Lean browser tools with heavy media work
- Expo · React Native
- LexiLoop on the web, Android and iOS from one codebase
- Swift
- Ribbon, with AppKit and SwiftUI
Interface
Accessible primitives, dressed in each product's own design system.
- Tailwind CSS4
- Utilities on top of design tokens
- Radix · shadcn/ui
- Accessible components, restyled from scratch
- OKLCH tokens
- Colour that stays even across light and dark
- Commissioner · Literata
- Self-hosted variable fonts with full Vietnamese
- Motion
- Interruptible animation in games
- Lucide
- One consistent icon set
In the browser
What lets hours of audio and video be processed without uploading a byte.
- WebCodecs
- Hardware encoding and decoding, with WASM fallbacks
- Web Audio
- Mixing, loudness metering (EBU R128) and limiting
- Mediabunny
- MP3, AAC, FLAC, WAV and MP4 muxing
- WebGL2
- Image effects, with a WebGL1 fallback
- OPFS · IndexedDB
- Long exports and autosaved projects
- Web Workers
- Heavy work off the main thread
Build and quality
The fastest tools available, so checks run on every change.
- Vite8
- Builds and dev servers, on Rolldown
- pnpm12
- Workspaces, with one version of each dependency
- oxlint · oxfmt
- Linting and formatting in Rust
- Vitest
- Unit and integration tests
- Playwright
- Screenshots at three widths, layout checks
- Lighthouse
- Performance, accessibility and SEO audits
Servers and data
Small, typed services that run at the edge.
- Hono
- APIs on Workers
- Drizzle ORM
- Typed SQL and migrations
- Zod
- Validation at every boundary
- Passkeys
- WebAuthn sign-in, no passwords
Content and discovery
Pages that people, search engines and AI agents can all read.
- Prerendered HTML
- Every page is static and readable without JavaScript
- Markdown twins · llms.txt
- A Markdown version of every page for agents
- JSON-LD
- Structured data, validated in tests
- unified · Shiki
- Markdown to HTML, code highlighted at build time
- Takumi
- Social preview images, rendered at build time
On Cloudflare
The domain was bought through Cloudflare, so DNS, certificates and hosting live in one account. Each product is its own Worker with its own address, deployed and rolled back on its own.
How chabulab.com is wired
A request reaches Cloudflare's nearest data centre, then the Worker that owns that address. A route on a path always wins over the Worker that owns the whole host, which is how the blog lives inside chabulab.com and each game inside the games hub.
chabulab.comThis site and the stashStatic Assetschabulab.com/blogs/*The blog, its own WorkerStatic Assetsribbon.chabulab.comRibbon's siteStatic Assetsribbon.chabulab.com/v1/*Licence APID1Rate Limitinggames.chabulab.comGames hubStatic Assetsgames.chabulab.com/four-fold/*Fourfold, its own WorkerStatic Assetslexiloop.chabulab.comLexiLoop on the webStatic Assetstools.chabulab.comTools hubStatic Assetstools.chabulab.com/convert/*File Converter, its own WorkerStatic Assets
Cloudflare products in use
- Registrar · DNS
- The domain, at cost, with DNS on the same network
- Workers
- Every site and API, deployed on its own
- Static Assets
- Prerendered pages served from the edge
- D1
- SQL for licences and audit logs
- Rate Limiting
- Caps on every public API
- Email Routing
- hello@chabulab.com and friends
- Analytics Engine
- Cookieless traffic insights, people and bots apart (being switched on)
- Workers Logs
- Observability for every Worker