🚀 Deploy Prompt Pack · 9 prompts · Day 6 · Ship it live

From localhost to the world.

Favicon · social preview · SEO meta · custom domain · robots + sitemap · Search Console · Lighthouse · pre-launch gate · post-launch smoke test. By tonight your app is live at your custom domain · with a proper WhatsApp preview · and Google can find it.

Workshop stack: Lovable × GitHub × Supabase × Claude Cowork · with Sentry · PostHog · Stripe · Resend MCPs. No terminals · no manual DNS edits blind · no publishing without the gate.

The 5-phase flow.

Run in order · each output feeds the next. P07 is the gate — do not skip.

SETUP · P00 ASSETS · P01–P02 META · P03 DOMAIN + INDEXING · P04–P06 LAUNCH · P07–P08

9 prompts · run in this order

⚙ Phase 0 · SETUP · load context once
⚙ PROMPT 00 · CONTEXT LOADER

Load my app · brand · domain · stack.

Why: Every deploy prompt below needs to know your product name, brand tokens (colors + fonts), target domain, and what's already deployed. Read it once · reference it everywhere. Zero re-typing after this.

Phase 0 · run first 2 min Required
Anthropic Cowork PM · context-first prompting
# ROLE
You are my launch engineer for Day 6 of the 10-Day Sprint. You have full access
to my Cowork Project (Foundation Doc, PRD, brand tokens) and chat memory.
Do NOT ask me for anything you can infer.

# READ
1 · Cowork Project — Foundation Doc · PRD · brand tokens · Project-Plan.md
2 · Chat memory — everything from Day 1–5
3 · Lovable app — current preview URL · current title tag · any existing meta
4 · GitHub MCP — repo · confirm public/ folder exists (favicon lives here)
5 · Domain intent — do I have a domain purchased yet? which registrar?

# OUTPUT · 10-line brief · nothing more
1 · Product name (exact casing) + 1-line tagline
2 · Target domain (e.g. myapp.com · or "not purchased yet")
3 · Brand colors: primary hex · accent hex · background hex (from Foundation Doc)
4 · Brand fonts: heading · body (from Foundation Doc)
5 · Logo asset: URL or "generate one via P01"
6 · Persona / audience: 1 line
7 · Currently deployed at: URL (Lovable preview or "not deployed yet")
8 · Existing title tag: what does <title> currently say?
9 · Existing favicon: default Lovable · or custom (from public/favicon.ico)?
10 · Biggest launch risk: your best guess

# CONFIRM · one question only
End with: "Is this brief correct? Any 1-line fix?"
Wait for my "yes" · then P01–P08 all reference "the context you have."

# SELF-CHECK
- Did I actually query GitHub MCP for the public/ folder?
- Did I read Foundation Doc for brand tokens · or guess?
- Did I keep it to 10 lines · or bloat?
MCP check: if GitHub MCP isn't connected yet · connect it now: Cowork Settings → Connectors → Add → GitHub. Deploy prompts read your repo directly · so this saves 20 minutes of copy-paste.
🎨 Phase 1 · ASSETS · favicon + social preview · ~15 min
🎨 PROMPT 01 · FAVICON + APP ICONS · DESIGN + INSTALL

Favicon · the tiniest first impression.

Why: Default Lovable favicon = amateur signal. Custom favicon = "this is a real product." Cowork generates the icons from your brand · Lovable installs them · every browser tab · phone home screen · and Google search result now shows YOUR mark.

Phase 1 · assets 8 min
Aaron Draplin · Field Notes · minimal marks Michael Bierut · Pentagram · icon reduction Sara Soueidan · SVG + web icon standards
# ROLE · WORLD-CLASS PANEL
  - Aaron Draplin (Field Notes) — minimal marks that read at 16px
  - Michael Bierut (Pentagram) — icon reduction to its atomic form
  - Sara Soueidan — SVG standards + web icon best practices

# CONTEXT
Use primed context from P00 (product name · brand colors · logo direction).
Stack: Lovable + GitHub + Cowork. No terminal.

# GOAL
Design + install a full favicon set in 3 sizes + Apple touch icon + Android icons
+ Web App Manifest. All from ONE source SVG · matching my brand tokens.

# YOUR PROCESS · 4 stages

