Back to Projects

Transliminal

Live inline audio editing pipeline for personalized transliminal audio sessions

typescript temporal postgres ffmpeg ai

Transliminal

The Problem

Transliminal builds personalized audio sessions that help people change their minds. Literally.

Most self-help audio is generic. One track. Millions of listeners. Everyone gets the same thing. That’s not how change works.

Live Audio. For Each User. Every Time.

The audio can’t be pre-rendered. It has to be built on the fly. For you. Based on what you need right now.

This is hard because audio pipelines are slow. They’re built for batch processing. Not real-time. Not personalized.

No one gets the same audio. That’s the point.

The Stack

Postgres. TypeScript. Temporal. That’s it.

Postgres because state matters. Every session, every preference, every outcome—it all lives in one place. No eventually-consistent nonsense when someone’s mental health is on the line.

TypeScript because I need to move fast and catch mistakes before users do. Type safety isn’t optional when you’re building something people depend on.

Temporal because the work is long-running and the world is unreliable. More on that below.

AI Isn’t Optional

The audio needs to respond. To adapt. To know when something isn’t working and try something else.

AI provides the feedback loop. It reads the signals. It adjusts the script. It picks the right voice, the right pace, the right music bed.

This isn’t AI for AI’s sake. It’s AI because nothing else works. A static decision tree can’t handle the infinite variations of human need.

Third Party APIs Will Fail

They take too long. They time out. They lie about their latency.

You don’t know when they’ll respond. Or if. The voice synthesis API that worked yesterday will hang for 30 seconds today. The AI endpoint that promised 2-second responses will spike to 45.

The pipeline has to survive this. Most don’t. Most assume the happy path. I’ve watched too many systems crumble when a single API hiccups.

Temporal

I chose Temporal because I was tired of building the same infrastructure over and over.

Retries. Timeouts. State persistence. Failure recovery. Every serious system needs these. Every team rebuilds them badly.

Temporal gives you workflows that don’t die when servers do. Retries that actually work—with backoff, with limits, with visibility into what failed and why. State that persists without babysitting.

You fire it and forget it. Except you don’t forget it. You trust it. There’s a difference.

When the voice API times out at 3am, Temporal retries. When the server crashes mid-render, Temporal picks up where it left off. When I need to know what happened to a user’s session from two weeks ago, the history is there.

FFmpeg Does the Real Work

Every user gets custom audio. FFmpeg builds it.

The stretching. The layering. The crossfades between speech and music. The subtle tempo adjustments that make a 12-minute session feel like 8. That’s all FFmpeg.

FFmpeg is old. The documentation is brutal. The flags are arcane. But it handles every audio format, every edge case, every weird requirement I’ve thrown at it.

New tools promise easier APIs. FFmpeg promises it’ll work. I’ll take the ugly tool that works every time.


Work With Me

I take on a handful of projects each year. If you’re building something that needs this kind of infrastructure—real-time pipelines, resilient systems, AI that actually does something—I might be able to help.

Building something interesting? Let’s talk.