Render is a modern cloud Application Platform-as-a-Service (PaaS). The Personal Lifecycle Tracker infrastructure supports two independent environments:
dev): Free tier services (personal-lifecycle-*-dev) managed via render.yaml or terraform/render/.production): Independent copy with production tier services (personal-lifecycle-*-prod) managed via render.prod.yaml or terraform/render-prod/.flowchart LR
User["Web Browser"] -->|HTTPS| Frontend["Frontend Web Service (Caddy + React)"]
Frontend -->|Static Files / Assets| Dist["React 19 SPA"]
Frontend -->|Reverse Proxy /api & /health| Backend["Backend Web Service (FastAPI)"]
Backend -->|PostgreSQL Wire Protocol| DB[("Managed PostgreSQL 16")]
caddy:2-alpine), serving the React 19 production build and reverse-proxying /api/* and /health requests to the backend service.python:3.11-slim), connected to the managed PostgreSQL database.render.yaml)To deploy the dev environment:
render.yaml by default.personal-lifecycle-db-dev (Database: lifecycle_dev, Plan: free)personal-lifecycle-backend-dev (FastAPI Web Service, Plan: free)personal-lifecycle-frontend-dev (Caddy Web Service, Plan: free)render.prod.yaml)To deploy the independent production environment:
render.prod.yaml.personal-lifecycle-db-prod (Database: lifecycle, Plan: starter)personal-lifecycle-backend-prod (FastAPI Web Service, Plan: starter)personal-lifecycle-frontend-prod (Caddy Web Service, Plan: starter)terraform/render/)# Validate Dev configuration
make tf-validate-render
# Plan Dev infrastructure
make tf-plan-render
# Apply Dev infrastructure
docker run --rm -it \
-v $(PWD)/terraform/render:/workspace \
-w /workspace \
-e RENDER_API_KEY="rnd_your_api_key" \
hashicorp/terraform:1.7.5 apply -var-file=terraform.tfvars.dev
terraform/render-prod/)# Validate Production configuration
make tf-validate-render-prod
# Plan Production infrastructure
make tf-plan-render-prod
# Apply Production infrastructure
docker run --rm -it \
-v $(PWD)/terraform/render-prod:/workspace \
-w /workspace \
-e RENDER_API_KEY="rnd_your_api_key" \
hashicorp/terraform:1.7.5 apply -var-file=terraform.tfvars.prod
Both modules export identical output attributes:
backend_url: URL for the backend API service.frontend_url: URL for the frontend application.application_health_url: Public healthcheck endpoint via Caddy reverse proxy (/health).database_id: Render managed PostgreSQL identifier..github/workflows/ci.yml)The GitHub Actions workflow deploys automatically based on branch or workflow dispatch:
dev / develop: Deploys to the Dev environment and polls the configured Dev health URL (RENDER_HEALTH_URL or https://<dev-service>.onrender.com/health).main: Deploys to the Production copy and polls the configured Production health URL (RENDER_HEALTH_URL or https://<prod-service>.onrender.com/health).target_environment: production or target_environment: dev.See the CI/CD Pipeline Guide for secrets configuration.