Build with AI

How to build an AI subtitle generator for your business with Claude Code

Stop paying by the minute for captions. Describe the studio you want in plain words and Claude Code builds it: transcription that runs in each visitor’s own browser, a timeline where lines are fixed and styled, translation on your own AI key with a spending limit, and exports as subtitle files or a captioned video.

September 2026 · 44 min read · Updated September 2026

Claude Code

$ Build a subtitle studio: people upload a video, it is transcribed in their own browser into timed captions, they fix and style the lines on a timeline, translate them, and export a subtitle file or a captioned video. Each person sees only their own videos.

  • Transcription running in the browser
  • Editor and translation built
  • Ready for you to review
You describe it, Claude Code builds it
Start here

Overview & core architecture

An AI subtitle studio turns a spoken video into timed, editable, translated captions, and it does the expensive part, the transcription, on the visitor’s own computer rather than on a server you pay by the minute.

The usual version of this is a service. You upload a video, a server somewhere listens to it, and captions come back with a bill attached, priced by the minute of audio. Every product in the comparison further down works that way, and the minute is the line they all meter.

This version downloads a speech model into the browser once and runs it there, in the background, while the page stays usable. A minute of transcription costs you nothing, and only the finished text and the video the person chose to upload reach your database. What you build instead is everything around that moment: a library, a timeline editor, caption styling, translation through your own AI key, and an export that produces a subtitle file or a captioned video.

The honest trade is written into every page of this guide. The model that runs in a browser is the smallest one, its accuracy sits below what the rented services return, and the first run downloads it, which the app says can take thirty to sixty seconds. A larger model buys accuracy at the cost of a longer download. Deciding where you sit on that line is the first decision below.

The timeline editor is the product

A raw transcript is a start, and nobody ships one. The screen where a person drags a caption to the right second, splits a line that runs too long and sees the result over the video is what they judge the app on, and it is where most of the build time goes.

Transcription minutes cost nothing

The speech model runs on the visitor’s own processor, so a thousand hours of video transcribed this month costs you the same as one. What you pay for is storage for the videos people keep and the translation calls that leave your app.

Translation is the only metered line

Translating a finished track goes through your own AI key at the provider’s per-token price, a few cents for an hour of speech at the default model’s rates. It is the one line that grows with use, so the app logs every call and caps each account.

What you are building

Essential subtitle studio components

Six building blocks make up the studio, and the transcription is the one to prove first. Each is something you can ask your AI coding tool to build or rework in plain words.

01

In-browser speech-to-text

A speech model that downloads once and runs on the visitor’s own machine, in the background, so the page stays usable while it listens. It returns lines with a start and an end time, which is what everything else on this list is built on. No server hears the audio and nobody bills you for the minute.

02

Timeline caption editor

Every line on a track under the video, draggable to retime, editable in place, splittable when it runs too long and mergeable when it is choppy. Undo and autosave, because a caption editor is used for hours at a stretch.

03

Caption styling & live preview

Font, size, colour, background and position, shown over the actual video rather than in a settings form. What the person sees here is exactly what the export produces.

04

One-click translation

The finished track sent to your AI provider a batch of lines at a time, with every timestamp kept, and progress shown while it runs in the background. Each translated track becomes its own export.

05

Subtitle file & captioned video export

Three plain subtitle formats for uploading to a video platform, and a captioned video recorded in the browser for the platforms that cannot take a separate file. Export is where a subtitle tool either feels finished or does not.

06

Video library, quotas & admin console

Every upload with what has been done to it, hourly limits per action so one account cannot run up your translation bill, a demo account that wipes itself, and an admin view over users, videos and usage.

Build vs buy

Own the subtitle studio or rent it by the minute

Most subtitle apps charge you based on audio minutes processed. They set monthly limits, charge per team member, and bill extra when you run out. Running the AI inside the user’s browser removes these minute limits entirely instead of just reducing them: that is the main difference to keep in mind.

Build your own

Own your platform completely. Transcription runs on your users’ devices, videos stay in your own database, and your only recurring cost is optional translation. With modern AI coding tools, building this takes a few weeks instead of months.

  • Zero minute costs: Transcribe unlimited audio because processing happens directly on the user’s device
  • Cheaper translations: Pay wholesale rates for AI translations and easily set monthly spending caps per user
  • 100% custom branding: Keep your own brand, logins, and design without third-party restrictions
  • Full feature control: Decide your own caption styles, export formats, and limits without paying for plan upgrades
  • Complete data ownership: Store videos and captions in your database with full control over privacy and deletion
  • Total code freedom: Own all source code outright and host your application on any server you choose

Rent the minutes

Rev · Descript · Kapwing · Happy Scribe

