Skip to main content
Harly needs a persistent web process, PostgreSQL, durable file storage, and a separate scheduler worker. Vercel-only deployments are not supported because serverless functions cannot provide the scheduler lifecycle Harly requires.

Choose a platform

App Platform filesystems are ephemeral. Use S3, R2, or another S3-compatible provider before accepting candidate resumes or attachments.

Render

  1. Open the Render deploy link from the Harly repository.
  2. Create independent values for the runtime secrets.
  3. Paste the same shared runtime secrets into both the web and scheduler services when Render asks for them.
  4. Confirm the database is production-grade and the image tag is pinned.
  5. Open https://<your-app>.onrender.com/setup and claim the owner with the HARLY_SETUP_SECRET you saved before deployment.

DigitalOcean App Platform

Use .do/app.yaml as the canonical spec. For production, replace the development database entry with a managed PostgreSQL cluster and keep the runtime on linux/amd64. Configure S3 before the first upload. The migrate job must finish before the web and scheduler services receive traffic.

Railway and Fly.io

Run the CLI from a secure workstation:
Choose the provider in the deploy menu. The CLI creates separate web, scheduler, and migration roles, writes generated secrets to a local file, and prints where the setup secret is stored. Do not commit that file. Complete /setup only after readiness is green.

Production checklist

Web and scheduler run as separate long-lived processes.
PostgreSQL backups and point-in-time recovery are enabled.
S3 bucket encryption and versioning are enabled.
Secrets are stored in the platform secret manager.
Readiness and scheduler health are monitored.
A restore drill has completed against a throwaway installation.
See configuration and backups before inviting a production team.