Forevermore
A platform for personalized animated gift worlds. Pick a scene, fill it with photos and a song, and send it like a message.
- Period
- 2026 — Present
- Stack
- Nuxt 4
- Tailwind CSS v4
- Supabase
- Cloudflare Workers
- Three.js
- Paddle
- Links
- getforevermore.co
Forevermore lets you send someone a small animated world. You pick a scene from a catalog (a fairground at night, a manor seen in cross-section, a coral reef), fill it with your own photos, a short letter and a song, and send it the way you'd send any message. The person on the other end opens a link on their phone. There's no account to create and nothing to install.
I design, build and ship it on my own, from the illustrations on the catalog cards to the Postgres migrations underneath.
How it's built
It's a pnpm monorepo with five apps and two shared packages. The apps are split by who's looking at the screen:
- a marketing site,
- an editor, where someone builds a gift and pays for it,
- a small viewer that shows the finished gift to the person receiving it,
- and two internal tools that no customer ever sees.
The customer-facing apps are Nuxt 4 on Cloudflare, with Supabase for Postgres, auth and file storage, and Paddle for payments. The worlds themselves are either Three.js scenes or 2D scenes built with SVG, CSS and GSAP. Both kinds read the same data contract, which is a big part of why a new editor feature doesn't mean updating dozens of worlds one by one.
What the write-ups cover
When I started, I assumed the hard part would be the animation. It turned out to be the plumbing: giving every gift its own subdomain, making sure the browser can never mark a gift as paid, and building worlds in a way that doesn't turn each new one into a from-scratch project.
Subdomains and permissionsA subdomain for every gift, and a Postgres permission model that keeps payment state out of the browser's reach.One payload, many worldsOne data contract for every world, videos that pretend to be photos, and 3D assets written as code.A marketing pipeline built as a state machineA separate content pipeline with compare-and-swap updates and every expensive dependency behind a seam.