Back to Home

Building PHLauncher

Building PHLauncher

AI-Powered Product Hunt Launch Success Platform

The Problem: Product Hunt Launches Are Hard

Every startup founder knows Product Hunt can make or break a launch. But most launches fail—not because the product is bad, but because the marketing execution is wrong.

  1. Writing a compelling product description takes hours of iteration
  2. Crafting the perfect tagline requires copywriting skills most developers lack
  3. Maker comments need to be authentic but strategic
  4. Launch timing and community engagement require careful planning
  5. Social media amplification across platforms is time-consuming
  6. Analyzing what worked in successful launches requires extensive research

Founders spend weeks preparing launches only to end up with mediocre results because they didn't nail the messaging, timing, or engagement strategy.

I built PHLauncher to solve this: AI-powered campaign generation that gives every product the best chance at Product Hunt success.

The Vision: Launch Like the Pros

PHLauncher democratizes Product Hunt success by providing AI-powered tools that generate professional-quality launch campaigns. The core principles:

AI-Powered Copywriting

Generate compelling descriptions, taglines, and maker comments trained on successful Product Hunt launches. No copywriting skills required.

Complete Launch Kits

Everything you need in one package: product copy, social posts, email templates, and launch strategy—all cohesive and on-brand.

Pay-Per-Launch Model

No subscriptions. Pay $10 per launch kit. Use it when you need it, no recurring charges eating into your runway.

Background Processing

AI generation happens asynchronously with real-time progress tracking. No waiting with a spinner—continue working while your kit generates.

The Tech Stack: Modern SaaS Architecture

Turborepo Monorepo

The project is organized as a monorepo using Turborepo for smart caching and parallel builds. Shared packages for UI components, TypeScript types, Stripe integration, background jobs, and team management keep code DRY across the platform.

Next.js 15 with App Router

The frontend uses Next.js 15's App Router for server components, streaming, and optimal performance. React Server Components fetch data directly without API round-trips, while client components handle interactive UI with Zustand for state management.

Supabase (Self-Hosted on Kubernetes)

Authentication, database, and storage are powered by Supabase—but self-hosted on DigitalOcean Kubernetes for full control. PostgreSQL with Row Level Security (RLS) ensures data isolation between users. Auto-generated TypeScript types keep the frontend in sync with the database schema.

Multi-Provider AI Integration

Content generation uses the Vercel AI SDK with support for OpenAI, Anthropic, and Google models. The system can switch providers or use different models for different tasks—GPT-4 for creative copy, Claude for analysis, Gemini for rapid iteration.

Custom Background Job System

AI generation can take 30+ seconds. The platform uses a custom job queue with step-by-step progress tracking, retry logic with exponential backoff, and real-time UI updates via Supabase realtime subscriptions. Users see exactly what's happening as their launch kit generates.

Stripe with Per-Kit Pricing

Payment integration uses Stripe with a $10-per-launch-kit model. Webhook handlers process payment confirmations and credit user accounts. No subscriptions—founders pay only when they need a launch kit.

The Architecture: Monorepo for Scalability

The project structure separates concerns into focused packages:

Monorepo Package Structure

phlauncher/
├── apps/
│   └── web/                    # Next.js 15 application
│       ├── src/app/           # App Router pages
│       ├── src/components/    # React components
│       ├── src/lib/           # Utilities
│       └── src/stores/        # Zustand stores
├── packages/
│   ├── ui/                    # Shared shadcn/ui components
│   ├── types/                 # TypeScript definitions
│   ├── stripe/                # Payment integration
│   ├── jobs/                  # Background job system
│   ├── query/                 # React Query wrapper
│   ├── support-chat/          # Support widget
│   └── teams/                 # Team management
├── supabase/                  # Migrations & config
└── turbo.json                 # Build pipeline

Turborepo's smart caching means rebuilding only what changed. Shared packages prevent code duplication across future apps in the monorepo.

Database Schema Design

The database follows a multi-tenant architecture with comprehensive audit trails:

  • user_profiles: User metadata and preferences
  • organizations: Team/company entities
  • organization_members: Team membership with roles
  • user_launch_kits: Generated campaigns with JSON content
  • user_payments: Payment history and credits
  • ai_generated_content: Content generation history
  • ai_usage_tracking: Cost and performance analytics
  • background_jobs: Job queue with status tracking
  • job_steps: Granular progress per operation

