Note

Building an AI Video Downloader & Summarizer with Cursor

Jul 23, 2026

A practical path from yt-dlp download to AI summary and Stripe membership—with reusable prompts and the decisions that keep the build on track.

A practical build log: how to use Cursor (or any coding agent) to ship a lightweight product for cross-platform video download, AI summarization, and Stripe membership—plus reusable prompts and the pitfalls that matter in production.


Overview

Ship in this order. Avoid stacking download, summary, UI polish, and payments all at once:

  1. Make download work with yt-dlp, then commit to Git
  2. Open a fresh chat for summarization (new task, but grounded in existing docs/code)
  3. Improve UX (same-screen density, auto-trigger summary)
  4. Add payments (Stripe for global users; Alipay/WeChat for China-first audiences)
  5. Deploy (ECS + Docker Compose—see Section 6)

For tool products, the reliable pattern is: core capability first, expansion second. Here, the core is a trustworthy download pipeline.


1. Environment setup

Cursor works well, and so do other coding agents. With Cursor specifically, configure networking and MCP before implementation.

1.1 Cursor networking

Corporate proxies and VPNs can break HTTP/2. In Cursor Network settings, switch HTTP Compatibility Mode to HTTP/1.1, then continue through the proxy.

Cursor Network settings: switch HTTP Compatibility Mode to HTTP/1.1

1.2 Connect MCP first

MCP servers improve documentation lookup and web extraction:

ServiceRoleSite
FirecrawlCrawl and understand web pageshttps://www.firecrawl.dev/
Context7Fetch fresher technical docshttps://context7.com/

MCP Servers panel with Context7 and Firecrawl enabled

Register, get API keys, then paste them into Cursor MCP config:

MCP configuration JSON with API key placeholders

{
  "mcpServers": {
    "context7": {
      "url": "https://mcp.context7.com/mcp",
      "headers": {
        "CONTEXT7_API_KEY": "YOUR_API_KEY"
      }
    },
    "firecrawl": {
      "url": "https://mcp.firecrawl.dev/YOUR_API_KEY/v2/mcp"
    }
  }
}

1.3 Optional skills

UI skills can help with interface quality, for example ui-ux-pro-max-skill:

uipro init --ai cursor --global
# Install to ~/.cursor/skills/

2. Requirements and design

2.1 Decide before coding

DimensionQuestionAnswer in this project
AudienceWho is it for?Users and creators who need to download/save videos
Core valueWhat pain does it remove?Cross-platform download with less manual work
FormHow is it delivered?Web, mobile + desktop
FeasibilityCan it be built?Yes, via yt-dlp
ExpansionWhat comes later?Summaries, translation, paid plans

Three early decisions:

  1. Frontend tone: practical, conversion-oriented.
  2. Backend: required; v1 can stay DB-free and lightweight.
  3. Download strategy: reuse yt-dlp instead of owning every platform parser.

2.2 Bootstrap prompt

2.3 Delivery cadence

  • Confirm architecture in Plan mode before a full Build
  • Finish download first; expand only after it is stable
  • Prefer separated frontend/backend with one production port
Frontend: Vue 3 in browser
        ↕  HTTP /api/*
Backend: FastAPI (Uvicorn)
  ├─ Parse / download (yt-dlp + thin platform adapters)
  ├─ AI summary / ASR / Q&A
  └─ Serve frontend/dist (single port 8000 in production)

2.4 Why FastAPI

FrameworkPerformanceDev speedLearning costFit
FastAPIHighHighLowAPI services, lightweight tools
FlaskMediumHighLowSimple web apps
DjangoMediumMediumHighLarge full-stack systems

One backend can serve many clients. In this product, every frontend can call the same POST /api/summarize.


3. Video summarization

3.1 Keep the sequence

Before building summarization:

  1. Finish core download
  2. Commit to Git
  3. Start a new chat and require a full read of existing docs/code

Document at least: product overview, finished features, architecture, and key APIs.
Useful references: bibigpt.co, NoteGPT, NotebookLM—study differentiation, not copies.

3.2 Summarization prompts

Before coding:

3.3 Models and secrets

DeepSeek is enough for early verification.
Before pushing to GitHub, store keys in .env / local.env and keep them out of git.

3.4 Playback and chapter seak

Chapter timestamps should control the player:

Sequence diagram: chapter click seeks the video player

User clicks chapter 02:35
  → SummaryPanel emit seek(155)
  → HomeView calls VideoPlayer.seekTo(155)
  → video.currentTime = 155

First enter:
  VideoPlayer → prepare(url|file_id)
  ← { src, type }
  → load and play

Some platforms need dedicated playback work. Successful download does not always mean reliable playback.


4. Frontend UX

DirectionPracticeIn this project
Fewer clicksAuto-trigger next stepAuto-summarize after parse
Higher densityShow related content togetherVideo info + summary side by side
Progressive disclosureCore first, details laterHide decorative hero after results
Responsive layoutDevice-specific layoutStack vertically on mobile
FeedbackLodaing / disabled statesBlock duplicate summary clicks

Split UI changes into small steps and push often so regressions are easy to revert.


5. Payments with Stripe

DimensionStripeAlipayWeChat Pay
Coverage46+ countriesMostly ChinaMostly China
IntegrationSimple, strong docs/SDKMedium, business credentialsMedium, business credentials
TestingMature sandbox + CLILimited sandboxLimited sandbox
Currencies135+RMB-firstRMB-first
Fees~2.9% + $0.30~0.6%~0.6%
FitGlobal / SaaS / indie toolsDomestic commerceDomestic social commerce

Choose Stripe for global audiences; Alipay/WeChat are often simpler for China-first products.

Webhooks notify your backend after payment events. Locally, use `stripe listen``to forward events to:

http://127.0.0.1:8000/api/billing/webhook

Listen for checkout.session.completed, customer.subscription.updated/deleted, and invoice.payment_failed.

Security checklist: secrets stay server-side; verify webhook signatures; treat server-written membership state as source of truth.


6. Deployment

Production uses Alibaba Cloud ECS + Docker Compose:

  1. Install Docker on Linux ECS and start the app with the repo's compose.yaml
  2. Inject API keys, database, and Stripe settings via .env.docker / .env
  3. (Optional) Put Baota or Nginx in front of the container port for domain + HTTPS
  4. (Optional) Wire GitHub Actions to rsync and docker compose up on git push

For the full walkthrough (mirror tuning, firewall, health checks, production webhooks, etc.), see Aliyun ECS Deployment Guide: Docker Compose Single-Container Apps.


Appendix: prompt index

SectionPurpose
2.2Bootstrap the downloader
2.4Backend API guardrails
3.2Summarization expansion
4Same-screen UX
5Stripe membership
← Back to Notes