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.
-
The vocabulary, which the code uses everywhere. A take is not a segment, and the difference explains a surprising amount.
-
A single action followed from a tap to somebody else watching, through all seven layers.
-
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.devis 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.