Row Level Security (RLS) policies ensure users only see their own data. Every table has created_at and updated_at for audit trails.

The Launch Kit Generator: AI-Powered Campaign Creation

The core feature is a multi-step wizard that collects product information and generates a complete Product Hunt launch kit:

What Gets Generated

Product Description

Compelling copy that highlights value propositions, features, and benefits in Product Hunt's preferred style.

Taglines

Multiple catchy one-liners optimized for maximum impact and click-through rates.

Maker Comments

Authentic responses to common questions and engagement templates for community interaction.

Launch Strategy

Step-by-step timeline for pre-launch, launch day, and post-launch activities.

The Generation Pipeline

When a user submits their product information:

  1. Payment Verification: Stripe webhook confirms payment, credits user account
  2. Job Creation: Background job record created with status: PENDING
  3. App Metadata Extraction: If URL provided, scrape product info for context
  4. Content Generation: Sequential AI calls for each content type
  5. Progress Updates: Real-time step completion via Supabase realtime
  6. Kit Assembly: JSON structure with all generated content stored in database
// Simplified job step tracking
const steps = [
  { name: 'App Metadata', status: 'completed' },
  { name: 'Product Description', status: 'in-progress' },
  { name: 'Taglines', status: 'pending' },
  { name: 'Maker Comments', status: 'pending' },
  { name: 'Launch Strategy', status: 'pending' }
];

// Real-time updates via Supabase
supabase
  .channel('job-progress')
  .on('postgres_changes', { 
    event: 'UPDATE', 
    schema: 'public', 
    table: 'job_steps' 
  }, (payload) => {
    updateUI(payload.new);
  })
  .subscribe();

Users see a live progress UI showing exactly which step is being processed, with completion percentages and estimated time remaining.

Authentication & Authorization: Multi-Level Security

Security is layered across the entire stack:

1. Supabase Auth

Email/password plus OAuth providers (Google, GitHub). JWTs validated on every request. Session management with secure httpOnly cookies.

2. Route Middleware

Next.js middleware in /src/lib/supabase/middleware.ts protects routes requiring authentication. Unauthenticated requests redirect to login.

3. Row Level Security (RLS)

Database policies enforce data isolation. Even if application code has bugs, the database won't return unauthorized data.

4. System Roles

Role hierarchy: super_adminadminsupportuser. Admin endpoints check role before processing.

5. Team Access

Team members inherit the team owner's subscription level. Organization-based access control for shared launch kits.

Payment Integration: Per-Kit Pricing with Stripe

The pricing model is intentionally simple: $10 per launch kit. No subscriptions, no tiers, no complexity.

Payment Flow

  1. User clicks "Generate Kit" → redirect to Stripe Checkout
  2. Stripe processes payment → webhook fires to /api/stripe/webhook
  3. Webhook verifies signature → creates payment record
  4. User account credited → can generate one launch kit
  5. Generation starts → credit consumed, kit created

This model aligns incentives: users pay only when they have a product to launch, and PHLauncher earns when it provides value.

Deployment: Self-Hosted on DigitalOcean Kubernetes

PHLauncher runs on DigitalOcean Kubernetes with self-hosted Supabase for full data control:

Infrastructure Overview

  • Cluster: DigitalOcean Kubernetes (k8s-ec-01, NYC1 region)
  • Namespaces: phlauncher (app), supabase (database services)
  • Registry: DigitalOcean Container Registry
  • Storage: Block Storage (20Gi database, 10Gi files)
  • TLS: cert-manager with Let's Encrypt
  • Ingress: nginx-ingress-controller

CI/CD Pipeline

GitHub Actions automates the deployment pipeline:

  1. Push to main branch triggers workflow
  2. Build Docker image with Next.js standalone output
  3. Push to DigitalOcean Container Registry
  4. Apply Kubernetes manifests with new image tag
  5. Rolling deployment updates pods without downtime

Self-hosting Supabase gives full control over data, eliminates vendor lock-in, and reduces costs at scale. The admin dashboard is accessible at supabase.phlauncher.com.