Renting an existing tool gives you higher accuracy, an editor ready to use today, and automatic software updates. However, you pay a fee for every minute of video processed, plus extra monthly fees per user.

  • Higher accuracy out of the box: Powerful cloud models offer higher accuracy with no initial setup or load time
  • Ready to use today: Launch immediately, with options for human proofreading when accuracy matters most
  • Zero maintenance: External companies handle all system updates, model upgrades, and bug fixes
  • Pay-per-minute pricing: Every provider meters audio minutes, and many charge additional fees per user seat
  • Use-it-or-lose-it plans: Monthly minute allowances expire whether your team actually uses them or not
  • Restrictive free tiers: Free plans only cover occasional usage, forcing active teams onto expensive paid tiers
RevFree for "45 AI transcription & caption minutes/month (English only)", then Essentials at "$25.49 per seat/month" billed annually or "$29.99 per seat/month" monthly, with "5,000 AI transcription & caption minutes/seat/month"

The clearest example of the seat-plus-allowance meter. A single person captioning under 45 minutes a month never pays, and a team pays per seat every month whether or not anybody captioned anything. The Pro tier is "$47.99 per seat/month" annually for "10,000 verbatim AI transcription minutes/seat/month", and human captions start at "$1.99 /min.", which is the rate to compare the browser model against when accuracy is the whole point.

rev.com · checked September 2026

DescriptFree with "60 minutes (1 hr) / month" at 720p with a watermark, then Hobbyist at $16 a month billed annually ($24 monthly) for "10 media hours / month", Creator at $24 annually ($35 monthly) for "30 media hours / month", and Business at $50 annually ($65 monthly) for "40 media hours / month", per person

An editor with transcription inside it, priced by media hours per person per month. The allowance is generous for one creator and resets whether it was used or not, so the bill is a function of headcount rather than of output. Descript is the row to read if what you actually want is a video editor that happens to caption.

descript.com · checked September 2026

KapwingFree for "Up to 50 minutes" of auto-subtitling with exports capped at "4 minutes" and a watermark, then Pro at "$16" per member a month billed annually ("$24 billed monthly") for "Up to 1,000 minutes per month" of subtitles and "Up to 500 minutes per month" of translation, and Business at "$50" annually ("$64 billed monthly") for 4,000 and 2,000 minutes

Two meters at once, per member: subtitle minutes and translation minutes are separate allowances, and the free tier caps the exported video at four minutes. It is the closest product to this template in shape, which is what makes it the fairest comparison. Everything this template does for one account with no allowance, Kapwing does per member with two.

kapwing.com · checked September 2026

Happy ScribeA "10-minute free trial", then Basic at "$17 / month" ($8.50 annually) for "120 minutes of AI Transcription, Subtitling, and Translation per month", Pro at "$29 / month" ($19 annually) for 600 minutes, Business at "$89 / month" ($59 annually) for 6,000 minutes, and top-ups at "$0.20/min"

The row with the cleanest per-minute figure: once the allowance is gone, each extra minute is "$0.20/min", so an hour of video is $12 in top-ups. Multiply that by the hours your users would actually caption in a month and compare it to zero, then remember the honest half of the comparison: the rented model is more accurate than the one that fits in a browser tab.

happyscribe.com · checked September 2026

Rule of thumb: if you caption a handful of your own videos a month, do not build this. Rev’s 45 free minutes or Descript’s free hour covers you, and the rented models are more accurate than the one that runs in a browser. If you caption for clients, for a team or for other people’s uploads, the minutes are the bill, and owning the studio turns a meter into a fixed cost. The honest middle case is a product whose users need high accuracy on difficult audio, and there the right answer is to build the studio and swap in a larger speech model, accepting a longer first download in return.

No dev needed

Why build with Claude Code

Skip the speech-recognition engineering. Describe the library, the editor and the translation you want, say who may use them, and every video, caption track and export is saved under its owner’s account without you writing server code.

Claude Code removes that barrier. The whole workflow becomes a simple loop:

The build loop
1

Describe

Say what you want in plain words in any language.

2

Build

It writes and edits real code across backend, auth, and UI.

3

Check

Run the app and see the change actually work.

Repeat

Ask for the next thing. Repeat.

Loop back to Describe

No stage of that loop asks for the full-stack expertise or the months of boilerplate that stop most people, which is why one person can ship a working app in a couple of weeks.

Three hard partshandled for you

The data model, authentication, and access rules are what make software like this genuinely hard to build by hand. Describe them and Claude Code scaffolds all three. After that, the rest is mostly screens on top.

Any language is the interface

No code to write, and no English required either. Whether you need a new field, a renamed step, or an AI summary, describe it in whatever language you think in and Claude Code handles the implementation.

Whole project in context

It finds and reads the files a change touches, instead of needing you to paste them in, so each edit stays consistent with what is already there. Point it at the two or three files that matter and it stays fast.

What it costs

Pay a developer, or do it with AI

When you own your subtitle app, there are no per-minute processing fees. Your only real costs are constructing the code, video storage, and optional translations. Here is a clear breakdown of hiring a developer versus building it yourself using AI.

Hire a developer

Custom build, from scratch
Developer
~$11k-$42k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
AI translation
Per token on your own key
Build time
~210 hrs of their work

