I Locked Myself In A Room, Made 17 Apps, & Sold 2 for $265,000
0) One-time “project kickoff” prompt (paste into Cursor chat)
You are my senior full-stack engineer. We’re building TorNotes: a web app that turns voice notes into proper formatted text. Ship an MVP first, then iterate.
Tech: Next.js (App Router) + TypeScript + Tailwind + Prisma + Postgres. Auth via NextAuth. Payments via Stripe. Transcription via OpenAI Whisper API.
Core flows: Sign in → create note → record/upload audio → transcribe → AI format into structured notes (headings/bullets/action items) → edit → export (Markdown/PDF) → manage subscription.
Start by proposing a minimal architecture + database schema + folder structure, then generate the code incrementally with small PR-sized steps. Confirm each step compiles.
1) Scaffold + UI baseline
Prompt:
Create a new Next.js app (App Router, TS, Tailwind). Add a clean landing page with: hero, “Try it free”, screenshots placeholder, pricing teaser, FAQ. Add /app dashboard route that requires auth (placeholder for now). Use a simple component library pattern (components/ui). Keep styling minimal and modern.
2) Database + Prisma
Prompt:
Add Prisma + Postgres. Propose schema for: User, Note, AudioAsset, TranscriptionJob, Subscription.
Notes should store: title, rawTranscript, formattedNote, status (draft/transcribing/ready/error), createdAt, updatedAt.
AudioAsset should store: storageUrl, durationSec, mimeType, bytes.
Implement Prisma client, migrations, and seed script (optional). Then create basic server actions for CRUD notes.
3) Auth (NextAuth)
Prompt:
Implement NextAuth with email magic link OR Google OAuth (choose the simplest). Add protected routes middleware.
Build /login UI. After login redirect to /app. In /app show “My Notes” list for the user and a “New Note” button.
4) Notes dashboard (CRUD)
Prompt:
Build /app layout with sidebar: Notes, Settings, Billing.
Notes page: list notes (title, updated time, status). Create note modal (title optional). Clicking a note opens /app/notes/[id] editor page. Add delete.
5) Audio recording + upload (MVP: upload first)
Prompt:
Implement audio upload on the note page: accept .m4a .mp3 .wav. Store file using local disk in dev and S3-compatible storage in prod (use a storage adapter interface). Save AudioAsset record.
After upload, set note.status = “transcribing” and enqueue transcription (for now call server action directly).
(Optional follow-up prompt for recording)
Add in-browser recording using MediaRecorder with start/stop, waveform placeholder, and upload the recorded blob to the same pipeline.
6) Transcription with Whisper
Prompt:
Implement transcription using OpenAI Whisper API. On server: take the uploaded audio URL/file, call transcription, store rawTranscript on the Note, update status = “ready” if formatting step is disabled, else “formatting”.
Add robust error handling + retries (basic) + user-facing error state.
7) “Make it pretty” formatting (the core value)
Prompt:
Add an AI formatting step: take rawTranscript and transform into structured notes.
Output requirements:Title suggestion
Summary (2–4 bullets)
Key points (bullets with headings)
Action items (checkbox list)
Questions / follow-ups (optional)
Save formattedNote as Markdown.
Add a toggle to re-run formatting with a “Style” dropdown (Meeting notes / Brain dump / Podcast summary / Todo list).
Ensure prompt injection safety: treat transcript as untrusted text.
8) Editor experience
Prompt:
Build a two-pane editor on /app/notes/[id]: left shows transcript (read-only), right shows formatted note in a Markdown editor with live preview.
Add “Copy”, “Download .md”, and “Export PDF” buttons.
Autosave edits to formattedNote with debounce.
9) Payments + gating (match video’s business model)
Prompt:
Implement Stripe subscriptions: Free plan = 3 notes/month + limited audio length. Pro plan = unlimited notes + longer audio.
Add billing page with plan status. Gate transcription/formatting based on usage. Create usage tracking table or fields (monthlyCount reset monthly).
Add webhook handler for subscription updates. Make sure auth user is linked to Stripe customer.
10) “Sell it” landing page + SEO
Prompt:
Improve landing page conversion: add pricing page, testimonials placeholders, feature cards, and example output.
Add SEO basics: metadata, sitemap, robots, OpenGraph images (placeholder), and analytics hook (posthog or plausible—pick one).
Add a simple “public sample note” page for SEO (no user data).
11) Quality: tests + observability
Prompt:
Add minimal tests: schema validations + a couple server action tests. Add logging around transcription + formatting. Add a job queue option (BullMQ/Upstash/QStash) but keep MVP simple. Add rate limiting to transcription endpoint.
12) Deployment checklist
Prompt:
Provide a deployment plan for Vercel (Next.js) + Postgres (Neon/Supabase) + S3 (R2/S3). Include env vars list, Stripe webhook config, and how to run migrations safely.
If you meant the other app from the video (AI logo generator)
Reply “logo app” and I’ll rewrite the Cursor prompts for MakeLogo AI (one-time payment packs, AI logo generation, customization, and delivery).