How this blog is powered

This blog is the dogfood — every WAVE primitive running on itself. Voice that narrates the words you're reading, an edge that serves them, and a pipeline that keeps the two in sync. Here's the whole stack, end to end.

0:00
0:00
WAVE Voice

Most company blogs are a CMS bolted to a theme. This one is a product demo you can read. Every post is narrated by WAVE Voice, served from the edge, kept fresh by a pipeline, and wired so that everything connects to everything else. If a primitive works here, it works for a customer — that's the whole point of dogfooding.

The thesis

The blog runs on the same platform we sell: WAVE Voice for narration, Cloudflare Workers at the edge, and an agent-payable API behind it. Nothing here is a special case.

The voice

Press play on any post and a real voice reads it — four narrators to choose from, at 192 kbps. That's WAVE Voice, the same synthesis engine we expose as a product. The player is custom: a scrubber, speed control, a live waveform that dances with the audio, and a ring on the active narrator that pulses with their actual loudness.

The pipeline that keeps it honest

Here's the part that matters for a real product: when the words change, the audio has to change too — but only then. Every post's spoken text is hashed. A change to the text changes the hash, which marks exactly that post stale, which re-synthesizes exactly that post — and nothing else.

So we never re-spend a token on audio that didn't change. The same hash drives the cache-busting version on every media URL and the dateModified that search and answer engines read — one signal, propagated everywhere.

Why this is the reusable bit

A customer narrating a knowledge base has the same problem: keep the audio in sync with the text without re-rendering the world on every edit. This freshness gate is the answer — and it's a few hundred lines, not a service.

Read along, two ways

The narration ships with word-level timestamps, so captions and a karaoke highlight track the voice exactly. Scroll past the player while it's talking and the captions follow you to a dock at the bottom of the screen — with the waveform and a speed control — so you never lose your place.

It's all connected

Mentions of WAVE products and protocols auto-link to where you read more. NDI, WebRTC, x402 — the first time each appears, it becomes a link to the post or spoke that explains it. Tags filter the index. Nothing is an island.

How a page tells an agent what it is

Every post embeds BlogPosting JSON-LD with an AudioObject (the narration) and the full transcript, plus an llms.txt and a machine-readable feed. A crawler or an answer engine can read the post, hear it, or quote the transcript — without scraping.

The edge

The whole thing is one Cloudflare Worker. Pages render at the edge; the multi-voice audio lives in R2; the anonymous view/listen/download counts live in a single strongly-consistent Durable Object — no cookies, no accounts, just counts. WAVE Dispatch even summarized each post on WAVE's own local inference to produce the "key moments" in the sidebar.

Build the same thing

Everything here is a primitive you can call. Narrate your own content with WAVE Voice; move video over any transport through one API; let an agent pay per call.

Narrate your own content Move video over any transport

The blog is the proof. psst — try the Konami code