~$11k-$42k to build, then from $25/mo after launch

Our ~210-hour estimate, costed against the rate survey linked below, whose bands run from $45-$75/hr for North American contractors up through $100-$150+/hr for senior US developers, before the 20-40% an agency adds, which brackets the range at roughly $50/hr and $200/hr. Most of those hours are the speech model and the timeline, and neither shows in a screenshot. Then read the translation row: it is the only line that grows with use, and at the default model’s rates an hour of speech costs a few cents.

Build it with Claude Code

From scratch, with Claude Code
Claude Code
$20/month (Pro) to $200/month (Max)
Backend (Supabase)
Free tier · $25/month (Pro plan)*
Hosting
$0 on a free tier
Your time
~101 hrs

~$20-$200/month while you build, then whichever plan you keep using

Claude Code itself is free. The cost sits in the Claude plan behind it. The fee doesn’t shrink when you start from a template the way a per-hour developer bill would: Pro, at $20/month, covers a template import or a short build, and a from-scratch build that runs for weeks tends to need the $100-$200/month Max plan instead, because it outlasts Pro’s usage window. Either way, the template changes how many of the hours in the estimator above you actually spend, not which Claude plan you’re paying for.

* Unlike most apps in this catalogue, this one keeps large files: the videos people upload live in storage until you delete them. Supabase Free includes 1 GB of file storage and 5 GB of egress a month, and pauses a project after a week without activity. Pro, from $25/mo, includes 100 GB of storage and 250 GB of egress, then charges $0.0213 per GB stored and $0.09 per GB served, and keeps a daily backup for 7 days. A retention rule that deletes a video a month after its last export is the cheapest decision on this page.

Prices and rates from supabase.com, developex.com and claude.com, checked September 2026.

Plan first

Decide before you build

Six decisions to make before writing code. Three of them decide what your users’ videos cost you to keep, and one decides how long they wait for the first caption.

01

Which speech model, and how long will people wait for it?

The smallest model downloads in under a minute and gets ordinary speech mostly right. Larger ones are more accurate and take longer to arrive on the first visit. Decide now which you ship and what the screen says while it loads, because a silent wait looks like a broken app.

02

How long a video will you accept?

The transcription runs in a browser tab with finite memory, and the template already warns itself above thirty minutes of audio. Decide the ceiling by length or by file size, say it before the upload rather than after, and refuse politely. A limit stated up front reads as a feature, and a tab that dies at 80% reads as a broken product.

03

Do you keep the videos, and for how long?

Uploaded videos are the only large thing in this app, and storage is the one bill that grows quietly. Decide whether a video lives until the person deletes it, expires a month after its last export, or is never kept once the captions exist. Build the deletion now rather than after the storage bill arrives.

04

Which languages, and who pays for translation?

Transcription costs $0, but AI translation costs money for every translated word. Decide upfront which languages to support and set strict usage limits per account (for example, 5 free translations per month). Adding a hard limit now prevents surprise bills later when user activity spikes.

05

Is video storage public or private?

By default, uploaded videos are accessible to anyone with the link so the browser can process exports smoothly. Switching to private storage with expiring links keeps user content secure, but requires setting up server-side rendering for video exports. Decide on your privacy model before your first user uploads sensitive content.

06

Who gets an account, and what does a demo get?

Open sign-up, invitations, or a demo account that anyone can try. The template gives demo accounts their own role and wipes them after an hour of inactivity, which is the right shape for a public trial. Whatever you choose, limits attach to the account rather than the visitor, because accounts are free to create.

Approaches

Comparing your build options

Building a box that shows a transcript is fast. The hard part is everything behind it: a speech model running in the visitor’s browser, a timeline that stays in step with the video, translation that keeps every timestamp, and a captioned file at the end. Here are three ways to build the exact same product.

~210 hrsBuilding by hand

Getting a speech model to run inside a browser tab, without freezing the page, is where the first weeks go. Then the caption you dragged has to stay in step with the video, the translated line has to land at the same second as the original, and the captioned file has to come out of a browser that was never designed to render one.

~155 hrsGeneric UI starter kit

A kit gives you a login page, a file table and a settings screen. It has never heard of a caption, a timestamp or a speech model, so the editor, the transcription and the export, which are the whole product, start from nothing.

~101 hrsAI-powered development with Claude Code

You describe one piece at a time in plain words and Claude Code writes the speech worker, the timeline and the database work together, reading the rest of the project before it edits any of it. The check that matters: upload a real video as a second account and confirm the first account’s library never shows it.

Interactive calculator

Estimate your exact build timeframe

Customize your feature list below to see how build time changes. If you only need subtitles in one language, or nobody will export a captioned video, uncheck those rows to reduce the estimate.

What your subtitle studio needs

Your estimate

101 hrs

start to finish

Based on the 7 of 7 features you’ve selected, plus ~21h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.

A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.

Setting up your workspace

Let’s set up the tools you need