STAGE 1 · DESIGN (3 min)
Ask ONE question: "One-letter monogram · a shape · or my existing logo mark?"
Then generate ONE 512×512 SVG:
  - Solid background color = my brand primary
  - Foreground = my brand accent OR white
  - Padding: 15% (icon reads clearly at 16×16)
  - Simple enough to read at browser-tab size (Draplin: "if it doesn't work
    at 16px · it doesn't work")
Show me the SVG as inline preview in chat before proceeding.
STOP · ask "Approve this favicon or want variations?"

STAGE 2 · EXPORT (2 min · via realfavicongenerator.net)
Once approved · walk me through:
  1 · Open realfavicongenerator.net in a new tab
  2 · Upload the approved SVG
  3 · Customize:
     · iOS: solid background = my brand primary
     · Android: matching theme color
     · Desktop browser: transparent
  4 · Click "Generate your Favicons and HTML code"
  5 · Download the ZIP · you'll get:
     · favicon.ico (multi-size: 16 · 32 · 48)
     · apple-touch-icon.png (180×180)
     · android-chrome-192x192.png
     · android-chrome-512x512.png
     · site.webmanifest

STAGE 3 · INSTALL (via Lovable · 2 min)
Produce a paste-ready Lovable chat prompt:

  "Add these favicon files to public/ folder:
   - favicon.ico
   - apple-touch-icon.png
   - android-chrome-192x192.png
   - android-chrome-512x512.png
   - site.webmanifest

   Then update index.html <head> with:
   <link rel=\"icon\" href=\"/favicon.ico\" sizes=\"any\">
   <link rel=\"icon\" href=\"/icon.svg\" type=\"image/svg+xml\">
   <link rel=\"apple-touch-icon\" href=\"/apple-touch-icon.png\">
   <link rel=\"manifest\" href=\"/site.webmanifest\">
   <meta name=\"theme-color\" content=\"[my brand primary hex]\">"

STAGE 4 · VERIFY (1 min)
  - Open deployed Lovable URL in a fresh incognito window
  - Check browser tab shows the icon (not blue Lovable default)
  - On iPhone: Add to Home Screen · confirm icon looks right
  - Run through realfavicongenerator.net/favicon_checker · paste URL
  - Confirm all sizes present · no warnings

# DELIVERABLE
- 1 approved source SVG (saved to Cowork Project for reuse)
- 5 favicon files installed to public/
- HTML <head> updated
- Verified on desktop tab + phone home screen

# QUALITY BAR
- Draplin: does it read at 16×16 · in a busy tab strip?
- Bierut: could a stranger describe the shape after 2 sec?
- Soueidan: is the SVG source clean + accessible (title element)?
Pro tip: save the source SVG to your Cowork Project · it becomes the seed for social preview (P02) · pitch deck slides · X profile · anywhere you need a mark.
🖼 PROMPT 02 · SOCIAL PREVIEW · OG + TWITTER CARD

The image that sells your app in DMs.

Why: When someone pastes your URL in WhatsApp · LinkedIn · X · iMessage · Slack — an image renders. Default = blank ugly card. Custom OG image = a mini billboard for your product. This prompt designs it + installs it + tests it renders correctly across all 4 major platforms.

Phase 1 · assets 10 min
Jason Fried · Basecamp · anti-generic OG Rauno Freiberg · Vercel design · social-first product design Sara Soueidan · OG standards + a11y
# ROLE · WORLD-CLASS PANEL
  - Jason Fried (Basecamp) — anti-generic; make the OG image sell
  - Rauno Freiberg (ex-Vercel design) — social-first product design
  - Sara Soueidan — OG + Twitter card standards + accessibility

# CONTEXT
Use primed P00 (product · tagline · brand colors · fonts · favicon SVG from P01).
Stack: Lovable + GitHub + Cowork.

# GOAL
Ship a 1200×630 Open Graph image + Twitter card meta · installed · tested to
render correctly on WhatsApp · LinkedIn · X · iMessage · Slack.

# YOUR PROCESS · 4 stages

STAGE 1 · DESIGN (4 min)
Ask ONE question: "Does the OG image show (a) your app UI screenshot · (b) a
bold typographic layout with your tagline · (c) an illustration/graphic
with your product name — which fits your brand best?"

Based on my answer · generate the OG image spec:
  Dimensions: 1200×630 (Facebook + LinkedIn + WhatsApp + iMessage standard)
  Twitter version: same dimensions work for "large image" card
  Safe zone: keep critical content within 1080×540 center (some crops)
  File size: < 300KB (fast preview loading · esp. WhatsApp mobile)
  Format: PNG (JPG has artifacts on typography · WebP not universally supported)

Content:
  - Product name (Instrument Serif or my brand heading font · 72–96pt)
  - Tagline (1 line max · 32–40pt · my brand body font)
  - Small logo mark bottom-left or top-left
  - Brand colors · high contrast · WCAG AA (4.5:1)
  - No stock photos · no generic gradient boxes

Show me the image · then ask "Approve or want variations?"

STAGE 2 · EXPORT + PLACE (2 min)
Once approved · save as public/og-image.png (main) +
public/twitter-image.png (same file or 1200×600 variant if
different content wanted).

STAGE 3 · INSTALL META TAGS (via Lovable · 2 min)
Paste-ready Lovable prompt:

  "Add these meta tags to index.html <head>:

  <!-- Open Graph (Facebook, LinkedIn, WhatsApp, iMessage) -->
  <meta property=\"og:title\" content=\"[Product name] — [tagline]\">
  <meta property=\"og:description\" content=\"[1-line description]\">
  <meta property=\"og:image\" content=\"https://[my-domain]/og-image.png\">
  <meta property=\"og:image:width\" content=\"1200\">
  <meta property=\"og:image:height\" content=\"630\">
  <meta property=\"og:image:alt\" content=\"[describe image for a11y]\">
  <meta property=\"og:url\" content=\"https://[my-domain]\">
  <meta property=\"og:type\" content=\"website\">
  <meta property=\"og:site_name\" content=\"[Product name]\">

  <!-- Twitter Card -->
  <meta name=\"twitter:card\" content=\"summary_large_image\">
  <meta name=\"twitter:title\" content=\"[Product name] — [tagline]\">
  <meta name=\"twitter:description\" content=\"[1-line description]\">
  <meta name=\"twitter:image\" content=\"https://[my-domain]/og-image.png\">
  <meta name=\"twitter:image:alt\" content=\"[describe image]\">"

Notes:
  - Absolute URL required · not relative (WhatsApp is strict)
  - alt text required for a11y

STAGE 4 · TEST across 4 platforms (2 min)
Guide me to test:
  1 · opengraph.xyz/url/https://[my-domain] — instant preview
  2 · Facebook Sharing Debugger — developers.facebook.com/tools/debug
     · scrapes fresh · confirm no warnings
  3 · LinkedIn Post Inspector — linkedin.com/post-inspector
  4 · Send URL to yourself on WhatsApp · confirm preview loads within 2 sec

# DELIVERABLE
- 1200×630 og-image.png installed · < 300KB
- Full OG + Twitter meta tags in index.html
- Verified rendering on WhatsApp · LinkedIn · Facebook Debugger
- Passing accessibility (alt text present)

# QUALITY BAR
- Fried: would a stranger stop scrolling because of THIS image?
- Freiberg: is the image doing 90% of the persuasion · or is it text-heavy?
- Soueidan: alt text present + descriptive · not "og image"?
WhatsApp cache tip: WhatsApp caches OG previews for 7 days. If you iterate the image later · users won't see the update. Ship it right the first time · or add a query string ?v=2 to bust cache.
🏷 Phase 2 · META · SEO fundamentals · 10 min
🏷 PROMPT 03 · SEO META · TITLE · DESCRIPTION · SCHEMA

Google finds you · only if you tell it who you are.

Why: Missing title tag = "Untitled" on Google. Missing meta description = Google auto-generates a bad one. Missing schema = no rich snippets. This prompt writes all of it · tuned to YOUR keywords · installed via Lovable in 5 min.

Phase 2 · meta 10 min
Aleyda Solis · technical SEO for indie apps John Mueller · Google Search Advocate · what actually matters Marie Haynes · E-E-A-T + schema.org · rich snippets
# ROLE · WORLD-CLASS PANEL
  - Aleyda Solis — technical SEO for indie + startup apps
  - John Mueller (Google Search Advocate) — what actually moves rankings
  - Marie Haynes — schema.org · E-E-A-T · rich snippets

# CONTEXT
Use primed P00 (product · tagline · persona · target keywords in Foundation Doc).
Stack: Lovable + GitHub + Cowork.

# GOAL
Write all SEO meta tags for my landing + top 5 routes · install via Lovable ·
verify via Google's tools.

# YOUR PROCESS · 4 stages

STAGE 1 · KEYWORD ANCHOR (2 min)
Ask ONE question:
  "What 3-5 phrases would your ideal user type into Google to find something
   like your app? (Steal from Foundation Doc if answered before.)"

Then propose:
  - Primary keyword: 1 short phrase (2-4 words)
  - Secondary keywords: 2-3 longer variants
  - Anti-keywords: what NOT to appear for (avoid confusion)

STAGE 2 · WRITE META (5 min)
For each of my top 5 routes (landing + 4 others):

  Title tag: 50-60 chars · primary keyword in first 30 chars · brand name last
    Format: "[Primary benefit] — [Product name]"
    Example: "Ship your MVP in 10 days — Build Sprint"

  Meta description: 140-160 chars · benefit + differentiator + soft CTA
    Format: "[What it does]. [How it's different]. [Soft CTA]."
    Example: "Vibe-code your way from idea to first paying user in 10 days at
              Network School. Cohort of 30. Live workshops daily. Apply now."

  Canonical URL: absolute · confirm no trailing slash inconsistency

  Lang: <html lang=\"en\"> (or my locale)

STAGE 3 · SCHEMA.ORG · JSON-LD (2 min)
Add structured data via Lovable prompt · type based on my app:
  - SaaS app → SoftwareApplication
  - Course / info product → Course
  - Marketplace → Product + Offer
  - Local biz → LocalBusiness

Example JSON-LD for SoftwareApplication:
  <script type=\"application/ld+json\">
  {
    \"@context\": \"https://schema.org\",
    \"@type\": \"SoftwareApplication\",
    \"name\": \"[Product name]\",
    \"applicationCategory\": \"[BusinessApplication / etc]\",
    \"operatingSystem\": \"Web\",
    \"offers\": { \"@type\": \"Offer\", \"price\": \"[X]\", \"priceCurrency\": \"USD\" }
  }
  </script>

STAGE 4 · INSTALL VIA LOVABLE + VERIFY (1 min)
Produce a single Lovable chat prompt containing all 5 route meta blocks +
the JSON-LD. Ask Lovable to add them cleanly · not duplicate any existing
tags.

Verify via:
  1 · Google Rich Results Test: search.google.com/test/rich-results
  2 · Paste my URL · confirm JSON-LD parses · no errors
  3 · metatags.io · preview all cards at once

# DELIVERABLE
- Title tag + meta description for 5 routes
- Canonical URLs set
- HTML lang attribute set
- JSON-LD schema installed and validated
- No duplicate meta tags (Lovable can generate them)

# QUALITY BAR
- Solis: are my keywords realistic for a 30-user MVP · or am I chasing
  \"AI journal\" (impossible in month 1)?
- Mueller: is my meta description written for a HUMAN · not a bot?
- Haynes: does my JSON-LD show E-E-A-T (experience · expertise · authority · trust)?
🌐 Phase 3 · DOMAIN + INDEXING · 15 min
🌐 PROMPT 04 · CUSTOM DOMAIN · DNS + TLS · VIA LOVABLE

Your own URL. Everywhere. Signed.

Why: lovable.app/xyz = not a business. yourapp.com = credibility · trust · shareability. This prompt walks you through purchasing a domain (if needed) · connecting it to Lovable · configuring DNS records · verifying TLS (HTTPS) · and setting up www→apex (or reverse) so all URL variants work.

Phase 3 · domain 15 min end-to-end
Guillermo Rauch · Vercel/DNS UX standards Julia Evans · Wizard Zines · DNS + TLS demystified Troy Hunt · HIBP · HTTPS + HSTS
# ROLE · WORLD-CLASS PANEL
  - Guillermo Rauch — modern DNS + custom domain UX
  - Julia Evans (Wizard Zines) — DNS + TLS explained clearly
  - Troy Hunt (HIBP) — HTTPS + HSTS · security posture

# CONTEXT
Use primed P00 (target domain from context). Stack: Lovable native domain
connection · no manual server config. If I haven't purchased a domain yet ·
guide me.

# GOAL
Get me from "lovable.app/xyz" to "https://[my-domain]" with valid TLS ·
www → apex redirect (or reverse) · verified.

# YOUR PROCESS · 5 stages

STAGE 1 · DOMAIN PURCHASE (5 min · skip if I have one)
Ask ONE question:
  "Do you have a domain already? If yes · which registrar? If no · I recommend:
    (a) Cloudflare Registrar (at-cost pricing · best DNS UX)
    (b) Namecheap (cheap · simple)
    (c) Porkbun (cheapest first year · quirky UX)
   Which do you want to use?"

If purchasing new · walk step-by-step:
  - Search for [my-product].com · .app · .io · .co in that order of preference
  - Avoid hyphens · numbers · foreign TLDs unless brand-specific
  - Turn ON WHOIS privacy (free at Cloudflare · $8 at Namecheap)
  - Enable auto-renewal
  - Confirm purchase

STAGE 2 · LOVABLE DOMAIN CONNECTION (3 min)
In Lovable:
  1 · Project Settings → Domains → Add custom domain
  2 · Enter [my-domain].com
  3 · Lovable shows you 2 required DNS records:
     · A record: @ → [Lovable IP shown in UI]
     · CNAME record: www → [Lovable subdomain shown]
  4 · Copy both

STAGE 3 · DNS RECORDS AT REGISTRAR (3 min)
Guide me to registrar's DNS panel:
  Cloudflare: Domain → DNS → Records → Add record
  Namecheap: Domain List → Manage → Advanced DNS → Add New Record
  Porkbun: Domain → DNS → Add

Add:
  Type: A     · Host: @    · Value: [Lovable IP]        · TTL: 300 (5 min)
  Type: CNAME · Host: www  · Value: [Lovable subdomain] · TTL: 300

If Cloudflare · set proxy status to \"DNS only\" (grey cloud) for first setup ·
switch to proxied (orange cloud) after TLS is confirmed working.

STAGE 4 · TLS + VERIFICATION (3 min)
Wait 2-5 minutes for DNS propagation. Then:
  1 · In Lovable Domains panel · click \"Verify\"
  2 · Lovable auto-provisions Let's Encrypt cert (no manual TLS config)
  3 · Test both variants:
     · https://[my-domain] — should load with green lock
     · https://www.[my-domain] — should redirect to apex (or reverse)
     · http://[my-domain] — should auto-upgrade to HTTPS
  4 · Add HSTS header via Lovable prompt:
     <meta http-equiv=\"Strict-Transport-Security\"
           content=\"max-age=31536000; includeSubDomains\">

STAGE 5 · UPDATE ALL OG + CANONICAL URLS (1 min)
Lovable chat prompt: \"Replace every hardcoded lovable.app URL in my code with
https://[my-domain]. Include og:url · twitter:url · canonical link tags ·
sitemap URLs · robots.txt sitemap reference.\"

# DELIVERABLE
- Domain purchased with WHOIS privacy + auto-renewal
- A + CNAME records added at registrar
- TLS certificate active · green lock
- www → apex redirect (or reverse) working
- HSTS header set
- All internal URLs updated to custom domain

# QUALITY BAR
- Rauch: does BOTH www AND apex work · no dead ends?
- Evans: did I explain what an A vs CNAME record does · or just tell them to paste?
- Hunt: HSTS active · no mixed content warnings?
DNS gotcha: if the domain was registered in the last 24 hours · some nameservers cache "does not exist" and won't propagate for up to 48h. Free workaround: dnschecker.org · paste your domain · see which regions have propagated.
🤖 PROMPT 05 · ROBOTS.TXT + SITEMAP.XML + SEARCH CONSOLE

Tell Google · "crawl this · not that".

Why: Google won't fully index your app for weeks without submission. This prompt (a) generates robots.txt + sitemap.xml via Lovable · (b) walks you through Google Search Console setup · (c) submits your sitemap manually to skip the 2-week wait. Your app appears in Google search within 24-48 hours instead of weeks.

Phase 3 · indexing 10 min
John Mueller · Google Search Advocate Aleyda Solis · indie SEO · sitemap best practices
# ROLE · WORLD-CLASS PANEL
  - John Mueller (Google) — what Search actually cares about
  - Aleyda Solis — indie sitemap patterns · under-the-radar wins

# CONTEXT
Use primed P00. Domain live from P04. Stack: Lovable + GitHub + Cowork.

# GOAL
Ship robots.txt + sitemap.xml + verify in Google Search Console + submit
sitemap for fast indexing.

# YOUR PROCESS · 4 stages

STAGE 1 · ROBOTS.TXT (2 min · via Lovable)
Ask ONE question: "Any routes that should NOT be indexed? (e.g. /admin · /debug ·
/dashboard · /pricing-experimental)"

