# How to Vibe Code Your Own Transistor.fm (and Stop Paying for It)

> Podcast hosting, distribution, and analytics platform

- Site: https://transistor.fm
- Category: Podcast Hosting & Analytics SaaS
- Verdict: **Solid side project** (68/100 vibecodeable)
- Estimated effort: 2-3 weeks part-time

## Verdict

You can build a functional single-user clone of Transistor's core hosting loop, but ongoing egress bandwidth costs and log-parsing analytics require disciplined engineering.

Building a podcast host is largely an exercise in database design, file storage, and XML string generation. The main trap for a solo developer is underestimating audio bandwidth costs—serving gigabytes of MP3 files will quickly incur cloud bills if you host files on standard object storage without a caching layer. Furthermore, generating valid RSS feeds that Apple and Spotify accept requires strict adherence to namespace specifications. Setting up an AI transcription pipeline with Whisper is straightforward, but crunching server logs for IAB-compliant download analytics requires background queue processing. Since this is for personal use, you can skip subscription billing and multi-tenant billing tiers entirely.

### What you can't replicate

- The 8-year domain authority and direct relationship with Apple Podcasts/Spotify ingestion queues
- The multi-million dollar ARR bootstrap history and existing network of 30,000+ active podcasters

## What it does

Transistor is a podcast hosting platform that allows creators and organizations to manage multiple shows, push RSS feeds to directories, track detailed analytics, host private podcasts, and generate websites.

### Core features

- Multi-show podcast account management
- Dynamic RSS feed generation and XML compliance
- Audio/video file upload and global CDN streaming
- Download analytics aggregation (filtering bot traffic and parsing user agents)
- Private podcast access control with unique RSS feeds per subscriber
- AI audio transcription via speech-to-text integration
- Automated podcast website generation
- Embeddable audio/video player widgets

## The business

### Pricing

- Starter: $19 / month
- Professional: $49 / month
- Business: $99 / month

### Funding

$0 raised.

Founded 2018.
Team size: ~6.

## The hard parts

- Managing massive egress bandwidth and storage costs for large MP3/HLS video files without blowing up server bills
- Aggregating massive web server logs into IAB-compliant download statistics while discarding crawler noise
- Securing token-authenticated private RSS endpoints that enforce subscriber list permissions
- Ensuring strict RSS XML compatibility so Apple Podcasts and Spotify never reject episode syncs

## How to vibe code Transistor.fm

### Prerequisites

- Node.js (free): Required for running the full-stack TypeScript environment.
- GitHub (free): Source code control and deployment automation.
- Cloudflare account (free): Hosting the Next.js application, storing audio files in R2 storage, and managing SQLite data on D1.

### Recommended AI tools

- Claude Code: Best-in-class terminal agent for scaffolding the database schema, API routes, and RSS generators across multiple files.
- Cursor: Ideal for inspecting and fine-tuning UI components, audio player controls, and Tailwind layouts.

### Stack

- Frontend: Next.js
- Backend: Next.js API Routes
- Database: Cloudflare D1 (SQLite)
- Auth: better-auth
- Payments: None (Personal use)
- Other: Cloudflare R2 (Audio/Video file storage and CDN), OpenAI API (Whisper STT for transcriptions), Vercel AI SDK

### Hosting

- Cloudflare (Hosting Next.js application, D1 SQLite database, and R2 media object storage): $0-5/mo

### Build guide

1. **Project Scaffolding & Database Schema** — Initialize the Next.js project with Tailwind CSS, configure Cloudflare D1 for SQLite, and set up the core database schema for shows, episodes, and subscribers.

```
Scavenge a new Next.js project using TypeScript and Tailwind CSS. Configure Drizzle ORM to connect with Cloudflare D1. Create the database schema with tables for 'shows' (id, title, description, slug, artwork_url, created_at), 'episodes' (id, show_id, title, description, audio_url, duration, file_size, published_at, season_number, episode_number), and 'subscribers' (id, show_id, email, token, created_at). Implement better-auth configured for local email/password authentication. Ensure all migrations run cleanly on D1 local dev. Add comprehensive validation using Zod for all form submissions and API endpoints. Make sure the project builds without errors before proceeding.
```