Four things need to be on your machine before step 01, and none of it takes more than about 15 minutes. Three are ordinary installers you click through, and the fourth is an active Claude subscription. From there, you build simply by describing what you want, in your own words.

1

Claude Code

Cost: Free to install · needs a paid plan to build with

Your main AI assistant. Download and run the free Claude Code CLI, connect your Anthropic account or pay-as-you-go API key, and build your app in plain English. It runs in the Terminal, and if a command line puts you off, the same tool ships as a desktop app with buttons and windows.

Install Claude Code
2

Claude subscription

Cost: $20/month (Pro) or from $100/month (Max)

Claude Code itself is free, but the free Claude.ai plan does not include Claude Code access at all, so you need at least Pro, unless you pay as you go through a Console account instead. Pro at $20/month is enough to start with, though a long, from-scratch build tends to outrun what Pro allows in a given stretch, which is when people move up to Max, from $100/month. Every plan’s usage resets on a rolling window, so on a heavy day you may hit a limit and have to wait it out.

Compare Claude plans
3

Node.js engine

Cost: Free

The engine that runs your app on your own computer. You never have to learn how it works: download the version marked LTS (the most stable one), install it, and forget about it.

Download Node.js (LTS)
4

Supabase (database)

Cost: Free to start

Where your project keeps its data. Install it, then sign in once by running supabase login. Words like migrations and row-level security turn up later in the guide, and Claude Code writes those parts for you.

Install Supabase CLI

Nothing here is worth memorizing. These four just need to exist on your machine. From step 01 on, you say what you want and Claude Code runs the commands.

Step by step

Build your subtitle studio, prompt by prompt

No code to write. Describe what you need and Claude Code runs the commands. The order matters more here than on most builds: the speech model comes before the database, because it is the only step that can fail for reasons the rest of the app cannot fix.

  1. 01

    Set up the project

    An empty app running against your own database, plus a notes file so Claude Code keeps the one rule this build depends on in front of it.

    PromptSet up the project
    Set up a new React 18 + Vite + TypeScript project with Tailwind and the Supabase JS client. Read VITE_SUPABASE_URL and the publishable key (the sb_publishable_… key, which replaces the older anon key) from .env, and add .env to .gitignore in the same step so neither value reaches GitHub. Add a typed Supabase client under src/lib, then write a short CLAUDE.md describing the stack and the vocabulary for a subtitle studio (videos, tracks, captions, exports) and recording two standing rules: transcription always runs in the visitor’s browser and is never sent to a server, and the only call that leaves the app is translation through one server-side function.

    Write the browser-only rule down now. A server-side transcription service is the first thing any assistant will reasonably suggest later, and it would put back the per-minute bill this whole build exists to avoid.

  2. 02

    Prove transcription works in the browser before building anything on it

    Load the speech model into the page and caption one clip with it. No library, no editor, no design: a file in, timed lines out. If this step is going to fight you, find out now.

    PromptGet the speech model running in the browser
    Add @huggingface/transformers and build one throwaway page that proves in-browser transcription works: a file picker for a local video, a button, and a list of lines with start and end times when it finishes. Run the model in a Web Worker so the page stays responsive, load onnx-community/whisper-tiny with device set to webgpu and fall back to wasm when WebGPU is unavailable, decode the audio in the browser and feed it to the model in thirty-second chunks, and show the model download progress separately from the transcription progress. Tell me how long the first load takes on this machine and what happens on a twenty-minute file.

    Ask for observations, not just code. What you want out of this step is a feel for the first-load wait and a number for your length ceiling, and the only way to get either is to run it.

  3. 03

    Add accounts, the data model and the rules that keep them apart

    Now the ordinary application work. Sign-in, the tables, storage for the uploads, and access rules so one person’s videos are theirs alone.

    PromptAdd auth, tables, storage and access rules
    Add Supabase Auth with email and password: sign-up, login, logout, a persisted session, a profiles row per account, and a useUser hook. Then the data model as migrations. A videos table owned by a user with the file’s storage path, duration and detected language. A subtitles table holding one track per video and language with its captions as timed segments and a status and progress for translation. Tables for usage_tracking, activity_logs and system_settings, and a rate_limits table keyed by account and action. Add an app_role enum of visitor, user, admin and demo with a user_roles table kept out of the user’s own metadata so nobody can promote themselves, and a SECURITY DEFINER has_role function. Create a private storage bucket for uploads with policies so an account reads and writes only its own folder. Then enable row-level security on every table so a user reaches only their own rows and an admin reaches everything, with explicit WITH CHECK clauses on insert and update, and show me how to verify a second account gets nothing back for the first account’s videos.

    Keep the bucket private for now. Step 05 explains why a captioned-video export may push you to make it public, and that is a decision to take with the trade-off in front of you rather than by default.

  4. 04

    Build the library and the timeline editor

    The screen the product lives or dies on. Ask for the editor with a real transcript behind it, and spend the time getting the dragging and the timing right before anything else arrives.

    PromptBuild the library and the editor
    Build the library: an upload that stores the video in the bucket and creates its row, a list of the signed-in person’s videos with status (uploaded, transcribed, translated, exported), and a detail page that runs the transcription from step 02 and saves the result as the video’s first track. Then the editor: the video playing above a horizontal timeline of captions, each draggable to retime and editable in place, with split and merge, keyboard shortcuts for play, pause and next caption, undo and redo, and autosave a few seconds after the last change. Keep the captions in one place so the timeline, the list and the preview never disagree. Add a styling panel (font, size, colour, background, position) whose changes show over the video immediately.

    The bug to watch for is caption state kept in two places. A preview that shows a line the timeline has already moved is the symptom, and it gets much more expensive to fix once translation reads the same state.

  5. 05

    Add translation and the exports

    Translation is the first and only call that leaves the app, so it comes with the key handling and the logging built in. Then the four ways a finished track gets out.

    PromptAdd translation and export
    Add one server-side "ai" edge function that calls my AI provider with the key held in function secrets, refuses any caller without a valid session, and logs every call to usage_tracking with the account, the video and the token counts. Add a "Translate" action on a track that sends its captions to that function ten at a time with their timestamps, asks for the same lines in the chosen language with the timestamps untouched, returns immediately, writes progress to the new track’s row as batches finish, and has the editor poll it. Then exports: a function that produces .srt, .vtt and .txt from any track with no AI involved, and a captioned-video export in the browser that draws the styled captions over the video on a canvas and records the result as a WebM. Tell me plainly what the captioned export needs from the storage bucket to work, and what changing the bucket to public would mean for who can open a video by its link.

    Ask that last question on purpose. The template this guide sits beside made its bucket public for exactly this reason, and the right answer for you depends on whose videos these are.

  6. 06
    Destination

    Add limits, the admin console and the demo account, then use it as a stranger would

    Finish with the pieces that keep the bill and the trial honest, then open a private window and try to caption something you should not be able to reach.

    PromptAdd limits, admin, demo, and test
    Add three more pieces. Rate limits: ten uploads, twenty transcriptions, thirty translations and fifty exports per account per hour, counted in the rate_limits table rather than in memory, with quota costs read from system_settings so I can change them without a deploy. An admin console over users, videos, usage and settings, readable only by the admin role. And a demo role: any sign-up with an address ending in @demo.com gets it automatically, and a function wipes that account’s videos, tracks, logs and usage after an hour of inactivity. Then run the app and walk me through the whole thing: sign up as a demo account and caption a short clip, translate it, export a .srt and a captioned video, then sign up as a second real account and confirm it sees none of the first account’s videos, and fix whatever breaks on the way.
