diff --git a/README.md b/README.md
index 5af3a52..e9d9f49 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,9 @@ $ go install github.com/storacha/indexing-service/cmd@latest
## Deployment
+> [!TIP]
+> Take a look at the [infrastructure diagram](docs/infra.md) for an overview of what gets deployed.
+
Deployment of this service to AWS is managed by terraform which you can invoke with `make`.
First, install OpenTofu e.g.
diff --git a/docs/infra.md b/docs/infra.md
new file mode 100644
index 0000000..f42af94
--- /dev/null
+++ b/docs/infra.md
@@ -0,0 +1,64 @@
+```mermaid
+graph TB
+ %% VPC and Networking
+ VPC[VPC
10.0.0.0/16] --> PublicSubnets[Public Subnets]
+ VPC --> PrivateSubnets[Private Subnets]
+ PublicSubnets --> IGW[Internet Gateway]
+ PublicSubnets --> NAT[NAT Gateways]
+ NAT --> PrivateSubnets
+
+ %% API Gateway
+ APIGW[API Gateway v2
HTTP API] --> Lambda
+ APIGW --> CustomDomain[Custom Domain
*.indexer.storacha.network]
+ CustomDomain --> Route53[Route53
DNS Zone]
+ CustomDomain --> ACM[ACM Certificate]
+
+ %% Lambda Functions
+ subgraph Lambda[Lambda Functions]
+ GETroot
+ GETclaim
+ GETclaims
+ POSTclaims
+ notifier
+ providercache
+ remotesync
+ end
+
+ %% Event Sources
+ EventBridge[EventBridge
Scheduler] --> notifier
+ SNSTopic[SNS Topic
Head Changes] --> remotesync
+ SQSQueue[SQS Queue
Caching.fifo] --> providercache
+ SQSQueue --> SQSDLQueue[Dead Letter Queue]
+
+ %% Storage
+ Lambda --> DynamoDB
+ subgraph DynamoDB[DynamoDB Tables]
+ metadata
+ chunk_links
+ legacy_claims
+ legacy_block_index
+ end
+
+ Lambda --> S3
+ subgraph S3[S3 Buckets]
+ caching
+ ipni_store
+ notifier_head
+ claim_store
+ legacy_claims_bucket
+ end
+
+ %% Cache
+ Lambda --> ElastiCache
+ subgraph ElastiCache[Redis Serverless]
+ providers
+ indexes
+ claims
+ end
+
+ %% Parameters
+ Lambda --> SSM[SSM Parameter Store
Private Key]
+
+ %% Security
+ SecurityGroup[Security Group
Lambda] --> CacheSecurityGroup[Security Group
Redis]
+```