···5959| `app/` (frontend) | `AWS_PROFILE=localstack make -C infra update-local-site` | `AWS_PROFILE=production DOMAIN_NAME=lemma.pub make -C infra deploy-site` |
6060| `infra/api/` (Lambda code only) | `AWS_PROFILE=localstack make -C infra update-local-api` | `AWS_PROFILE=production make -C infra update-aws-api` |
6161| `infra/api/` (CloudFormation changes) | `AWS_PROFILE=localstack make -C infra create-local-api` | `AWS_PROFILE=production DOMAIN_NAME=lemma.pub make -C infra create-aws-api` |
6262+| `infra/api/` (both code + CloudFormation) | `AWS_PROFILE=localstack make -C infra create-local-api` | `AWS_PROFILE=production DOMAIN_NAME=lemma.pub make -C infra create-aws-api` and `AWS_PROFILE=production make -C infra update-aws-api` |
6263| Both frontend + API | `AWS_PROFILE=localstack make -C infra update-local` | `AWS_PROFILE=production DOMAIN_NAME=lemma.pub make -C infra deploy-site` and `AWS_PROFILE=production make -C infra update-aws-api` |
6364| `infra/indexer/` (code only) | `AWS_PROFILE=localstack make -C infra run-local-indexer` | `AWS_PROFILE=production make -C infra update-aws-indexer` |
6465| `infra/indexer/` (CloudFormation changes) | `AWS_PROFILE=localstack make -C infra deploy-local-indexer` | `AWS_PROFILE=production make -C infra deploy-aws-indexer` |
···6869| Run backfill | `AWS_PROFILE=localstack make -C infra run-local-backfill DIDS_FILE=~/Drive/dids.txt` | `AWS_PROFILE=production make -C infra run-aws-backfill DIDS_FILE=~/Drive/dids.txt` |
69707071`DOMAIN_NAME=lemma.pub` is required for `deploy-site` and `create-aws-api` (sets `API_DID=did:web:lemma.pub` on the Lambda — omitting it resets `API_DID` to `did:web:localhost` and breaks all authenticated endpoints). Lambda-zip-only and indexer targets do not use it.
7272+7373+`create-aws-api` only updates the CloudFormation stack (API Gateway resources). It does **not** deploy the Lambda zip. When `infra/api/src/` and `blog-api.yaml` both change, you must run both `create-aws-api` and `update-aws-api`. Skipping `update-aws-api` leaves the old Lambda code running, which returns 405 for any new routes even after the API Gateway resources are created.
71747275The indexer is a separate long-running process — `update-local` does **not** cover it. Restart it separately whenever `infra/indexer/` changes.
7376