WorkBook a call

Scheduled messages

Until Then

Until Then lets you write a letter or record a voice or video message today and have it emailed to the people you choose on a date you set, even years from now.

Visit until-then.cc
Built for
People leaving something personal for a future moment: a child's 18th birthday, a wedding, a first day, or a time they will not be there for.
Our role
Product, brand, design, full-stack build and launch
Stack
Next.js, Neon Postgres, Stripe, Cloudflare R2, React, TypeScript, Drizzle ORM, Better Auth, Resend, WebCodecs, Tailwind CSS, Vercel
The Until Then home page: the until then wordmark and the line Messages that arrive when you cannot, over soft pink clouds

The problem

Why Until Then exists

Email and messaging only send now. There was no simple, trustworthy way to seal a heartfelt message, especially a recording, and know it will reach the right inbox on the right day, possibly decades later.

The person receiving it should not need an account, an app or a password. And a message that waits years has to survive changing email addresses, large video files and a delivery system that cannot afford to send twice or not at all.

The product

What we built

Until Then is a calm, three-step app: write or record, choose who and when, and it arrives on the day. Written letters are free forever; voice and video messages are a one-time payment, with a lifetime option for people who plan to send many.

Each recipient gets an email on the day and a private page that is only theirs. The sender hears when it has been delivered and sees when each person opened it. After an open window the sender chooses, the recording is deleted for good.

  • A letter, a voice or a face

    Written, voice or video messages of up to ten minutes, recorded in the browser or uploaded, with written words alongside any recording.

  • Scheduled to the minute, years ahead

    Pick a date, time and time zone up to 100 years out, with presets for one, five, ten and eighteen years.

  • Nothing for recipients to install

    No account, app or password. Each recipient gets their own unguessable link to a page made for them.

  • Delivery and read receipts

    The sender gets a delivery confirmation and can see when each person opened their message.

  • An open window, then gone

    The sender picks how long a recording stays open, from one day to a week. After that it is deleted from storage, not just hidden.

  • Free to write, pay once to record

    Letters are free and unlimited. Recordings are a one-time Stripe payment per message, with no subscription.

Screens

A closer look

A delivered Until Then message as the recipient sees it: the title Happy 30th, Max, a video ready to play, and a letter beginning Dear Max
The Until Then messages dashboard: video messages with their sealed or expired status, delivery date, created date and recipients, with search and filters

Under the hood

The engineering

  • Delivery that cannot send twice

    A cron job checks for due messages every five minutes, with Vercel Cron as an hourly backup. Each message is claimed with a single conditional database update, so overlapping runs can never double-send, and a partly failed send retries only the recipients still waiting.

  • Video compressed in the browser

    Before upload, video is re-encoded on the device with WebCodecs to 720p at about 1 Mbps, preferring H.264 and falling back to VP9. A ten-minute message lands at around 80 MB instead of a multi-gigabyte phone file, and the encoder only loads when it is needed.

  • Uploads straight to storage

    Recordings go from the browser directly to Cloudflare R2 through short-lived signed links, so large files never pass through the app server. The server then verifies what actually arrived, its size and its length, and deletes anything over the limit.

  • Payments that cannot be lost

    The Stripe webhook and the return from Checkout run the same idempotent function, so whichever arrives first seals the message. As a last check, the dispatcher refuses to send a recording that has not been paid for.

  • Protecting a domain that sends years later

    A bad address may not surface for years, and every bounce hurts deliverability. Addresses are checked for likely typos, throwaway inboxes and domains that cannot receive mail, and a signed webhook feeds bounces and complaints into a suppression list.

  • Next.js
  • Neon Postgres
  • Stripe
  • Cloudflare R2
  • React
  • TypeScript
  • Drizzle ORM
  • Better Auth
  • Resend
  • WebCodecs
  • Tailwind CSS
  • Vercel