Architecture Diagram

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