Floor 2 of 5 of the tower
Loudspeaker
A calendar that actually sends things, and says so when one doesn’t go out.
The problem
Creators and small teams post to several channels from several tabs. The timing lives in a spreadsheet, the approval lives in a chat thread, and “did that go out?” has no reliable answer.
The rules I set
- A post has one home and many destinations.
- Nothing goes out without an explicit schedule and an explicit approval.
- A failed send is visible and can be retried. It is never silent.
What I built
A phone-first app for writing, rescheduling and approving posts, and a scheduler that runs at the edge on Cloudflare. Supabase holds the posts, the schedule and each channel’s connection. Roles decide who may draft, approve or publish.
How it’s layered
- Client The mobile app: write, reschedule, approve.
- Scheduler Cloudflare fires each post at its time and records the result.
- Data Supabase: posts, schedules, channel connections, roles.
Decisions
- Every channel sits behind one adapter interface, so adding a channel doesn’t touch the scheduler.
- Sending is idempotent: a retry can’t publish the same post twice.
- Roles are checked where the data lives, not only in the app.
Where it stands
A demo system with invented channels and no real accounts. It shows how the pieces fit and where each failure would show up.
Supabase · Cloudflare · Mobile frontend · Auth