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
- Notes: Professional AI Headshot Generator by Pacing Agency. Installed on headshots.pacing.agency, can be used for clients
- Category: SELF_HOSTING
- Account type: INTERNAL, CLIENT_ACCESS
- Created: December 2025
- Access URL: https://headshots.pacing.agency/overview
- Account owner: Ben Power
- GitHub Repository: https://github.com/automatestech/headshots-pacing
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
- Upload Photos: Upload 4-10 high-quality photos of yourself
- AI Training: AI trains a custom model to understand facial features (10-30 minutes)
- Choose Style: Select from various professional style packs
- Generate: Get multiple professional headshots in your chosen style
- 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.localon 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 validationDEPLOYMENT_URL- Production URL (e.g.,https://headshots.pacing.agency)NEXT_PUBLIC_SUPABASE_URL- Supabase project URLNEXT_PUBLIC_SUPABASE_ANON_KEY- Supabase anonymous keySUPABASE_SERVICE_ROLE_KEY- Supabase service role keyBLOB_READ_WRITE_TOKEN- Vercel Blob storage tokenSTRIPE_SECRET_KEY- Stripe secret key (for payments)STRIPE_WEBHOOK_SECRET- Stripe webhook secretRESEND_API_KEY- Resend API key (optional, for email notifications)
Common Issues & Solutions
-
Auth redirects to localhost: Fixed by reading headers instead of URL origin. All auth routes properly detect the origin behind nginx proxy.
-
Images not loading: AVIF images have PNG fallbacks. If images don't load, check that both AVIF and PNG files exist in
/public. -
Email not sending: Verify Resend domain is verified and API key is set. Email failures are logged but don't break the app.
-
Webhook not receiving: Ensure
DEPLOYMENT_URLis set correctly and Astria webhook URL points to production domain. -
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:
-
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 -
Database Migration: Apply the expiration warnings migration using Supabase CLI
-
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:
- Email: aisupport@pacing.agency
- Website: pacing.agency
References
- GitHub Repository: https://github.com/automatestech/headshots-pacing
- Live Demo: https://headshots.pacing.agency
- Astria AI: https://www.astria.ai/
- Supabase: https://supabase.com/
- Stripe: https://stripe.com/