Then Lovable prompt:
  \"Create public/robots.txt with:

  User-agent: *
  Allow: /
  Disallow: /admin
  Disallow: /api
  [Disallow: any private routes I named]

  Sitemap: https://[my-domain]/sitemap.xml\"

STAGE 2 · SITEMAP.XML (2 min · via Lovable)
Lovable prompt:
  \"Generate public/sitemap.xml listing every public route with:
   - <loc> = absolute URL (my-domain)
   - <lastmod> = today's ISO date
   - <changefreq> = weekly for marketing pages · monthly for legal
   - <priority> = 1.0 for landing · 0.8 for main routes · 0.5 for legal

   Include ONLY publicly accessible routes. Exclude anything in robots.txt Disallow."

STAGE 3 · GOOGLE SEARCH CONSOLE SETUP (4 min)
Walk me through:
  1 · Open search.google.com/search-console
  2 · Add property → Domain property (recommended · covers www + apex + subdomains)
  3 · Enter [my-domain] (no https · no path)
  4 · Google shows a TXT record to add
  5 · Add at registrar DNS:
     Type: TXT · Host: @ · Value: google-site-verification=[token]
  6 · Wait 2 min · click Verify

STAGE 4 · SUBMIT SITEMAP (2 min)
In Search Console:
  1 · Left sidebar → Sitemaps
  2 · Enter: sitemap.xml
  3 · Submit
  4 · Should say "Success" within 30 sec
  5 · First indexing usually within 24-48 hours (vs 2 weeks unassisted)

