Skip to content

edycutjong/launchcopilot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

27 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

LaunchCopilot β€” paste your store listing, get a graded, validated launch kit (ASO 27 β†’ 93)

Live Demo Pitch Video Pitch Deck

CI tests engine stack license

Paste your app's store link. Get a graded, validated launch kit β€” in about a minute.

Built for HackOnVibe (July 2026) Β· theme: effective promotion of a newly launched mobile app


πŸ“Έ See it in Action

1 Β· Paste a link β†’ auto-fill 2 Β· Grade (28 rules) 3 Β· Landing β†’ live tool
Auto-fill from a store link ASO scorecard with per-field scores Landing page
Paste an App Store / Google Play URL β†’ the real icon, rating, screenshots, and every field fill in. Deterministic score with per-field bars + exact fixes (light/dark). A pitch that flows straight into the working grader.

β–Ά Try it yourself, no signup, no key: launchcopilot.edycu.dev β€” paste your app's link and watch it grade.

πŸ’‘ The Problem & Solution

Solo developers ship good apps and get six downloads β€” four of them friends. Not because the app is bad, but because its store listing quietly breaks App Store Optimization rules they've never heard of, and launch marketing (ASO, Product Hunt mechanics, per-community etiquette) is a specialist skill they can't buy at $2–5k an agency.

LaunchCopilot performs the launch, not advice about it. Paste your listing β†’ it grades your ASO against 28 deterministic rules, then generates a validated launch kit that's provably store-legal β€” because the same engine that grades you also grades the AI.

Key Features

  • πŸ”— Paste-a-link auto-fill β€” drop an App Store / Google Play URL and the whole listing (title, subtitle, description, screenshots, rating) is pulled in for you. (No AI β€” official iTunes API + Play scrape.)
  • πŸ“Š 28-rule ASO engine β€” deterministic, sub-millisecond, scores 0–100 with per-field findings and exact fixes. Pure encoded store rules, no model.
  • ♻️ Validator-in-the-loop β€” the AI's rewritten listing is re-linted and auto-repaired until it scores β‰₯ 90; the model is held to the same bar as the human.
  • 🎭 Persona-panel QA β€” a focus group synthesized from your own listing critiques every artifact in-character; weak ones regenerate before you see them.
  • πŸ†“ Free API + CLI, no key to grade β€” POST /api/analyze Β· npm run aso-lint Β· runs fully in DEMO_MODE.

πŸ—οΈ Architecture & Tech Stack

Next.js 16 + React 19 + Tailwind v4 (one codebase, app + API) Β· Claude (claude-opus-4-8 writers + claude-haiku-4-5 persona panel) Β· Zod schema-constrained generation Β· Vitest / Playwright / semantic-release for the harness.

flowchart LR
  A["πŸ”— Paste store link"] --> B["Extract listing<br/>iTunes API Β· Play scrape"]
  B --> C["28-rule ASO lint<br/><i>deterministic Β· sub-ms Β· no AI</i>"]
  C --> D["Score 0–100<br/>+ per-field fixes"]
  D --> E["Claude Opus<br/>5 parallel writers"]
  E --> F{"Re-lint the rewrite<br/>score β‰₯ 90?"}
  F -- "no Β· inject findings" --> E
  F -- "yes" --> G["Claude Haiku<br/>persona-panel QA"]
  G --> H["πŸš€ Launch kit<br/>store Β· PH Β· social Β· community Β· press"]
Loading

Where the interesting code lives (for judges skimming the source):

Capability File
28-rule ASO engine (the deterministic judge) src/lib/aso-lint/rules.ts
Paste-a-link extraction + /api/extract src/lib/extract/index.ts Β· src/app/api/extract/route.ts
Validator-in-the-loop kit pipeline src/lib/pipeline/
Free grading API (no key) src/app/api/analyze/route.ts
Self-contained pitch deck (served at /pitch) public/pitch/index.html

🎯 HackOnVibe theme fit

