An independently designed real-time media platform
Wedwi
A digital wedding guestbook for recording audio and video messages in the browser, compiling them, and showing progress in real time.
my role: Designer and engineer
- TanStack Start
- Cloudflare Workers
- D1
- R2
- Durable Objects
- Containers
- WebSockets
- FFmpeg
- Turborepo
The short version
Wedwi is a digital wedding guestbook. Guests can record audio and video messages in the browser, upload them without installing an app, and see the finished memory take shape.
I designed and built the product independently, which meant owning the browser experience, backend, data, media pipeline, real-time updates and infrastructure.
Recording in the browser
The guest experience starts with browser audio and video recording. Keeping that flow simple matters: people are at a wedding, probably on a phone, and definitely do not want a setup guide.
Media uploads use presigned URLs so large files can travel directly to R2 without turning the application server into an expensive middleman.
Compiling the result
Uploaded media needs more than storage. Cloudflare Containers run FFmpeg to process and compile recordings into the final output.
That work happens away from the request that started it, so the interface can stay responsive while heavier media processing continues in the background.
Real-time progress
Durable Objects coordinate processing state and WebSockets deliver live progress updates to the browser. Guests and organisers can see what is happening without repeatedly refreshing or polling the backend.
The platform
The application uses TanStack Start with Cloudflare Workers, D1 for relational data, R2 for media and Turborepo to organise the wider codebase.
It is, admittedly, a fairly unreasonable amount of Cloudflare for a wedding guestbook. It also creates a clean separation between the interactive product, durable state, object storage and compute-heavy media work.
What I took from it
Owning the whole product makes trade-offs impossible to hide. A clever backend does not matter if recording is awkward, and a polished interface does not matter if a video disappears halfway through processing.