Bonus:
  - URL Inspection tool → paste homepage URL → click "Request Indexing"
     · pushes Google to crawl immediately
  - Repeat for your top 3 landing pages

# DELIVERABLE
- robots.txt live at /robots.txt
- sitemap.xml live at /sitemap.xml
- Google Search Console verified (TXT record method)
- Sitemap submitted · showing "Success"
- Top 3 URLs manually requested for indexing

# QUALITY BAR
- Mueller: is my sitemap actually accurate · or listing routes that 404?
- Solis: did I use Domain property (not URL prefix) · so future subdomains work?
Bing/DuckDuckGo tip: Bing Webmaster Tools has one-click "Import from Search Console" · takes 30 seconds · covers ~7% of searches Google doesn't. Free win.
⚡ PROMPT 06 · LIGHTHOUSE AUDIT + CORE WEB VITALS FIX

Speed is a feature. Confirm it.

Why: Google ranks fast sites higher. Users bounce from slow ones (53% leave if load > 3 sec). This prompt runs Lighthouse via Chrome DevTools · targets any Core Web Vitals red flag · outputs a paste-ready Lovable prompt to fix each issue.

Phase 3 · performance 15 min
Addy Osmani · Google Chrome · Core Web Vitals Harry Roberts · CSS Wizardry · performance Ilya Grigorik · "High Performance Browser Networking"
# ROLE · WORLD-CLASS PANEL
  - Addy Osmani (Google Chrome) — Core Web Vitals authority
  - Harry Roberts (CSS Wizardry) — practical web performance
  - Ilya Grigorik — HTTP/2 · resource prioritization

