Mikael Westöö ff17d580ed Add comprehensive Coolify setup documentation
Created COOLIFY_SETUP.md with complete instructions for:
- One-time Coolify instance setup (API tokens, projects, UUIDs)
- Per-deployment setup for each recruitment site
- DNS configuration with Cloudflare
- Webhook configuration for automatic deployments
- Troubleshooting common issues
- Security best practices
- Scaling multiple sites
- Advanced configuration options

Updated README.md to reference the new setup guide.

This provides all the information users need to set up their own
Coolify instance and deploy multiple recruitment sites from the template.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-24 07:19:46 +01:00
2026-01-23 21:34:33 +01:00

AI Recruitment Site Template

A fully customizable recruitment website template designed for easy deployment and AI agent modification. Built with Node.js, Express, and PostgreSQL with comprehensive environment-based configuration.

🎯 Use This Template

This repository is marked as a template. You can create your own recruitment site in minutes!

Quick Start (3 Steps)

  1. Use this template - Click "Use this template" on Gitea
  2. Customize - Edit .env file with your company information
  3. Deploy - Run the automated deployment script

Features

Public Features

  • Job listings with search and filters
  • Online application system with CV upload
  • Contact form
  • Fully responsive design
  • Dynamic branding and content

Admin Features

  • Dashboard with statistics
  • Application management
  • CV downloads and viewing
  • Job posting management
  • First-time admin account creation

Template Features

  • Environment-based configuration - All customization via .env file
  • Dynamic branding - Company name, colors, contact info all configurable
  • AI agent friendly - Clear structure for automated modifications
  • One-click deployment - Automated Coolify deployment script
  • No hardcoded values - Everything is configurable

🚀 Quick Deployment

Prerequisites

  • Gitea account at git.startanaicompany.com
  • Gitea API token
  • Coolify instance with API token
  • Basic command line knowledge

New to Coolify? See COOLIFY_SETUP.md for detailed setup instructions.

Step 1: Create Your Copy

Use Gitea's template feature to create your own copy:

# Or clone the template manually
git clone https://git.startanaicompany.com/StartanAICompany/ai-recruit-site-template.git my-recruit-site
cd my-recruit-site

Step 2: Customize Configuration

# Copy the example environment file
cp .env.example .env

# Edit .env with your company information
nano .env

Minimum required configuration in .env:

# Company Information
COMPANY_NAME="Your Recruitment Firm"
COMPANY_TAGLINE="Your Tagline Here"
COMPANY_DESCRIPTION="Your company description"

# Branding Colors
PRIMARY_COLOR=#2563EB
ACCENT_COLOR=#059669
DARK_COLOR=#1E293B

# Contact Information
CONTACT_EMAIL=info@yourcompany.com
CONTACT_PHONE=+1 (555) 123-4567
CONTACT_ADDRESS=123 Business St, City, State 12345

# Deployment Configuration
SUBDOMAIN=yourname
GITEA_USERNAME=your-gitea-username
GITEA_REPO_NAME=my-recruit-site

Step 3: Deploy to Coolify

# Set API tokens as environment variables (NOT in .env)
export COOLIFY_API_TOKEN="your-coolify-token"
export GITEA_API_TOKEN="your-gitea-token"

# Copy and run the deployment script
cp deploy-to-coolify.example.sh deploy-to-coolify.sh
chmod +x deploy-to-coolify.sh
./deploy-to-coolify.sh

The script will:

  • Create a Coolify application
  • Configure domain (yourname.recruitai.startanaicompany.com)
  • Set up webhooks for automatic deployments
  • Generate database and session secrets
  • Trigger initial deployment

Your site will be live in 2-3 minutes!

🎨 Customization Guide

Company Information

All company information is configured via environment variables in .env:

# Company Identity
COMPANY_NAME="Your Recruitment Firm"
COMPANY_TAGLINE="Finding the Perfect Match for Your Career"
COMPANY_DESCRIPTION="We specialize in connecting talented professionals..."

# Contact Details
CONTACT_EMAIL=info@yourcompany.com
CONTACT_PHONE=+1 (555) 123-4567
CONTACT_ADDRESS=123 Business St, Suite 100, City, State 12345
BUSINESS_HOURS=Monday - Friday: 9:00 AM - 6:00 PM

# Social Media (leave empty to hide)
SOCIAL_LINKEDIN=https://linkedin.com/company/yourcompany
SOCIAL_TWITTER=https://twitter.com/yourcompany
SOCIAL_FACEBOOK=

Branding Colors

Customize your brand colors:

PRIMARY_COLOR=#2563EB  # Main brand color (buttons, links)
ACCENT_COLOR=#059669   # Success/accent color
DARK_COLOR=#1E293B     # Dark elements (footer, headings)

Colors update automatically across the entire site!

About Page Content

ABOUT_MISSION=Our mission statement here
ABOUT_VISION=Our vision statement here
ABOUT_VALUES=Integrity, Excellence, Innovation, Partnership

Services Offered

SERVICES_LIST=Executive Search,Contract Staffing,Permanent Placement,Career Consulting

Feature Configuration

MAX_CV_SIZE_MB=5
ALLOWED_CV_TYPES=application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document

🤖 AI Agent Modification

This template is designed to be easily modified by AI agents like Claude Code. The structure includes:

Clear File Organization