Authentication & security

Protecting user content and translation keys

A subtitle studio manages three critical assets: your users’ videos, their saved captions, and your paid translation keys. Follow these essential security rules before launching.

Secure login & password protection

Sign-up, sign-in, sessions and password resets come from the authentication service attached to your database. Use it as it comes, because a subtitle studio gives you no reason to build identity logic of your own, and a hand-written version that is subtly wrong fails silently until somebody’s videos are exposed.

User access levels & safe demo mode

The template ships visitor, user and admin, plus a demo role that any sign-up with a demo address receives automatically. A demo account can do everything a real one can, and everything it did is wiped after an hour of inactivity, which is how a public trial stays harmless.

Private user data protection

The template ships 31 access policies, and the rule they enforce is simple: a video, its subtitle tracks, its usage records and its activity log belong to one account, and an admin reaches all of them. The database applies that on every read and write, so a screen that forgets to filter still cannot show one person another person’s captions.

AI access for logged-in users only

All three server functions refuse a caller without a valid session, so an anonymous visitor cannot spend your translation key by finding the address. Check this first on any function you add, because an open AI endpoint is an invoice rather than a data leak.

Abuse protection & spending limits

Ten uploads, twenty transcriptions, thirty translations and fifty exports an hour per account, counted in the database rather than in one server’s memory, with quota costs you can change in settings. This is the part that keeps one enthusiastic afternoon from becoming your whole month’s AI bill.

Video & file protection

A later migration makes the uploads bucket readable by anyone holding a link, because the captioned-video export draws the video onto a canvas in the browser and that only works with a public file. Listing and writing still require the owner. If your users’ videos are sensitive, make the bucket private and move the captioned export to a server, and say which you chose.

Paid API key security

The provider key lives in the function’s secrets and never in the app, where anyone could lift it. Then the part people skip: the caption text goes to your provider for translation, and the file name goes to it for language detection. Say so to whoever signs in, and read your provider’s terms on what it does with what it receives.

Data backups & recovery

The free tier keeps no backups, so during the build your database is the only copy of every caption anybody fixed by hand. Daily backups kept for seven days start on Supabase Pro at $25/mo. Move to it before the first stranger uploads, because a lost afternoon of caption edits is not something you can regenerate.

PromptCheck who can see what
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.

