Skip to main content

HeadshotAI

Purpose: Professional AI-generated headshots for online presence. Generate high-quality professional headshots in minutes using advanced AI technology.

Last verified: December 2025


Account Details


Overview

HeadshotAI is a professional AI headshot generator that transforms user photos into high-quality professional headshots perfect for LinkedIn, company websites, resumes, and portfolios.

Key Features:

  • Multiple style packs (Professional, Casual, Creative, and more)
  • Fast AI model training (10-30 minutes)
  • Credit-based pricing system
  • Secure authentication with Supabase
  • Email notifications when headshots are ready
  • High-quality results optimized for professional use
  • Download All - Download all generated headshots as a ZIP file with one click
  • Optimal Upload Limits - 3MB per image for best AI training results
  • Expiration Tracking - 30-day countdown showing when models and images will expire
  • Automated Warnings - Email notifications sent 14, 7, and 1 day before expiration

How It Works

  1. Upload Photos: Upload 4-10 high-quality photos of yourself
  2. AI Training: AI trains a custom model to understand facial features (10-30 minutes)
  3. Choose Style: Select from various professional style packs
  4. Generate: Get multiple professional headshots in your chosen style
  5. Download: Download and use your headshots anywhere

Technology Stack

  • Next.js - Modern React framework
  • Supabase - Database and authentication
  • Resend - Email notifications
  • Shadcn UI with Tailwind CSS - Beautiful, modern UI
  • Stripe - Secure payment processing
  • Vercel Blob - Image storage
  • Astria AI - AI model training API

Pricing

Credit-based system where 1 credit = 1 model training = 1 pack of headshots:

  • 1 Credit - £14.99 - Train one model and generate one pack of headshots
  • 3 Credits - £39.99 - Train three models and try different style packs
  • 5 Credits - £59.99 - Best value for experimenting with multiple styles

Data Retention & Expiration

Important: All AI models, training images, and generated headshots are automatically deleted after 30 days from the model creation date. This includes:

  • Your custom trained AI model
  • Original training photos you uploaded
  • All generated professional headshots

Make sure to download your headshots before they expire! Use the "Download All" feature to save your images as a ZIP file. The app shows a countdown timer indicating how many days are left before automatic deletion.

Automated Email Warnings: Users receive email reminders at 14 days, 7 days, and 1 day before their model expires.


Upload Guidelines

For the best AI training results:

  • Image Size: Each image should be under 3MB (recommended by Astria AI)
  • Resolution: Minimum 512x512 pixels, ideally 1024x1024 or higher for best results
  • Format: JPG or PNG formats supported
  • Quantity: Upload 4-10 high-quality photos for optimal training
  • Close-up shots: Use close-ups of faces with the face centered in the frame
  • Single person: Only include one person per photo
  • Clear visibility: Ensure the face is clearly visible without accessories like sunglasses or hats
  • Consistent aspect ratio: Use square photos (1:1 ratio) like 512x512 or 1024x1024
  • Variety: Include different expressions and angles for better results

Hosting

Provider: Hetzner Cloud
Project: headshotai (Project ID: 12423907)
Server: headshots-pacing (Server ID: 112983113)
Public IP: 91.98.70.125
Location: Nuremberg, Germany (nbg1-dc3)

Server Specifications:

  • Type: CPX21
  • vCPUs: 3 cores (shared)
  • RAM: 4 GB
  • Disk: 80 GB (local storage)
  • Monthly Cost: €7.05
  • OS: Ubuntu 22.04

Deployment Details:

  • Process Manager: PM2 with auto-restart on server reboot
  • Reverse Proxy: Nginx with SSL (Let's Encrypt)
  • Build Process: Builds happen on the server after pulling latest code
  • Environment Variables: Stored in /var/www/headshots-pacing/.env.local on server

Infrastructure Details: See tools/hetzner.md for complete server configuration and management commands.


Environment Variables

Required environment variables:

  • ASTRIA_API_KEY - AI model training API key (required for model training)
  • APP_WEBHOOK_SECRET - Secure random string for webhook validation
  • DEPLOYMENT_URL - Production URL (e.g., https://headshots.pacing.agency)
  • NEXT_PUBLIC_SUPABASE_URL - Supabase project URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY - Supabase anonymous key
  • SUPABASE_SERVICE_ROLE_KEY - Supabase service role key
  • BLOB_READ_WRITE_TOKEN - Vercel Blob storage token
  • STRIPE_SECRET_KEY - Stripe secret key (for payments)
  • STRIPE_WEBHOOK_SECRET - Stripe webhook secret
  • RESEND_API_KEY - Resend API key (optional, for email notifications)

Common Issues & Solutions

  1. Auth redirects to localhost: Fixed by reading headers instead of URL origin. All auth routes properly detect the origin behind nginx proxy.

  2. Images not loading: AVIF images have PNG fallbacks. If images don't load, check that both AVIF and PNG files exist in /public.

  3. Email not sending: Verify Resend domain is verified and API key is set. Email failures are logged but don't break the app.

  4. Webhook not receiving: Ensure DEPLOYMENT_URL is set correctly and Astria webhook URL points to production domain.

  5. Images rejected: Ensure each image is under 3MB. Resize large images before uploading for best AI training results.


Automated Expiration Warnings

The application sends automated email warnings to users when their models are approaching expiration. To enable this feature:

  1. Configure the cron job on your server to call the expiration warnings endpoint daily:

    # Add this to your crontab (crontab -e)
    # Run daily at 9 AM
    0 9 * * * curl -s https://your-domain.com/api/send-expiration-warnings > /dev/null
  2. Database Migration: Apply the expiration warnings migration using Supabase CLI

  3. Resend Configuration: Ensure Resend is configured for sending the warning emails

The system automatically sends warnings at 14 days, 7 days, and 1 day before model expiration, and tracks which warnings have been sent to avoid duplicates.


Use Cases

  • Pacing Agency: Currently deployed at headshots.pacing.agency for internal and client use
  • Client Websites: Can be deployed for client websites as a white-label headshot generation service
  • Multi-tenant: Single instance can serve multiple clients with proper authentication and data isolation

Support

For support, questions, or custom plans:


References