# CONTEXT
Use primed P00. Deployed at custom domain from P04. Stack: Lovable + GitHub +
Cowork. Chrome DevTools open on my laptop.

# GOAL
Run Lighthouse on mobile + desktop · identify all Core Web Vitals issues ·
produce paste-ready Lovable fix prompts.

# YOUR PROCESS · 4 stages

STAGE 1 · RUN LIGHTHOUSE (3 min)
Walk me through:
  1 · Open https://[my-domain] in Chrome incognito (no extensions)
  2 · DevTools (⌘⌥I / F12) → Lighthouse tab
  3 · Categories: check Performance · Accessibility · Best Practices · SEO
  4 · Device: MOBILE first (that's what Google ranks on)
  5 · Click "Analyze page load"
  6 · Wait ~30 sec · screenshot the 4 scores
  7 · Also run for DESKTOP · compare

STAGE 2 · TARGET THRESHOLDS
Green zone (aim for all four):
  Performance:    ≥ 90 mobile · ≥ 95 desktop
  Accessibility:  ≥ 95
  Best Practices: ≥ 95
  SEO:            = 100 (should be trivial after P03)

Core Web Vitals (green):
  LCP (Largest Contentful Paint): < 2.5s
  CLS (Cumulative Layout Shift):  < 0.1
  INP (Interaction to Next Paint): < 200ms
  FCP (First Contentful Paint):   < 1.8s
  TBT (Total Blocking Time):      < 200ms

STAGE 3 · DIAGNOSE + FIX (8 min)
For EACH failing metric · Lighthouse shows "Opportunities" section. For the top
3 opportunities · produce a paste-ready Lovable prompt:

Common issues + fixes:
  · Images not optimized → "Convert all <img> tags to use loading='lazy' ·
                                     add width/height attributes to prevent CLS ·
                                     serve WebP with PNG fallback via <picture>"
  · Render-blocking CSS   → "Inline critical CSS · defer the rest with
                                     media='print' onload trick"
  · Unused JavaScript     → "Code-split routes with React.lazy + Suspense ·
                                     move analytics + non-critical JS to defer"
  · Font swap flash (FOUT) → "Add font-display: swap · preload primary font
                                     with <link rel='preload' as='font'>"
  · Missing alt text      → "Add descriptive alt to every <img> ·
                                     empty alt='' for decorative images"
  · Contrast fails        → "Bump all body text to 4.5:1 contrast minimum ·
                                     check via webaim.org contrast checker"

STAGE 4 · RE-RUN + VERIFY (2 min)
After Lovable applies fixes:
  1 · Re-deploy · wait for Lovable to build
  2 · Hard refresh in incognito (⌘⇧R)
  3 · Re-run Lighthouse
  4 · Compare · confirm scores climbed
  5 · If any category still red · loop back to STAGE 3

# DELIVERABLE
- Lighthouse scores ≥ target on mobile + desktop
- All Core Web Vitals in GREEN
- Screenshots saved for pre-launch checklist (P07)

# QUALITY BAR
- Osmani: did I test on mobile (Google's ranking target) · not just desktop?
- Roberts: are fixes surgical (biggest wins first) · not scattershot?
- Grigorik: is the largest image on the page > 200KB · and if so · why?
🚦 Phase 4 · LAUNCH · the gate + the smoke test
🚦 PROMPT 07 · PRE-LAUNCH CHECKLIST · THE GATE ⭐

The flagship publish gate. 20-item audit.

Why: This is the FINAL check before you publish your domain to the world (WhatsApp broadcast · LinkedIn post · X thread). It audits favicon · social preview · SEO · domain · robots · Lighthouse · plus the security audit from Day 5 P05 and the bug hunter from Day 5 P04. Any 🔴 CRITICAL blocks publish. This is the gate.

Phase 4 · gate 15 min BLOCKING
Michael Nygard · "Release It!" · launch readiness Kelsey Hightower · production discipline Charity Majors · observability at launch
# ROLE · WORLD-CLASS LAUNCH PANEL
  - Michael Nygard ("Release It!") — production hardening + launch readiness
  - Kelsey Hightower — production discipline · what breaks under real users
  - Charity Majors (Honeycomb) — observability at launch · what to watch

# CONTEXT
Use primed P00. All work from P01-P06 done. Also: Day 5 P04 (bug hunter) and
Day 5 P05 (security audit) have been run.

# GOAL
Audit 20 items across 6 categories · block publish if any 🔴 CRITICAL found.

# AUDIT · 20-item checklist

CATEGORY 1 · ASSETS (P01-P02)
  🔲 Favicon renders on browser tab (not Lovable default)
  🔲 Apple Touch Icon set (test: Add to Home Screen on iPhone)
  🔲 Social preview image visible on WhatsApp when URL is shared
  🔲 OG image renders in Facebook Sharing Debugger with no errors

CATEGORY 2 · META (P03)
  🔲 Every route has unique <title> · 50-60 chars · benefit-first
  🔲 Every route has meta description · 140-160 chars
  🔲 JSON-LD schema validates in Google Rich Results Test
  🔲 <html lang="en"> set

CATEGORY 3 · DOMAIN + TLS (P04)
  🔲 https://[my-domain] loads with green lock
  🔲 https://www.[my-domain] redirects to apex (or reverse) · consistent
  🔲 http:// auto-upgrades to https://
  🔲 HSTS header present

CATEGORY 4 · DISCOVERABILITY (P05)
  🔲 robots.txt lives at /robots.txt · not blocking /
  🔲 sitemap.xml lives at /sitemap.xml · lists every public route
  🔲 Google Search Console verified · sitemap submitted

CATEGORY 5 · PERFORMANCE (P06)
  🔲 Lighthouse Performance ≥ 90 mobile
  🔲 All Core Web Vitals in GREEN
  🔲 First screen loads < 2 sec on 4G

CATEGORY 6 · SAFETY (Day 5 P04 + P05)
  🔲 Zero 🔴 CRITICAL findings from Day 5 P05 (security audit)
  🔲 Zero P0 bugs from Day 5 P04 (bug hunter)

# OUTPUT · ranked pass/fail table
| Category | Item | Status | Fix (if fail) |
|----------|------|--------|---------------|

Status:
  ✅ PASS
  ⚠ WARNING · non-blocking · fix in first week post-launch
  🔴 CRITICAL · BLOCKS PUBLISH · fix now · re-run

# DECISION
- If ALL 20 pass · OR only ⚠ warnings · give me the go signal + a 3-line
  "here's what to watch in the first hour" summary
- If ANY 🔴 CRITICAL · print "DO NOT PUBLISH" · list the fixes as paste-ready
  Lovable prompts · re-run this checklist after each fix

# QUALITY BAR · self-check
- Nygard: did I test what happens when 10 users hit the site simultaneously?
- Hightower: are Supabase RLS policies live on ALL user-touching tables?
- Majors: is Sentry catching production errors · not just dev errors?
- Did I actually query the MCPs to verify · or trust user reports?
Publish gate: if this returns ANY 🔴 CRITICAL · do not send that WhatsApp broadcast. Fix · re-run · then publish. Save the passing audit to Project-Plan.md → "Launches" · you'll want it for the pitch deck.
🔎 PROMPT 08 · POST-LAUNCH SMOKE TEST · FRESH EYES

30 seconds after publish · run this.

Why: Even after P07 passes · reality is different. This 5-minute smoke test simulates a FIRST-TIME visitor across 4 devices + 4 platforms to catch anything the audit missed. If it passes · you're truly live.

Phase 4 · verify 5 min
Charity Majors · observability + first-user reality Julie Zhuo · first-run UX craftsmanship
# ROLE
You are my fresh-eyes launch validator. Assume nothing I built works until
proven live.

# CONTEXT
Use primed P00. P07 checklist passed. Site published at https://[my-domain].
Stack: Lovable + GitHub + Supabase + Cowork. Sentry MCP + PostHog MCP connected.

# GOAL
5-minute smoke test across devices + platforms. Confirm the app works for a
first-time visitor with zero context.

# YOUR PROCESS · 5 tests

TEST 1 · FRESH INCOGNITO (1 min)
  - Open incognito window · no cookies · no logged-in state
  - Type domain manually (not autocomplete)
  - LCP happens in < 2 sec?
  - Primary CTA visible without scroll?
  - Click through signup flow · does it complete?
  - Query Sentry MCP: any errors captured from this session?
  - Query PostHog MCP: signup_completed event fired?

TEST 2 · MOBILE PHONE (1 min)
  - Open Safari on iPhone (or Chrome Android)
  - Type domain · not follow link
  - No horizontal scroll?
  - Tap targets feel ≥ 44px?
  - Sticky CTA visible if long form?
  - Add to Home Screen · icon looks right (not blank)?

TEST 3 · SOCIAL PREVIEW · 4 PLATFORMS (1 min)
Paste https://[my-domain] into:
  1 · A WhatsApp chat to yourself · preview loads in < 3 sec?
  2 · A LinkedIn post draft · OG image + title + description show?
  3 · An X post draft · Twitter card renders?
  4 · iMessage to yourself · preview loads?

If ANY show blank / broken preview · re-run Facebook Sharing Debugger and
LinkedIn Post Inspector · resubmit with cache bust.

TEST 4 · GOOGLE (1 min)
  - Google: site:[my-domain]
  - Does Google show my site indexed? (May take 24-48h from P05)
  - If not indexed yet · confirm sitemap submitted in Search Console

TEST 5 · REVERSE THE FUNNEL (1 min)
  Query PostHog MCP for the FIRST session recording (that's YOU testing).
  - Watch it back
  - Anything look janky · slow · confusing?
  - Any dead clicks · rage clicks?
  - Would you show this to your 60-year-old parent right now?

# DELIVERABLE
- 5 tests · pass/fail per test
- If any fail · fix prompts for Lovable + re-run
- Screenshot the passing WhatsApp preview · post to pod thread with
  \"WE ARE LIVE. Come try: [URL]\"

# QUALITY BAR
- Majors: is Sentry seeing my test session · confirming instrumentation works
  in production?
- Zhuo: does the first-run feel intentional · or accidental?
- Did I actually pull social previews from 4 platforms · or just check one?
The moment: if all 5 tests pass · this is your PUBLIC LIVE moment. Post the WhatsApp preview screenshot to the pod thread · tag #10DaystoShip · @meganmartinsone. You just shipped.