Set up Vercel Blob
Somewhere for audio to live. Created, connected, empty.
The last ticket of the Scofti launch. Everything after this belongs to a different project.
Audio does not go in the repository. Media bloats every clone forever, and the deployment bundle is the wrong home for a file nobody needs at build time. SC-5 settled that it lives in a blob store; this is standing one up.
Not before there is a file
Creating the store early is the same mistake as the podcast page: infrastructure standing ahead of content, going stale while it waits. It takes minutes when there is a first episode to put in it, and nothing is unblocked by doing it sooner.
Images stay where they are. One JPEG served through next/image from public/
is free, fast, versioned with the code, and survives changing providers. That
changes when images get numerous or large enough to bother a clone, not before.
The part that is hard to undo
A blob URL that ends up in a podcast feed is permanent. An <enclosure> URL
gets copied into other people's podcast databases, and it cannot be quietly
changed later. So the store is chosen once, with the volume and bandwidth
actually known — which is another reason not to pick it today.
Worth checking before committing: what it costs at real episode sizes, whether it serves range requests so a player can seek, and whether URLs stay stable when a file is replaced.
Done when
A file can be uploaded, fetched over a stable URL, and played in a browser with seeking that works. Not when the store exists — when audio comes out of it.
Closed — the store exists
scofti-blob is created and connected to the project, which added its
environment variables and triggered the redeploy that makes them real. The site
came through unchanged.
It is empty, and nothing in the codebase reaches for it yet — no
@vercel/blob, no upload path. That is the right state to leave it in.
The done-condition written above was "audio comes out of it," and that is not met. It is being closed anyway, deliberately: there is no audio to put in it, and holding the last launch ticket open waiting for a podcast that has its own project would make this a reminder rather than a task. The store was the launch piece. What goes in it is not.
Still undecided, and on purpose: whether published audio is public or private, and whether that means two stores. Private suits drafts and masters; anything in a podcast feed has to be fetchable anonymously and forever, because that is how podcast apps read an enclosure. Nothing forces that choice until the first upload, and a future ticket will make it with real files in view.
That is the last ticket of the Scofti launch.