The Challenges and Trade-Offs

1. AI Content Quality Consistency

AI models produce variable output quality. The solution: carefully crafted prompt templates optimized for Product Hunt's style, multiple generation options for users to choose from, and tone matching controls (friendly, professional, enthusiastic).

2. Long-Running AI Operations

Generating a complete launch kit takes 30-60 seconds across multiple AI calls. HTTP requests would timeout. The custom job queue system processes operations asynchronously with real-time progress updates via Supabase realtime subscriptions.

3. Self-Hosted Supabase Complexity

Self-hosting Supabase on Kubernetes requires managing PostgreSQL, GoTrue auth, Storage API, and Realtime services. The trade-off is worth it for data sovereignty and cost control, but it adds operational complexity compared to the hosted service.

4. AI Cost Management

AI API calls have direct costs. Every generation is tracked in ai_usage_tracking with token counts, model used, and duration. This data informs pricing decisions and helps optimize prompt efficiency.

The Results: Launch Prep in Minutes

Before PHLauncher

  • • Writing product description: 3-4 hours
  • • Crafting taglines: 1-2 hours
  • • Preparing maker comments: 2 hours
  • • Launch strategy research: 4+ hours
  • Total: 10-12 hours of prep

After PHLauncher

  • • Fill in product details: 5 minutes
  • • AI generates everything: 2 minutes
  • • Review and customize: 15 minutes
  • • Ready to launch: Done!
  • Total: 22 minutes

That's a 97% time reduction. Focus on your product, not copywriting.

The Developer Experience Lessons

1. Turborepo Pays Off at Scale

Initial setup took longer than a single Next.js app. But as shared packages grew, the monorepo structure prevented duplication and made feature additions faster. Smart caching cuts build times significantly after the first build.

2. Type-Safe Database Queries Save Debugging Time

Supabase's CLI generates TypeScript types from the database schema. Combined with RLS policies, this catches errors at compile time instead of runtime. Refactoring becomes fearless when the compiler catches type mismatches.

3. Real-Time Progress UX Matters

Users hate waiting without feedback. The step-by-step progress UI with estimated time remaining transforms a 60-second wait from frustrating to engaging. Supabase realtime made this trivial to implement.

4. Per-Unit Pricing Simplifies Everything

No subscription tiers to manage, no feature gating complexity, no cancellation flows. Users pay when they need value. The business model is transparent and aligned with user success.

Technical Highlights

Turborepo monorepo with 7+ packages
Next.js 15 with App Router
Self-hosted Supabase on Kubernetes
Multi-provider AI (OpenAI, Anthropic, Google)
Custom job queue with real-time progress
Stripe integration with per-kit pricing
Row Level Security for data isolation
GitHub Actions CI/CD with auto-deploy
TypeScript strict mode throughout
shadcn/ui component library

Conclusion: AI-Augmented Launch Success

PHLauncher demonstrates that AI can genuinely help founders succeed—not by replacing their creativity, but by handling the time-consuming copywriting and strategy work that blocks launches.

The architecture choices—Turborepo monorepo, self-hosted Supabase, background job processing—create a foundation that scales with user growth while maintaining development velocity.

The key insight: AI tools are most valuable when they solve specific, well-defined problems. Product Hunt launches have clear success patterns. AI can learn those patterns and apply them to any product.

Every founder deserves a professional-quality Product Hunt launch. PHLauncher makes that possible.

Complete Tech Stack

Frontend: Next.js 15 (App Router), React 18, TypeScript, Tailwind CSS 4, shadcn/ui

Backend: Supabase (self-hosted), PostgreSQL with RLS, Custom job queue

AI: Vercel AI SDK, OpenAI GPT-4, Anthropic Claude, Google Gemini

State: Zustand for client state, React Query for server state

Payments: Stripe with per-kit pricing, webhook integration

Infrastructure: DigitalOcean Kubernetes, Container Registry, Block Storage

DevOps: GitHub Actions, cert-manager, nginx-ingress

Monorepo: Turborepo with pnpm workspaces

Ready to Build AI-Powered Products?

If you need an engineer who can architect AI-integrated platforms, build scalable SaaS infrastructure, and ship production-ready software, let's connect.