Run this before launch to make sure nobody can see data they shouldn’t.

One rule outranks everything above it: the database service key and your AI provider key live on the server and nowhere else, which means never inside the app people download and never inside a repository. If either gets out, treat it as compromised and rotate it the same day.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • A CLAUDE.md notes file that spells out your setup and preferences
  • Asking for a plan first on anything that touches several files
  • One change per request, small enough to describe in a sentence
  • Pointing it at the two or three files that matter
  • Running the app and checking each change before the next
  • Saving a working version (a git commit) after each step, so you can undo

Slows the build

  • Vague prompts like “make it better”, which leave it guessing what you meant
  • Asking for a whole feature in one giant prompt
  • Dumping the entire project into the chat at once
  • Skipping the notes file, so it forgets your conventions each session
  • Accepting changes without running or reading them
  • No saved versions to roll back to when something breaks
Version control

Git: what it is, and why you need it

Before you build anything, meet the one tool that makes building safe. You need no coding background for it: Git remembers every version of your project, so you can try things, break things, and get back to a working state in seconds.

What Git actually is

Git is a quiet recorder that runs alongside your project. Each time you save your work it keeps a full snapshot, so the entire history of your project lives on your computer, not just whatever the files look like right now.

Why you need it

Claude Code runs inside a permission mode you choose, either asking before each change or working more freely once you trust it. Either way, experiments sometimes still break things. Git is what makes that safe: there’s always a working version to return to, so you can try bold changes without the fear of losing what already works.

A commit is a save point

Each commit is a snapshot with a short note, like “added the home page”. Make one after every working step and you can jump back to any of them later.

GitHub’s beginner guide to Git

Undo anything, safely

If a change breaks something, you roll back to the last good commit instead of unpicking it by hand. It’s the safety net that makes bold experiments with Claude Code low-risk.

GitHub is Git’s home online

Git lives on your computer. GitHub is a free, private cloud copy of the same project. It’s your backup if your laptop dies, and the place Claude Code can always get back to. Keep it private, and never commit secret keys or passwords.

Create a free GitHub account

You rarely type git commands

You do not have to memorize any of it. Ask Claude Code to “commit this” or “undo the last change” and it runs the git steps for you. Prefer clicking to typing? Claude Code’s own desktop app, which you install separately, shows each change side by side before you keep it, and GitHub Desktop gives you plain buttons for saving and rolling back.

Get the Claude Code desktop app
Going live

Where to host your application

Hosting gives your app a home on the internet so anyone can open it via a web link. Choose a service below to make your site live. (Your database, logins, and business records are stored separately in Supabase, covered below).

HostBest forNotesFree tier
VercelOne-click deploysConnect the repository and it publishes on every push, and the template already carries the one routing file a link straight to a video needs. The free Hobby tier is personal and non-commercial, so a studio that clients or customers sign in to belongs on Pro at $20/user/mo.Pro from $20/user/mo (Hobby is non-commercial)
NetlifyDrag-and-drop or GitConnect the repository or drag the built folder onto the page. Accept the redirect rule it prompts you for, or a link to one video opens a not-found page instead of the editor.Free tier
Cloudflare PagesUsers in more than one countryServes the app from wherever the person opening it is. The app itself is small, because the speech model arrives from its own home rather than from your host, so the first paint is fast almost anywhere.Generous free tier
GitHub PagesNot really this appPublishes from a GitHub project once one routing setting is changed. Here to be ruled out: free means a public repository, and the client sits beside a project that holds function secrets you do not want browsed.Free from a public repo only
Firebase HostingTeams already on GoogleOne setup, then a single command per release, with the rewrite for deep links in its own config file. Worth it mostly if Google is already your stack.Free Spark tier
AWS Amplify HostingTeams already on AWSDeploy from the AWS console with a rewrite rule for deep links. Sensible when AWS is already where your billing goes, never because the app asked for it.Free tier (build + hosting)
SurgePublish from the terminalOne command puts the built folder online with no repository in the loop. Fine for showing a colleague the editor, wrong the moment real people upload their own videos.Free - unlimited publishing
DigitalOcean App PlatformDigitalOcean usersBuilds and serves from the account you already have, which in a small company means one fewer supplier beside your database and your AI provider.Free - 3 static sites, 1 GB/mo transfer

Two questions decide this, and speed is not one of them. Does the plan allow commercial use, which Vercel’s Hobby tier does not. And does a link straight to one video open the editor for somebody who has never visited, because a link to a specific video is exactly what a person pastes to a colleague. The speech model does not touch your host at all: the browser fetches it from its own home on the first visit and keeps it.

The first transcription downloads the speech model, and on a slow connection that looks like nothing is happening. The template says thirty to sixty seconds and gives up after two minutes. Before you launch, try it on a phone on mobile data rather than at your desk, keep the progress message on screen the whole time, and decide what the app says if the download fails rather than letting a spinner run forever.

Database & backend

Keep your data in Supabase

