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​