Skip to main content

Render Deployment

Deploy ProjectAchilles to Render using the included Blueprint (render.yaml) or manual setup.

Architecture

ServiceRoot DirectoryPlanPublic Domain
achilles-backendbackend/Starter ($7/mo)Yes
achilles-frontendfrontend/Starter ($7/mo)Yes

The frontend calls the backend directly via CORS (using VITE_API_URL).

Starter Plan Networking

Render's private network DNS is only available on Standard plan and above. On Starter plan, services cannot resolve each other by name, so the frontend uses VITE_API_URL to call the backend's public URL directly.

  1. Go to render.com/deploy and connect your GitHub repo

  2. Render detects render.yaml and shows the Blueprint preview

  3. Click Apply

  4. Set the sync: false variables on each service:

    Backend:

    CLERK_PUBLISHABLE_KEY=pk_live_...
    CLERK_SECRET_KEY=sk_live_...
    CORS_ORIGIN=https://<frontend>.onrender.com
    AGENT_SERVER_URL=https://<backend>.onrender.com
    TESTS_REPO_URL=https://github.com/your-org/f0_library.git
    GITHUB_TOKEN=ghp_...
    ELASTICSEARCH_CLOUD_ID=...
    ELASTICSEARCH_API_KEY=...

    Frontend:

    CLERK_PUBLISHABLE_KEY=pk_live_...
    VITE_API_URL=https://<backend>.onrender.com

SESSION_SECRET and ENCRYPTION_SECRET are auto-generated by the Blueprint.

Option B: Manual Setup

Backend Service

  1. NewWeb Service → connect GitHub repo
  2. Root Directory: backend, Runtime: Docker, Plan: Starter
  3. Add a Disk: mount at /root/.projectachilles, 1 GB
  4. Set environment variables (see Environment Variables)

Frontend Service

  1. NewWeb Service → same repo
  2. Root Directory: frontend, Runtime: Docker, Plan: Starter
  3. Set CLERK_PUBLISHABLE_KEY and VITE_API_URL

Persistent Disk

The backend uses a 1 GB persistent disk at /root/.projectachilles:

PathPurpose
agents.dbSQLite database
analytics.jsonEncrypted ES credentials
certs/Code signing certificates
binaries/Built agent binaries
go-cache/Go module and build cache
Disk Disables Zero-Downtime Deploys

Persistent disks disable Render's zero-downtime deploys. There will be brief downtime during deploys while the new container starts.

Agent Build from Source

The backend Docker image includes Go 1.24.3. Set AGENT_REPO_URL to enable agent cross-compilation:

AGENT_REPO_URL=https://github.com/your-org/ProjectAchilles.git
AGENT_REPO_BRANCH=main
GITHUB_TOKEN=ghp_... # if repo is private

Custom Domains

Add CNAME records in your DNS provider:

RecordTypeTarget
<prefix>.yourdomain.comCNAME<frontend>.onrender.com
<prefix>.agent.yourdomain.comCNAME<backend>.onrender.com

Then update CORS_ORIGIN, AGENT_SERVER_URL, and VITE_API_URL to use the custom domains.

Cost Estimate

ServiceEst. Monthly Cost
Backend (Starter plan)~$7
Frontend (Starter plan)~$7
Persistent disk (1 GB)~$0.25
Total~$14

Troubleshooting

Frontend shows CORS errors

Verify CORS_ORIGIN is set to the frontend's full URL with https:// prefix.

GitHub/Google login returns 404

You're using a Clerk production instance without custom OAuth credentials. Follow the Prerequisites Clerk OAuth setup.

Agent builds fail with "Agent source not found"

AGENT_REPO_URL is not set, or the Git clone failed at startup. Check container logs for errors.