• Agents
  • Pricing
  • Blog
Log in
Get started

Security for apps built with AI. Paste a URL, get a report, fix what matters.

Product

  • How it works
  • What we find
  • Pricing
  • Agents
  • MCP Server
  • CLI
  • GitHub Action

Resources

  • Guides
  • Blog
  • Docs
  • OWASP Top 10
  • Glossary
  • FAQ

Security

  • Supabase Security
  • Next.js Security
  • Lovable Security
  • Cursor Security
  • Bolt Security

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • Imprint
© 2026 Flowpatrol. All rights reserved.
All guides

Launch day playbook

Domain, DNS, SSL, and go-live in one sitting.

The final mile from deployed app to shareable URL. Custom domain, HTTPS, loading speed, social previews, and the monitoring you need before you post on Product Hunt.

~45 min
14 steps
·
Domain & DNSPerformance basicsSEO & social previewsGo-live checks
Launch day playbook
0/14
complete
Section 01

Domain & DNS

Your app lives at a random *.vercel.app address. Give it a real name before you share the link.

0/4
complete
  • 01

    Register a domain

    High5 min

    Buy a domain from Namecheap, Cloudflare Registrar, or Google Domains. Pick a .com if you can. .co, .io, and .dev are solid alternatives. Avoid obscure endings like .biz and .xyz — spam filters flag them and users trust them less.

  • 02

    Point your domain at your hosting platform

    Critical5 min

    Your hosting platform (Vercel, Netlify, Railway) gives you one or two DNS records to add at your domain registrar. Copy the values they show, paste them into the DNS settings at your registrar, save. DNS propagation usually completes in under 10 minutes.

  • 03

    Verify HTTPS is active

    Critical2 min

    Modern hosting platforms provision an SSL certificate automatically the moment you add a domain — it usually takes a minute or two. Open https://yourapp.com (with the `s`) and confirm the connection is secure. If you hit a "Not Secure" warning, give it another few minutes; if it persists past half an hour, double-check your DNS records.

  • 04

    Set a canonical URL (with or without www)

    Medium2 min

    Decide whether your canonical URL is yourapp.com or www.yourapp.com. The other version should redirect to your chosen one. Most hosting platforms set this up automatically when you add both. Confirm by opening each version — they should land on the same URL.

Section 02

Performance basics

Fast apps convert better. These are the easy wins before your first real user.

0/3
complete
  • 05

    Optimize your images

    High10 min

    A single unoptimized hero image can add 3 seconds to your load time. Use the Next.js Image component (it handles resizing and modern formats like WebP automatically), or convert your assets to WebP/AVIF by hand. Only the images visible on first paint need to load immediately — everything else can defer until the user scrolls.

  • 06

    Run a Lighthouse audit

    Medium5 min

    Lighthouse is the performance auditor built into Chrome. Open your site in Chrome, right-click → Inspect → Lighthouse tab → Generate report. Aim for 80+ on Performance and Best Practices. The top three fixes are almost always oversized images and render-blocking third-party scripts.

  • 07

    Add loading states and error boundaries

    High10 min

    AI tools skip loading states by default. Users click a button, see a blank screen, assume the app is broken. Add skeleton loaders or spinners while data fetches, and a global error boundary that shows a "Something went wrong" fallback instead of a white screen.

Section 03

SEO & social previews

Make your app look sharp when someone shares the link on Twitter, Slack, or Discord — and when it shows up in Google.

0/3
complete
  • 08

    Set your title, description, and Open Graph image

    High5 min

    These are the three things that decide whether anyone clicks your link — in search results and in every social preview. Write a short title (under 60 characters), a one-sentence description (under 155), and point to a 1200×630 preview image. In Next.js, define them in the metadata export of your root layout.

  • 09

    Design your Open Graph image (1200×630)

    Medium10 min

    The preview image that appears when your URL is pasted into Twitter, Slack, or Discord. Design it in Figma or Canva, or generate one programmatically with vercel.com/og. Dark background, product wordmark, and a single-line tagline is a reliable template. Save the result as `og-image.png` in `public/`.

  • 10

    Add a favicon and app icon

    Medium3 min

    Drop `favicon.ico` into your `public/` folder for the browser tab icon. Add `apple-touch-icon.png` (180×180) for iOS home-screen icons, and a 512×512 PNG if you ever plan to ship a PWA manifest. Generators like realfavicongenerator.net produce the full set from a single source image.

