I Built a $10K/Month App from My Mom’s Basement
PostBridge (Web App) — Cursor prompts (copy/paste in order)
Prompt 1 — Project blueprint + tech choices
You are my senior full-stack engineer. Build “PostBridge”: a web app that lets users create social posts, attach media, and schedule/publish to multiple platforms from one place. Start with X (Twitter) first, then design the code so more platforms can be added.
Tech: Next.js (App Router) + TypeScript + Tailwind, Supabase (Auth + Postgres + Storage), Stripe subscriptions, Vercel deployment, PostHog analytics.
Deliver:
A clear architecture plan (routes, components, services, DB schema).
A phased build plan (MVP -> v1 -> v2).
A folder structure proposal.
Important constraints:
Subscription required (no free plan). 7-day trial. Store trial status in DB.
Multi-tenant: each user has their own posts/schedules.
Scheduling must be reliable (background job pattern).
Platform integration must be pluggable (adapter pattern).
Return the plan and the exact tasks for Prompt 2.
Prompt 2 — Initialize repo + tooling
Create the Next.js app with TypeScript and Tailwind. Add ESLint/Prettier. Set up env vars structure for Supabase, Stripe, PostHog, and platform APIs.
Implement:
Landing page route: / (simple marketing page + CTA to sign up)
Auth routes: /login, /signup (Supabase auth)
App shell under /app with protected routing: /app
A minimal UI kit: buttons, inputs, cards, toast
Give me the exact commands, file changes, and code.
Prompt 3 — Supabase schema (tables + RLS)
Design the Supabase Postgres schema and RLS policies for:
profiles (user metadata)
organizations (optional, but design for teams later)
memberships (user -> org role)
social_accounts (stores connected platform tokens per org/user)
posts (content + metadata)
post_media (media references)
schedules (when to publish + status)
publish_attempts (logs)
subscriptions (stripe customer/subscription ids, trial_end, status)
Include:SQL migrations
RLS policies that prevent cross-tenant access
Indexes needed for scheduler queries
Output the SQL scripts.
Prompt 4 — Supabase client + auth guard
Implement Supabase client helpers for server + client components. Add a protected layout for /app that redirects to /login if unauthenticated.
Add:
profile auto-create on first login
“App Home” at /app showing upcoming scheduled posts (empty state)
Provide code changes.
Prompt 5 — Stripe subscriptions + 7-day trial gating
Implement Stripe checkout + customer portal.
Requirements:
No free plan. Users must start a trial with card.
Add pricing tiers scaffold (Starter $9/mo + placeholders for higher tiers).
After trial expires, block scheduling/publishing and show upgrade CTA.
Implementation details:Stripe webhook route to sync subscription status into Supabase.
Middleware/guard: check subscription status server-side for /app features.
Return: routes, webhook handling, and DB updates.
Prompt 6 — Post creation UI (editor)
Build /app/new:
Post editor with content textarea, character count, platform selector (start with X only but UI supports multiple)
Media uploader (images/video) -> Supabase Storage
“Save draft” and “Schedule” buttons
Store post drafts in DB.
Define a clean Post type and validation (zod).
Return code.
Prompt 7 — Scheduling flow + statuses
Build scheduling UI:
Date/time picker with timezone handling
Schedule record in DB with states: queued, publishing, published, failed, canceled
A “Scheduled” list at /app/scheduled, with filters (status, date range)
Ability to edit scheduled time, cancel schedule
Return code + DB updates if needed.
Prompt 8 — Publishing system design (reliable jobs)
Design and implement the scheduler backend. We are on Vercel:
Use Vercel Cron hitting an API route every minute (or 5 min) to find due schedules.
Use a DB “lock” pattern to avoid double publishing (e.g., update ... where status='queued' and scheduled_at<=now() returning *)
For each schedule, call a publisher service and write to publish_attempts.
Return:/api/cron/publish implementation
DB locking approach
Retry policy (e.g., max 3 retries with exponential backoff)
Observability logs
Prompt 9 — Platform adapter: X (Twitter) posting
Implement platform adapter pattern:
interface PlatformPublisher { publish(post, media): Result }
XPublisher implementation
Token storage:store OAuth tokens in social_accounts (encrypted if possible; if not, at least not exposed client-side)
Posting requirements:Text + optional media
Handle errors (rate limits, auth errors)
Return code for:connect X account flow (OAuth)
storing tokens
publishing via X API
Note: paid X API is expected; code should allow plugging keys in env vars.
Prompt 10 — Media pipeline for X
Implement media upload for X:
On post publish: fetch media from Supabase Storage (signed URL) and upload to X, attach media IDs to tweet.
Support up to 4 images for now.
Return code and any limits/validation.
Prompt 11 — Template Builder MVP (2x2 image meme template)
Add a “Template Builder” feature (because user makes short viral templates):
/app/templates/new
Let user upload 4 images, arrange in 2x2 grid, add optional caption text overlay
Export resulting image (PNG) and save to Supabase Storage
Allow attaching exported template image to a post
Implementation: use HTML canvas on client; keep it simple but reliable.
Return code.
Prompt 12 — Analytics with PostHog (key events)
Instrument PostHog:
Track events: signup, start_trial, create_post, schedule_post, publish_success, publish_fail, template_export.
Also add basic funnel-friendly properties: plan, platform, has_media.
Return code and where events fire.
Prompt 13 — Settings: connected accounts + billing + org
Build /app/settings:
Connected accounts: list + connect/disconnect (X)
Billing: manage subscription (Stripe portal)
Profile/org basics (name, timezone)
Return code.
Prompt 14 — Security + hardening pass
Audit and fix:
RLS correctness
Server-only token access (never expose tokens to browser)
Validate inputs on server actions
Rate limit sensitive routes (connect, publish cron)
Ensure cron route is protected (secret header)
Return a checklist + code patches.
Prompt 15 — Nice UX pass (polish)
Improve UX:
Empty states, loading skeletons
Toasts for success/failure
Inline validation messages
“Duplicate post” button
Return code changes only (no long essay).
Prompt 16 — Add second platform “stub” (LinkedIn or Instagram)
Add a second platform integration skeleton:
UI supports selecting multiple platforms
Adapter exists but can be “coming soon” if API work is heavy
Focus: architecture so new platforms are easy.
Return code.
Prompt 17 — Admin logs + support tools
Add /app/logs:
Show publish_attempts with filters (date/status/platform)
Show error messages safely
“Re-run publish” button (if allowed)
Return code.
Prompt 18 — Deployment checklist + env + cron config
Give me:
Vercel env var list
Supabase config steps
Stripe webhook setup steps
Vercel cron configuration
Smoke test plan for production
Keep it concrete and step-by-step.
Curiosity Quench (Mobile App) — shorter Cursor prompt set (Expo)
Prompt A1 — Expo app blueprint
You are my senior mobile engineer. Build “Curiosity Quench”: an app that helps users scroll less by giving them hobby “action plans”.
Stack: React Native + Expo + TypeScript. Backend: Supabase (optional) or local-only MVP.
Monetization: $30/year subscription with 7-day free trial, paywall after onboarding.
Return: screens list, navigation, data model, and MVP build steps.
Prompt A2 — Initialize Expo + navigation + UI
Create Expo app with TypeScript. Add React Navigation.
Implement screens:
Onboarding (3 screens: problem, solution, personalize)
Hobby list (categories)
Hobby detail (action plan steps)
Profile/settings
Add a clean UI kit and state management.
Prompt A3 — Content model + seeded hobby plans
Implement a local JSON content pack of 30 hobbies with:
title, difficulty, time estimate
5–10 step action plan
“start now” CTA
Add search + favorites.
Prompt A4 — Paywall + trial + subscription
Implement RevenueCat (or StoreKit/Play Billing via a library) paywall:
Show paywall after onboarding
7-day free trial flow
Lock premium hobbies behind paywall
Add restore purchases + subscription status UI.
Prompt A5 — “Scroll less” mechanics (lightweight)
Add:
Daily goal: “Do 1 hobby session”
Streaks + reminders (Expo notifications)
Simple progress tracking per hobby
Return code.