System architecture overview — how all components connect
Updated Jun 29, 2026 · 2 min read
A high-level explanation of the three-tier architecture powering YT Transcriber and how data flows through the system.
The three-tier architecture at a glance
YT Transcriber is built on a three-tier architecture:
- Tier 1: Nginx — The reverse proxy and load balancer. All internet traffic enters here.
- Tier 2: App — One or more Next.js application containers. Handle web requests, API calls, and business logic.
- Tier 3: Data — Redis (cache and queue) + Supabase (PostgreSQL database). Persist all application state.
How a transcript request flows through the system
When a user pastes a YouTube URL and clicks Transcribe: 1. The browser sends a POST request to /api/transcribe 2. Nginx receives the request and routes it to the least-busy app container 3. The app container validates the URL and checks the user's credit balance in Supabase 4. If valid, the job is pushed onto a Redis queue 5. A background worker (also inside the app container) picks up the job and calls the YouTube captions API 6. The completed transcript is stored in Supabase 7. The job status in Redis is updated to "complete" 8. The user's dashboard polls /api/status and sees the "Ready" badge
What the Nginx layer does
Nginx acts as the single entry point for all traffic. It:
- Terminates SSL (HTTPS)
- Routes requests across multiple app containers using round-robin with health checks
- Serves static assets directly from disk (faster than hitting the app)
- Provides rate limiting to protect against abuse
What the App layer does
Each app container runs Next.js in production mode. The containers are stateless — they hold no user data themselves. Any data they need comes from Redis (for fast in-memory lookups) or Supabase (for persistent storage). Because the app tier is stateless, new containers can be added or removed without any user impact.
What the Data layer does
Redis stores session data, job queues, and rate-limit counters. Supabase (PostgreSQL) stores all persistent data: user accounts, transcripts, folders, share links, billing records, and audit logs. Supabase also provides Row Level Security (RLS) policies so that even if the application layer has a bug, users cannot access each other's data.
Was this helpful?