sleepcast: bedtime audio with an inverted rubric
sleepcast is a small web product that serves bedtime audio: boring stories, sleep hypnosis, dull lectures, read slowly over synthesized noise. most content systems are optimized to hold attention. this one is optimized to lose it, and that inversion is why it's worth a note.
one calibration up front, because the rest depends on it. sleepcast is a working prototype, built out of one specific case of insomnia, using ordinary agent-assisted workflows. it has been validated on exactly one sleeper. nothing in the pipeline measures whether a listener actually falls asleep. what follows describes a mechanism and states a hypothesis about what the mechanism produces. it is not a success claim.
the rubric is upside down
the generation prompt is short, and the load-bearing line is shorter: "repetition is good. drift is good. resolution is bad."
content rubrics normally reward the opposite: hooks early, stakes rising, payoff withheld until the end, because retention is the metric and the metric is fed by tension. sleepcast's rules ban the entire toolkit: no cliffhangers, no loud action verbs, no excitement, sentences of eight to fourteen words, plots that "dissolve rather than concluding." the lecture category is instructed that the listener should lose the thread within minutes, and that this is the point.
success for a sleepcast track is a listener who stops listening. that breaks the usual measurement instinct built around holding attention, and the inversion propagates through the whole stack, from the script rules down to the analytics that do not exist yet.
the scripts are handmade
the llm script path exists and the current library does not use it. all fifteen tracks were written by hand and fed through the same synthesis pipeline via a seed script. the generator is wired and tested but sits idle: an ai audio product with an entirely handwritten catalog.
the handwritten scripts show the same pattern in miniature. the first versions were clean prose, and clean prose read as literary performance. a later commit rewrote every script in a rambling register: filler words, lists built and abandoned, tangents that drift and return. the style rule that survived is blunt: the goal is "friend rambling," not "literary prose." polish turned out to work against the goal, reading as more awake rather than less.
the voice kept performing
the documented failure of the build is the voice. text-to-speech defaults are tuned for the same economy the script rules reject, and the first synthesis pass proved it: default model, default settings, and the output sounded like a podcaster. polished, energetic, performing. technically flawless and completely wrong.
the fixes escalated through three levels. first, the numeric knobs: playback slowed to 0.85x, stability raised, style zeroed, pause tags injected at paragraph boundaries. the pauses met an immediate ceiling, because the provider documents that too many break tags destabilize the model, so silence, the one thing sleep audio wants most, had to be rationed. second, the scripts themselves were rewritten, as above, because no knob setting makes clean prose sound tired. third, the provider was swapped, and the trigger was not quality but a quota: the free tier ran below the cost of a single new track. the replacement model accepts natural-language voice direction where the incumbent offered only numbers, and the direction now in production reads like the core approach compressed to four lines. the voice is told to sound like "a tired friend telling a bedtime story at the end of a long day," to voice the scripted filler words rather than smooth them over, and finally: "do not: enunciate dramatically, raise pitch for emphasis, sound like a podcaster, perform."
a synthesized voice has to be explicitly instructed not to perform. default tts encodes performance the way default content rubrics encode retention, and the instruction against performing is the same move as "resolution is bad," applied one level down the stack. still open, stated plainly: long scripts synthesize as independent chunks concatenated raw, with nothing smoothing the seam, and no audio passes any quality check before shipping.
the mix refuses drama
the ambient beds under the narration are not field recordings. they are shaped noise generated by ffmpeg, and the generation script says so in its own comment: "they sound like noise because they are noise." the narration is not ducked dynamically over them, because sidechain ducking pumps, and pumping grabs attention. a fixed gain offset holds the bed quietly under the voice instead. the final mix is loudness-normalized to a broadcast target and ends in a six-second fade, so a track closes in silence rather than with an ending. every engineering choice in the mix is a subtraction.
open loop, no gate
nothing evaluates a track before it ships. the pipeline's only check is that the script is not empty; the finished row gets inserted as published. no draft state, no review, no banned-word pass, no length reconciliation against the requested duration. measured against the standard used elsewhere in these notes, explicit multi-axis evaluation, sleepcast runs as an unscored pipeline.
the outcome measurement exists only as a fossil. the database schema includes a completed flag on every play, anticipating exactly the signal that would score the product. nothing ever sets it. the player reports the start of playback and never the end. even the privacy policy promises completion tracking the code does not perform. and when the flag does get wired, it will invert like everything else here: a completed play is evidence of failure, because the listener who heard the fade-out was awake for it. mid-track abandonment is the success signal, currently indistinguishable from a closed tab. the product's central metric does not just go unmeasured. it points backwards.
the exit is documented
the site ships a page addressed to the listener it failed. it recommends leaving, names the human-hosted podcast the product openly imitates, a show running since 2013, and points there instead, free, with two further human alternatives listed after it. a product that routes dissatisfied users to its own inspiration is publishing its own failure condition in production.
slop is a rubric property
the tension is direct: sleepcast generates ai content, and generated content optimized purely to capture attention it hasn't earned (slop) is usually treated with skepticism. sleepcast isn't a carve-out from that so much as a different case. slop is generated content optimized to capture attention it has not earned. sleepcast's rubric optimizes the surrender of attention instead, which is why the same generation approach that produces sludge elsewhere produces something else here. the generator does not decide whether output is slop. the rubric does.
that said, the calibration cuts both ways: with no outcome measurement, "boring on purpose" is a design property, not a demonstrated result. a track can satisfy every rule and still leave someone staring at the ceiling.
the hypothesis
stated falsifiably: audio generated under an attention-inverting rubric puts listeners to sleep at rates comparable to the human-made genre it imitates. current evidence: one insomniac. validation would take wiring the completion flag, treating completion as failure and abandonment as provisional success, and correlating with return listening. until then, sleepcast demonstrates that the rubric can be inverted, not that the inversion works.
the prototype is live at sleepcast.pro. a track that woke someone up would be more interesting than agreement, and reports of that kind of failure were the ones worth hearing.