Developer Machine │ OpenCode / Zed │
│ Bearer token (OIDC via ADC)
Google Cloud │ Cloud Run │
┌────────────────┼────────────────┐
┌──────────┐ ┌──────────┐ ┌──────────┐
│ BigQuery │ │Firestore │ │Vertex AI │
│ (spans) │ │(budgets) │ │(LLM API) │
└──────────┘ └──────────┘ └──────────┘
| Component | Location | Purpose |
|---|
| Go Backend | cmd/candela-server | API, LLM proxy, span ingestion, auth, storage |
| Next.js UI | ui/ | Dashboard, trace waterfall, costs, admin |
| candela-local | cmd/candela-local | CLI proxy injecting Google credentials for dev tools |
| candela-sidecar | cmd/candela-sidecar | Lightweight container proxy with Pub/Sub export |
| Terraform | terraform/ | Cloud Run, BigQuery, Firestore, Firebase, IAM |
All cloud resources are managed via Terraform in the terraform/ directory:
| File | Resources |
|---|
cloud_run.tf | Cloud Run service, IAM |
firebase.tf | Firebase project, Identity Platform, authorized domains |
bigquery.tf | Dataset + spans table (time-partitioned) |
firestore.tf | Firestore database |
iam.tf | Service account + role bindings |
artifact_registry.tf | Container image registry |
gcloud builds submit --project $PROJECT -f deploy/cloudbuild.yaml .
gcloud run services update candela --project $PROJECT --region $REGION \
--image $REGION-docker.pkg.dev/$PROJECT/candela/candela-server:latest
cd terraform && terraform apply