2. **Show & Episode Management Dashboard** — Build the authenticated admin UI to create podcast shows, configure metadata, and upload audio files to Cloudflare R2 storage.

```
Build a responsive dashboard using Tailwind CSS and shadcn/ui components for managing podcast shows and episodes. Create a shows listing view and a show creation modal. Inside a selected show view, add an episode management screen featuring a form to upload MP3 audio files directly to Cloudflare R2 object storage via presigned upload URLs. The episode form must capture title, description, season number, episode number, and audio file. Store the resulting R2 public URL, file size, and duration in the database. Include client-side validation for audio file formats and size caps up to 1000MB.
```

3. **RSS Feed Generation Engine** — Implement dynamic RSS XML generation endpoints compliant with Apple Podcasts and Spotify podcast specifications.

```
Implement a dynamic API route at `/shows/[slug]/feed.xml` that queries Cloudflare D1 for the show and its published episodes, and returns a fully compliant RSS feed string with proper XML headers (`application/rss+xml`). Include all required iTunes and podcast namespace tags: `itunes:author`, `itunes:summary`, `itunes:explicit`, `itunes:image`, `itunes:owner`, `itunes:category`, and `enclosure` tags with correct `url`, `length`, and `type` attributes for each episode. Ensure the feed correctly handles caching headers and returns error-free XML that validates against standard podcast feed validators.
```

4. **Audio Player & Public Podcast Website** — Create a standalone public landing page for each show featuring an embeddable HTML5 audio player widget.

```
Build a public podcast website view at `/[slug]` that displays show artwork, title, description, and a chronological list of published episodes. Create a custom HTML5 audio player component (`<audio>` element wrapped in Tailwind UI) featuring play/pause controls, a scrubber bar, time elapsed/remaining readouts, and playback speed adjustment buttons (1x, 1.25x, 1.5x, 2x). Also build a compact embeddable player view at `/embed/[episodeId]` designed to be inserted into external blogs or social media cards.
```

5. **Analytics Tracking & Bot Filtering** — Build a download tracking endpoint that intercepts audio requests, filters automated bots, and logs metrics.

```
Implement an episode audio proxy/tracking endpoint at `/episodes/[id]/listen` that records download events when users stream or download an MP3 file. Parse the incoming `User-Agent` header to filter out known bots, web crawlers, and duplicate requests within a rolling 24-hour window per IP address to maintain clean counts. Log valid downloads into a `download_events` table (id, episode_id, ip_hash, user_agent, country, downloaded_at). Build an analytics dashboard page for each show displaying total downloads, rolling 30-day trends, and top episodes using lightweight charts.
```

6. **Private Podcasting & AI Transcription Pipeline** — Add secure token-authenticated private RSS endpoints and an AI transcription pipeline using OpenAI Whisper.

```
Implement private podcast support: add a subscriber management screen where you can add subscriber email addresses to generate secure, unguessable token URLs (`/shows/[slug]/private/[token]/feed.xml`). Validate the token on feed request; if invalid or revoked, return 403 Forbidden. Next, integrate OpenAI Whisper API for AI transcription: add a 'Transcribe' button to episode management pages that sends the audio file to Whisper, receives the transcript text, breaks it down into timestamped paragraphs, and saves it to a `transcripts` table linked to the episode. Render this transcript interactively on the episode details page with clickable timestamps that seek the audio player.
```

### Cost vs paying

**Starting costs (one-time):**

- AI Coding Assistant Subscription: $20
- Total: ~$20 one-time

**Ongoing costs (monthly):**

- Cloudflare R2 & D1 Storage/Bandwidth: $0-5/mo
- OpenAI Whisper API Transcription Usage: ~$2/mo
- Total: ~$7/mo

- Paying for the SaaS instead: $19/mo (Starter plan)
- Build time: 25-35 hours
- AI tool credits: $20 (One month of Claude Pro / Cursor)
- Break-even: Never (built for personal learning and self-hosting)

## Sources

- [Transistor.fm Official Website & Feature Pages](https://transistor.fm)
- [High Signal Interview with Co-founder Justin Jackson](https://highsignal.io)
- [GetLatka SaaS Database - Transistor Profile](https://getlatka.com)