Below is the D2 code used to generate this diagram:
User: User {
shape: person
}
stripe: Stripe {
label: "Stripe"
payments: Payments {
label: "Payments & Subscriptions"
}
}
vercel: Vercel {
website: Website {
label: "www.quillandpigeon.com"
userWebsite: User Website
artistPortal: Artist Portal
}
}
supabase: Supabase {
label: "Supabase"
postgres: PostgresSQL {
label: "PostgresSQL"
shape: cylinder
}
supabase_auth: Supabase_Auth {
label: "Supabase Auth"
}
postgres <-> supabase_auth
}
railway: Railway {
medusa: Medusa Commerce Backend {
redis: Redis
medusa_server: Medusa Server
medusa_worker: Medusa Worker
postgres: PostgresSQL {
shape: cylinder
}
medusa_worker -> redis
medusa_worker -> postgres
medusa_server -> postgres
medusa_server -> redis
}
umami_analytics: Umami Analytics {
postgres: PostgresSQL {
shape: cylinder
}
umami: Umami
umami -> postgres
}
}
aws: AWS {
reminders: Reminders {
lambda1: Queue-reminder-Lambda
lambda2: Send-reminder-Lambda
lambda3: Update-sent-reminder-Lambda
eb: Event-bridge
sqs: SQS {
shape: queue
}
ses: SES
sns: SNS
eb -> lambda1
lambda1 -> sqs
sqs <-> lambda2
lambda2 -> ses
lambda2 -> sns
sqs -> lambda3
}
s3: S3 Bucket {
bucket: qp-persistent-data
bucket.shape: stored_data
}
}
User <-> vercel.website
vercel.website <-> stripe
vercel.website <-> supabase.postgres: User data, reminders, etc.
vercel.website <-> railway.medusa: orders, inventory, artist info, etc.
vercel.website <-> supabase.supabase_auth
vercel.website <-> railway.umami_analytics.umami
supabase.postgres -> aws.reminders.eb
supabase.postgres <-> aws.reminders.lambda1
aws.reminders.lambda3 -> supabase.postgres
aws.reminders.ses -> User
railway.medusa <-> aws.s3