Section 04

Go-live checks

The final sanity checks before you post the link. Do these in order.

0/4
complete
  • 11

    Run a full signup smoke test

    Critical5 min

    Open an incognito window. Sign up with a fresh email. Confirm the verification email arrives. Click the link. Complete onboarding. Use your core feature end to end. Anything that breaks here breaks for every new user — fix it before you ship the link.

  • 12

    Test on a real phone

    High5 min

    Open your app on your actual device — not the responsive preview in DevTools. Real phones surface bugs the preview misses: tap targets too small, layout overflow, buttons hidden behind the bottom bar. Walk through signup, navigation, and your core flow.

  • 13

    Set up uptime monitoring

    High3 min

    Point BetterStack, UptimeRobot, or Checkly (all free for basic use) at the `/api/health` endpoint from the prototype-to-production guide. They'll ping it every minute and alert you — email, Slack, or SMS — the moment your app stops responding.

  • 14

    Preview your link before you ship it

    Medium2 min

    Paste your URL into a Slack DM to yourself, a private Discord channel, or the Twitter compose box. The preview image, title, and description should all render cleanly. If anything looks off, fix it now — not after the Product Hunt post goes live.

Domain & DNS

Your app lives at a random *.vercel.app address. Give it a real name before you share the link.

Register a domain

Buy a domain from Namecheap, Cloudflare Registrar, or Google Domains. Pick a .com if you can. .co, .io, and .dev are solid alternatives. Avoid obscure endings like .biz and .xyz — spam filters flag them and users trust them less.

A *.vercel.app URL reads "side project." A custom domain reads "real product." It also matters for email deliverability and for showing up in Google results.

Point your domain at your hosting platform

Your hosting platform (Vercel, Netlify, Railway) gives you one or two DNS records to add at your domain registrar. Copy the values they show, paste them into the DNS settings at your registrar, save. DNS propagation usually completes in under 10 minutes.

Verify HTTPS is active

Modern hosting platforms provision an SSL certificate automatically the moment you add a domain — it usually takes a minute or two. Open https://yourapp.com (with the `s`) and confirm the connection is secure. If you hit a "Not Secure" warning, give it another few minutes; if it persists past half an hour, double-check your DNS records.

# Quick sanity check — should return HTTP/2 200:
curl -sI https://yourapp.com | head -1

# Certificate issues almost always resolve by waiting a few minutes.
# Vercel, Netlify, and Railway all provision certificates for free.

Set a canonical URL (with or without www)

Decide whether your canonical URL is yourapp.com or www.yourapp.com. The other version should redirect to your chosen one. Most hosting platforms set this up automatically when you add both. Confirm by opening each version — they should land on the same URL.

Performance basics

Fast apps convert better. These are the easy wins before your first real user.

Optimize your images

A single unoptimized hero image can add 3 seconds to your load time. Use the Next.js Image component (it handles resizing and modern formats like WebP automatically), or convert your assets to WebP/AVIF by hand. Only the images visible on first paint need to load immediately — everything else can defer until the user scrolls.

// Next.js — the Image component auto-optimizes and lazy-loads.
import Image from 'next/image';

// Above the fold — preload it.
<Image
  src="/hero.png"
  alt="Hero image"
  width={1200}
  height={630}
  priority
/>

// Below the fold — lazy-loaded by default. No extra config.
<Image
  src="/feature.png"
  alt="Feature screenshot"
  width={800}
  height={400}
/>

Run a Lighthouse audit

Lighthouse is the performance auditor built into Chrome. Open your site in Chrome, right-click → Inspect → Lighthouse tab → Generate report. Aim for 80+ on Performance and Best Practices. The top three fixes are almost always oversized images and render-blocking third-party scripts.