Videos, captions, accounts and usage, plus the one function that talks to your AI provider, which is where the key belongs and the only place it should ever be.

ServiceBest forNotesFree tier
SupabaseData, auth, files and the translation callCaptions and usage in Postgres, accounts from its auth service, uploaded videos in storage, and one function per AI job with the provider key in its secrets. Make a free project, hand over the URL and publishable key, and it is connected. The line to watch is storage, because this is one of the few apps here that keeps large files, and the decision to watch is whether the video bucket stays public.Free tier, then usage-based
AI workflows

Add AI capabilities in one simple step

Securely route your AI API keys through a lightweight serverless function. Use simple prompts to automatically translate a subtitle track, detect the spoken language, and tidy the lines before export.

Translate a finished track

The feature people buy a subtitle tool for. Send the captions to your provider a batch at a time, keep every timestamp, and show progress while it runs, because a long video takes a while and a blank screen looks broken.

PromptTranslate a finished track
Add one server-side "ai" function that talks to my AI provider, with the key held in server secrets and never anywhere the browser can reach, and make it refuse any caller who is not signed in. Then add a "Translate" action on a subtitle track: send the lines to that function ten at a time with their timestamps, ask for the same lines in the target language with the timestamps untouched, and save the result as a new track linked to the original. Return immediately, write progress to the track row as batches finish, and have the editor poll it so the person sees a bar rather than a spinner. Log every call with the account, the video and the token counts.

Detect the language from the audio, not the file name

Guessing the spoken language from a file name works until somebody uploads recording_final_v2.mp4. Use the first minute of the transcript instead, and let the person correct it before anything else runs.

PromptDetect the language from the audio, not the file name
Change language detection to work from the first thirty seconds of the transcript rather than from the file name. Send that text to the ai function and ask for a two-letter language code, show the result in the editor as an editable field with a note saying it was detected, and use the person’s choice for translation from then on. Fall back to the file name only when no transcript exists yet.

Tidy the lines before export

A raw transcript has no punctuation worth the name, runs sentences together and keeps every um. One pass through the model turns it into captions a person would have written, and the editor keeps the original in case it overreaches.

PromptTidy the lines before export
Add a "Tidy captions" action that sends the track to the ai function and asks for the same lines with punctuation and capitalisation fixed, filler words removed, and any line longer than 42 characters split at a natural break, keeping every start and end time and never changing the meaning. Show the result as a proposal the person accepts or rejects line by line, and keep the original track untouched until they accept.

Chapters and a summary from the transcript

The description, the chapter markers and the short summary a video platform asks for are all in the transcript already. Drafting them is the chore that stops people publishing.

PromptChapters and a summary from the transcript
Add a panel on the export screen that sends the finished transcript to the ai function and returns a short summary, five to eight chapter markers with timestamps, and a handful of tags. Present all of it as editable drafts the person can copy, and let them regenerate any one part on its own without redoing the rest.

Each prompt above picks the model that fits the job. As a rule of thumb, that is Haiku for high volume, Sonnet for everyday writing, and Opus for deeper reasoning. Model names move faster than this page does, so check the current list in the Claude docs (linked in the references below) before you build. Send every one of these prompts through that same ai function, so one key and one set of rules governs all of them.

Ready-made option

Get a head start with our template

Everything above starts from an empty folder, and it does not have to. The same studio exists already built: the speech model runs, the timeline works, translation runs in the background and the exports come out, so your time goes on the languages, the styles and the name on the door.

AI Subtitle Studio

The exact subtitle studio this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A subtitle workspace that takes a video from spoken words to a finished file. Transcribe it locally with no per-minute cost, fix and style the lines on a timeline, translate into other languages, and export a captioned video - so one upload reaches a much wider audience.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

The speech model, the timeline editor, translation and the exports already work. Behind them, the roles, the hourly limits, the demo account and the admin console are done too.

Building the core from scratch

~101 hrs

Opening the template, already built

~1 hr

Pay Once, Own Forever. Build exactly what your team needs without renting a monthly SaaS subscription, paying per-seat fees, or dealing with platform lock-in.

Transcription in the browser, already wired

The speech model loads in a background worker, uses the graphics chip where the browser allows it and falls back where it does not, and chunks long audio so the page stays usable. That is the part a first attempt gets wrong, and it is done.

A timeline editor with undo and autosave

Captions on a track under the video, retimed by dragging, edited in place, with keyboard shortcuts, undo and autosave, plus a styling panel whose preview is what the export produces.

Translation in the background, progress on screen

Send a track to your own AI key and the function works through it in batches while the editor shows progress. Each translated track saves as its own version and exports on its own.

Four export paths

Three plain subtitle formats generated on the server with no AI involved, and a captioned video recorded in the browser for the platforms that cannot take a separate file.

Roles, limits and an admin console

Visitor, user and admin roles plus a self-resetting demo role, 31 access policies holding each account to its own videos, hourly rate limits on uploads, transcriptions, translations and exports, and an admin view over users, videos, usage and settings.