ai-recruit-site-template/
├── config.js              # Centralized configuration
├── server.js              # Main application
├── public/
│   ├── js/
│   │   └── init.js       # Dynamic config injection
│   ├── css/
│   │   └── styles.css    # CSS with variables
│   └── *.html            # HTML with data attributes
├── migrations/            # Database migrations
└── .env.example          # Configuration template

Data Attributes

HTML elements use data attributes for dynamic content:

<div data-company-name>Your Company</div>
<h1 data-company-tagline>Your Tagline</h1>
<a data-contact-email>email@example.com</a>

Configuration API

Frontend can access configuration via API:

// GET /api/config returns:
{
  company: { name, tagline, description },
  branding: { primaryColor, accentColor, darkColor },
  contact: { email, phone, address, businessHours },
  social: { linkedin, twitter, facebook },
  about: { mission, vision, values },
  services: { list: [...] }
}

💻 Local Development

cp .env.example .env
# Edit .env with your settings

docker-compose up -d

Access at: http://localhost:3000

Without Docker

# Install dependencies
npm install

# Start PostgreSQL (must be running)
# Create database 'recruitment'

# Copy environment file
cp .env.example .env

# Start application
npm start

📊 Technology Stack

  • Backend: Node.js 18 + Express
  • Database: PostgreSQL 15 with BYTEA for CV storage
  • Authentication: Session-based with bcrypt
  • File Upload: Multer (PDF, DOC, DOCX)
  • Deployment: Docker Compose + Coolify
  • DNS: Cloudflare

🔐 Security Features

  • Password hashing with bcrypt (10 rounds)
  • Secure HTTP-only session cookies
  • SQL injection protection (parameterized queries)
  • File upload validation (type and size)
  • Environment-based secrets
  • Automatic HTTPS in production

📚 API Documentation

Public APIs

  • GET /api/config - Get site configuration
  • GET /api/jobs - List active jobs
  • GET /api/jobs/:id - Get job details
  • POST /api/apply - Submit application (multipart/form-data)
  • POST /api/contact - Submit contact form

Admin APIs (Authentication Required)

  • POST /api/admin/login - Login / Create first admin
  • GET /api/admin/check - Check auth status
  • POST /api/admin/logout - Logout
  • GET /api/admin/stats - Dashboard statistics
  • GET /api/admin/applications - List applications (with filters)
  • GET /api/admin/applications/:id - Get application details
  • GET /api/admin/applications/:id/cv - Download CV
  • PATCH /api/admin/applications/:id - Update application status
  • GET /api/admin/jobs - List all jobs
  • POST /api/admin/jobs - Create job
  • PATCH /api/admin/jobs/:id - Update job (activate/deactivate)

🆘 Troubleshooting

Deployment Issues

# Check Coolify logs
# Visit: https://app.coolify.io → Your Application → Logs

# Re-trigger deployment
curl -X POST "https://app.coolify.io/api/v1/applications/YOUR_APP_UUID/restart" \
  -H "Authorization: Bearer $COOLIFY_API_TOKEN"

Database Issues

# Check database connection
docker-compose logs postgres

# Access database
docker-compose exec postgres psql -U postgres -d recruitment

# List tables
\dt

Configuration Not Updating

Make sure you:

  1. Updated .env file
  2. Committed and pushed changes (triggers webhook)
  3. Waited 2-3 minutes for redeployment

🎓 First Time Setup

  1. Visit your deployment URL
  2. Go to /admin/login
  3. System detects no admin exists
  4. Fill in email, password, and full name
  5. Click "Create Admin Account"
  6. You're logged in!

📝 Environment Variables Reference

Variable Description Default Required
COMPANY_NAME Your company name Your Recruitment Firm Yes
COMPANY_TAGLINE Main tagline Finding the Perfect Match... Yes
COMPANY_DESCRIPTION Company description We specialize in... Yes
PRIMARY_COLOR Primary brand color #2563EB No
ACCENT_COLOR Accent color #059669 No
DARK_COLOR Dark color #1E293B No
CONTACT_EMAIL Contact email info@yourcompany.com Yes
CONTACT_PHONE Contact phone +1 (555) 123-4567 Yes
CONTACT_ADDRESS Physical address 123 Business St... Yes
BUSINESS_HOURS Business hours Monday - Friday... No
SOCIAL_LINKEDIN LinkedIn URL (empty) No
SOCIAL_TWITTER Twitter URL (empty) No
SOCIAL_FACEBOOK Facebook URL (empty) No
SUBDOMAIN Your subdomain yourname Yes (deploy)
GITEA_USERNAME Your Gitea username - Yes (deploy)
GITEA_REPO_NAME Your repo name - Yes (deploy)
DB_PASSWORD Database password (auto-generated) No
SESSION_SECRET Session secret (auto-generated) No
MAX_CV_SIZE_MB Max CV file size 5 No
ALLOWED_CV_TYPES Allowed CV MIME types pdf,doc,docx No

🤝 Contributing

This is a template repository. Feel free to:

  • Fork it for your own recruitment site
  • Customize it to your needs
  • Submit improvements via pull request

📄 License

MIT License - feel free to use for commercial projects

🆘 Support

For issues or questions:

Description
🎯 Fully customizable AI recruitment website template. Environment-based configuration, one-click deployment, AI agent friendly. Built with Node.js + PostgreSQL + Docker.
Readme 278 KiB
Languages
HTML 49.5%
JavaScript 33.5%
CSS 7.6%
Shell 5.4%
PLpgSQL 3.6%
Other 0.4%