← Previous guide

Security hardening

Seven checks. Fifteen minutes. Every AI-coded bug that matters.

Next guide →

AI context mastery

The advanced moves that separate one-shot prompting from real shipping.

Done with the guide?

A checklist tells you what to do. A scan proves you did it. Paste your URL and verify everything in minutes.

Run a free scanBrowse all guides

Add loading states and error boundaries

AI tools skip loading states by default. Users click a button, see a blank screen, assume the app is broken. Add skeleton loaders or spinners while data fetches, and a global error boundary that shows a "Something went wrong" fallback instead of a white screen.

// app/layout.tsx — Global error boundary
'use client';
export default function GlobalError({ error, reset }: {
  error: Error; reset: () => void;
}) {
  return (
    <div className="flex min-h-screen items-center justify-center">
      <div className="text-center">
        <h2 className="text-xl font-bold">Something went wrong</h2>
        <button onClick={reset} className="mt-4 rounded bg-blue-500 px-4 py-2 text-white">
          Try again
        </button>
      </div>
    </div>
  );
}

SEO & social previews

Make your app look sharp when someone shares the link on Twitter, Slack, or Discord — and when it shows up in Google.

Set your title, description, and Open Graph image

These are the three things that decide whether anyone clicks your link — in search results and in every social preview. Write a short title (under 60 characters), a one-sentence description (under 155), and point to a 1200×630 preview image. In Next.js, define them in the metadata export of your root layout.

// app/layout.tsx (Next.js)
export const metadata = {
  title: 'YourApp — one-line description',
  description: 'What your app does, in 155 characters or less.',
  openGraph: {
    title: 'YourApp — one-line description',
    description: 'What your app does, in 155 characters or less.',
    url: 'https://yourapp.com',
    siteName: 'YourApp',
    images: [{ url: '/og-image.png', width: 1200, height: 630 }],
    type: 'website',
  },
  twitter: {
    card: 'summary_large_image',
    title: 'YourApp',
    description: 'What your app does.',
    images: ['/og-image.png'],
  },
};

Design your Open Graph image (1200×630)

The preview image that appears when your URL is pasted into Twitter, Slack, or Discord. Design it in Figma or Canva, or generate one programmatically with vercel.com/og. Dark background, product wordmark, and a single-line tagline is a reliable template. Save the result as `og-image.png` in `public/`.

Add a favicon and app icon

Drop `favicon.ico` into your `public/` folder for the browser tab icon. Add `apple-touch-icon.png` (180×180) for iOS home-screen icons, and a 512×512 PNG if you ever plan to ship a PWA manifest. Generators like realfavicongenerator.net produce the full set from a single source image.

Go-live checks

The final sanity checks before you post the link. Do these in order.

Run a full signup smoke test

Open an incognito window. Sign up with a fresh email. Confirm the verification email arrives. Click the link. Complete onboarding. Use your core feature end to end. Anything that breaks here breaks for every new user — fix it before you ship the link.

Test on a real phone

Open your app on your actual device — not the responsive preview in DevTools. Real phones surface bugs the preview misses: tap targets too small, layout overflow, buttons hidden behind the bottom bar. Walk through signup, navigation, and your core flow.

Set up uptime monitoring

Point BetterStack, UptimeRobot, or Checkly (all free for basic use) at the `/api/health` endpoint from the prototype-to-production guide. They'll ping it every minute and alert you — email, Slack, or SMS — the moment your app stops responding.

# After your /api/health endpoint is live:
# 1. betterstack.com or uptimerobot.com → new monitor
# 2. URL:      https://yourapp.com/api/health
#    Interval: 60 seconds
#    Alert:    email, Slack, or SMS

Preview your link before you ship it

Paste your URL into a Slack DM to yourself, a private Discord channel, or the Twitter compose box. The preview image, title, and description should all render cleanly. If anything looks off, fix it now — not after the Product Hunt post goes live.