The theme is effective promotion of a newly launched mobile app β€” LaunchCopilot is that, end to end: it grades the listing (promotion surface #1), rewrites it to pass, and produces the Product Hunt / social / community / press assets that are the launch. And it recurs β€” every app update is a re-launch, so Re-grade + Content-Refill regenerate next week's kit in a click.

πŸš€ Run it Locally (For Judges)

npm install
npm test                                              # 150 unit tests
npm run aso-lint -- data/fixtures/pocketplants.json   # CLI: 27/100 (F) + fixes
npm run dev                                            # app at http://localhost:3000

Note for judges β€” you can skip the API key. Grading, the CLI, and the E2E suite all run with no credentials (DEMO_MODE). A key (ANTHROPIC_API_KEY in .env.local) is only needed to generate the AI launch kit; the deterministic grader never needs one.

Grade any listing over HTTP β€” no key required:

curl -X POST http://localhost:3000/api/analyze \
  -H 'content-type: application/json' -d @data/fixtures/pocketplants.json

πŸ§ͺ Testing & engineering harness

A 6-stage CI/CD pipeline runs on every push (Quality β†’ Security β†’ Build β†’ E2E β†’ Performance β†’ Deploy gate). When it goes green on main, a separate Release workflow runs semantic-release: it reads the conventional commits, computes the next version, updates the changelog, and publishes a tagged GitHub Release automatically.

npm run ci          # lint + typecheck + tests with coverage (the quality gate)
npm run e2e         # Playwright E2E (demo mode β€” no API key)
npm run release:dry # preview the next semantic version locally
Layer Tooling Status
Code quality ESLint + TypeScript strict βœ…
Unit tests Vitest β€” 150 tests, 100% coverage of the deterministic core βœ…
E2E tests Playwright β€” 3 suites (smoke Β· API Β· responsive), desktop + mobile βœ…
Security (SAST) CodeQL βœ…
Security (SCA) Dependabot + npm audit βœ…
Secret scanning TruffleHog (verified) βœ…
Performance Lighthouse CI βœ…
Releases semantic-release (conventional commits β†’ semver, auto GitHub Release) βœ…
Community profile CoC Β· Contributing Β· Security Β· issue/PR templates βœ… 100%

Benchmark (npm run bench, 5,000 runs over 3 fixtures): the lint engine runs at p50 0.39 ms Β· p95 0.86 ms Β· ~2,180 listings/sec β€” fast enough to be the AI's inline validator on every repair attempt.

πŸ› Build notes β€” a few bugs worth remembering

  • The SVG logo was pinned to (0,0). In the animated README hero, a CSS transform (the bob animation) silently overrode the element's transform="translate()" attribute β€” so the icon ignored every position I set. Fix: split positioning (outer group, attribute) from animation (inner group, CSS).
  • A stopword leak flipped a rule. The "what does your app do" text was matched against the description without filtering stopwords, so "the/for/your" counted as real content β€” caught only because a test expected a finding that didn't fire.
  • Google Play embeds rival apps' copy. The paste-a-link extractor first grabbed the longest description on the page β€” which was a competitor's. Fixed by matching the description to the target app via distinctive name/tagline tokens.
  • The social-proof regex missed real phrasing. "Rated 4.8 by 3,200 users" didn't match the first pattern; a fixture pinned the expected score and surfaced it.

⚠️ Honest limitations

No auth yet Β· IP-based rate limits reset on redeploy Β· rules encode public ASO best practices, not Apple's private ranking algorithm Β· English-only v1 Β· paste-a-link extraction is best-effort β€” the App Store subtitle is anchored to the app's own listing object (never a neighbouring app's), and anything it can't confidently read is flagged, never guessed.

Thank you for reviewing LaunchCopilot. β€” Edy

About

πŸš€ Paste your app's store link β†’ a graded ASO report (28 deterministic rules) + a validated AI launch kit, in ~1 min. Built for HackOnVibe.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors