Skip to content

VlogRoulette

Every few days the roulette picks one person in a closed circle of friends. That person records loose clips on their phone; the phone edits the vlog by itself and premieres it to the circle for 24 hours. Then the roulette spins again.

No timeline, no filters, no editing anybody has to do.

If you are new

Read these three in order. Together they take about twenty minutes and they are the ones that cannot be worked out by reading the code.

  • Glossary

    The vocabulary, which the code uses everywhere. A take is not a segment, and the difference explains a surprising amount.

  • One trip through the system

    A single action followed from a tap to somebody else watching, through all seven layers.

  • Things that will confuse you

    Every entry cost real hours. The decoder that has already rotated your frame; the builder that warns and then ships a broken app.

Then Decisions, for when something looks arbitrary.

The shape of it

flowchart LR
    P[Phone<br/>records and edits] -->|"presigned PUT"| R2[(Cloudflare R2)]
    P <-->|"JSON only"| API[API on Fly]
    API --- DB[(Neon Postgres)]
    R2 --> CDN{{Public domain}} --> V[Everyone else watches]

    style R2 fill:#f38020,color:#fff
    style DB fill:#00e599,color:#000

The heavy work happens on the device and no video ever passes through the API. That one constraint explains most of the architecture, and all of the difficulty.

What is not true yet

  • iOS has never been compiled. The Swift half lags Android and needs a paid Apple Developer account before it can even be built.
  • Nobody outside the author has used the app. A notification reaching another person's phone is still unverified.
  • r2.dev is not a production domain. Cloudflare rate-limits it.
  • Nothing ever deletes a vlog. Storage only grows.

Source: a private repository. Code and documentation in English; what the user sees in the app is in Spanish.