Customer story

From founders who build on our templates

We needed a working product in front of users fast. I started from one of these templates instead of a blank repo, customized it in our AI tool, and shipped in days - not the weeks it usually takes.
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

The transcription minute is, yes. The speech model downloads into the visitor’s browser on first use and runs on their own processor, so no service bills you for the audio. What you pay for is storage for the videos people keep and, if you offer it, translation through your own AI key, which costs tokens rather than minutes.

Less accurate than the rented services, and honestly so. The model that fits in a browser is the smallest one, and it gets clear speech mostly right and difficult audio less so, which is why the timeline editor exists. A larger model is a one-line swap and buys accuracy at the cost of a longer download on the first visit.

Yes, to your own storage, so it can sit in the library, play under the editor and be exported later. The transcription itself still happens in the browser rather than on a server. Decide how long uploads live, because they are the one large thing this app keeps.

A browser tab has finite memory, so this is a decision rather than a fixed number. The template chunks audio into thirty-second pieces and warns itself above thirty minutes. Short talks and lessons are comfortable on ordinary hardware. Set a ceiling you can defend, say it before the upload, and fail politely.

The speech model transcribes many spoken languages, and translation into any target language goes through your own AI key. One honest note: the template guesses the spoken language from the file name rather than the audio, so the editor lets a person correct it, and the AI section shows the prompt that fixes it properly.

Yes. The browser draws the styled captions over the video and records the result as a WebM file, with no server rendering. It needs the uploaded video to be readable by the browser, which is why the template’s storage bucket is public, and it is slower than a desktop editor because it plays the video through in real time.

No. Describe what you need in plain language and your AI coding tool writes the tables, the accounts, the access rules and the storage rules. Your own job is creating a free Supabase project for it to point at, so the records end up somewhere you own.

Less than a subtitle service, because the metered minute is missing. What is left is Supabase and a host, both starting free, with Supabase Pro from $25/mo once real people upload and you want backups, plus storage for the videos you keep and a translation bill on your own AI key that runs to cents per hour of speech at the default model’s rates.

Inside the app, nobody: every video, track and usage record belongs to one account and the database enforces it on every query. Outside it, be honest with yourself about the storage bucket, which the template ships readable by anyone holding a link so the captioned export works. Make it private and render on a server if your users’ videos are sensitive.

Not without an account, but the template makes accounts cheap to try: any sign-up with a demo address gets a demo role, can do everything a real account can, and is wiped after an hour of inactivity. That is the right shape for a public trial of a tool that spends your translation key.

Nothing here is proprietary. Captions live in ordinary PostgreSQL and export as standard subtitle files, videos come out of storage as the files they went in as, and a standard database dump gives you everything in a form any Postgres host accepts.

Yes. Every host here connects a custom domain with free HTTPS in a few clicks. Worth doing before you invite anyone, because a tool that asks people to upload their own videos should look like it belongs to you.

No, though you will type the occasional command: installing Claude Code, starting the app, applying a database change. The setup section above lists what you need, with a link for each, and once it’s on your machine Claude Code runs most of those commands for you.

Claude Code turns the real code into an app you can publish, with a database and user accounts. An Artifact is a one-file preview, good for a quick look but not for going live.

Claude Code’s plans reset on a rolling window rather than billing per token, so a heavy day of building can bump into a limit. You either wait for it to reset or move up a plan. Max gives more headroom for a long, from-scratch build. Nothing you’ve already built is lost either way, so the work only pauses.

References

Sources checked September 2026
  1. 01Pricing (AI minutes per seat, human captions), Rev. rev.com
  2. 02Pricing (media hours per person), Descript. descript.com
  3. 03Pricing (subtitle and translation minutes per member), Kapwing. kapwing.com
  4. 04Pricing (minutes per month, top-up rate), Happy Scribe. happyscribe.com
  5. 05Transformers.js documentation (running models in the browser). huggingface.co
  6. 06whisper-tiny model card (the browser speech model). huggingface.co
  7. 07API pricing (per-token rates for the default translation model), OpenAI. developers.openai.com
  8. 08Pricing (Pro plan, storage, egress, backups), Supabase. supabase.com
  9. 09Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  10. 10Row Level Security, Supabase docs. supabase.com
  11. 11Storage access control, Supabase docs. supabase.com
  12. 12Plans and pricing (Pro, Max), Claude. claude.com
  13. 13What is the Max plan?, Claude support. support.claude.com
  14. 14Set up Claude Code, Claude docs. code.claude.com
  15. 15Models overview, Claude docs. platform.claude.com

This guide is general information. Third-party prices, plan limits and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Transcription accuracy, speed and the practical file limit depend on the visitor’s own device and browser, so treat any performance expectation here as a starting point to test rather than a specification. Build hours and the cost estimates derived from them are our own estimates, not quotes. Claude, Claude Code, and the Anthropic API are products of Anthropic. Verify current capabilities and pricing before relying on them.