<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: white</title>
    <description>The latest articles on DEV Community by white (@kaixiang_liang_e1017be09a).</description>
    <link>https://dev.to/kaixiang_liang_e1017be09a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4218694%2F23652cc4-253e-4767-8c1a-859509984be7.png</url>
      <title>DEV Community: white</title>
      <link>https://dev.to/kaixiang_liang_e1017be09a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaixiang_liang_e1017be09a"/>
    <language>en</language>
    <item>
      <title>What I Learned Building a Pay-As-You-Go Transcription Tool</title>
      <dc:creator>white</dc:creator>
      <pubDate>Sat, 31 Oct 2026 09:13:58 +0000</pubDate>
      <link>https://dev.to/kaixiang_liang_e1017be09a/what-i-learned-building-a-pay-as-you-go-transcription-tool-1ggm</link>
      <guid>https://dev.to/kaixiang_liang_e1017be09a/what-i-learned-building-a-pay-as-you-go-transcription-tool-1ggm</guid>
      <description>&lt;p&gt;I recently launched &lt;a href="https://transcribeaudio.co/" rel="noopener noreferrer"&gt;Transcribe Audio&lt;/a&gt;, a small web app that turns audio and video files into text. Most transcription apps are monthly subscriptions. I wanted to try the opposite: buy minutes once, use them whenever, and never have them expire. Here are a few things I learned building it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Let people try it before asking for an email
Many transcription apps ask you to sign up before you can upload anything. I flipped it: anyone can upload, and files up to 30 minutes get the full transcript with no account (3 files a day). Downloads (TXT, Word, SRT, VTT) need a free account.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The bet is that people are happier to sign up once they've seen the result is good. The trick is making sure a guest's transcript moves into their new account when they sign up, so nothing is lost.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Price by the minute, but show it in hours&lt;br&gt;
Billing is per minute (1 credit = 1 minute, rounded up per file), but nobody thinks of their recordings in "credits". The packs are shown as hours instead: 3 hours for $6.99, 15 hours for $19.99, 50 hours for $49.99. The cost of a file is shown before it's processed, so there are no surprises.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Long files need a different flow&lt;br&gt;
Short files are easy: upload, transcribe, show the result. Long files (an hour or more) take long enough that people close the tab. Two things helped:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An email when the batch finishes, with direct download links signed per file (so they work without logging in, and expire after a week).&lt;br&gt;
Batch upload of up to 50 files at once for signed-in users, with one email for the whole batch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Page speed matters even for a tool page&lt;br&gt;
The homepage includes the uploader, so it's interactive and JavaScript-heavy. Getting PageSpeed to 100 on mobile came down to boring things: deferring analytics until the first interaction, lazy-loading anything that's switched off by config, and not shipping a whole package.json to the browser by accident (it happened twice).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write your limits as plain text&lt;br&gt;
People increasingly ask AI assistants "what's a free transcription tool?" The assistants quote whatever limits they can read on your page. So the free limits live in a plain HTML table, generated from the same constants the backend enforces, so the page and the product can't drift apart.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stack&lt;br&gt;
Next.js on Vercel, Postgres on Neon, Cloudflare R2 for uploads, a speech-to-text API for the actual transcription, and Resend for email.&lt;/p&gt;

&lt;p&gt;If you transcribe interviews, meetings or podcasts, I'd love feedback on what's missing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>sass</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
