Skip to content

System context

Who uses cvhome, what it talks to, and the legend the other architecture pages share (C4 level 1).

cvhome is a multi-tenant e-commerce SaaS. One platform layer (store-core) runs once per environment and holds identity, organizations, stores, plans and the routing table. A business layer (store-pod) runs once per pod and holds the stores' own data: catalog, content, carts, orders, customers, payments. A pod is a physical deployment; a store is a logical tenant placed in one pod. The next level down is Containers.

Diagram C1

Actors

ActorWhoEntry pointAuthenticated by
MerchantAn organization owner or a member of store staff. Creates stores, manages products, content, orders, customers, payments and the subscription.The console at gateway.com (store-core-gateway :8000, which serves console-ui)uaa
Platform administratorThe operator of the SaaS. Manages organizations, pods, platform plans, platform billing and platform users.The same console at gateway.com (its platform-admin feature areas), plus the uaa admin app at uaa.gateway.com (uaa :8001, which embeds uaa-fe)uaa
ShopperA customer of one store. Browses, searches, registers, signs in, orders and pays.The storefront on the store's own host, served by that pod's spg (Caddy) in front of landing-uicua (one per pod)

Two entry points, two identity realms. Merchants and administrators arrive through the platform gateway and are authenticated by uaa; the gateway holds their session and relays their token to every platform service and into the pod that hosts the store they are working on. Shoppers never touch store-core: their request lands on the pod's edge, which resolves the host to a store and injects Store-Id and the theme headers before landing-ui renders. Details: Authentication, Gateway routing and Edge and custom domains.

The hostnames are the local ones from common-config.yml (com.asrevo.cvhome.app.domain: gateway.com, subdomains www, console-ui, uaa; pod domain spg-507f1f77.gateway.com). A deployment substitutes its own.

External systems

SystemUsed byFor
Stripebilling (store-core)Platform plans and per-store subscriptions; StripeWebhookApi receives Stripe's events.
Stripepayment (store-pod)The integrated payment provider for a store's checkout; PublicPaymentWebhookApi receives events per store at /api/v1/public/webhook/{storeId}/{paymentType}.
AWS S3spg (Caddy storage s3), content, merchant, payment, landing-uiTLS certificates for custom domains; the media library and files; the storefront's static assets pushed at container start. MinIO stands in locally.
AWS CloudFront, Route53, ACMThe AWS deployment (cvhome-platform)Serving static assets and media from the edge, DNS, and the platform's own certificates. See Deployment: AWS.

Legend

Every diagram on the architecture pages uses the same shapes and strokes.

ShapeMeaning
Stadium, grayA person: merchant, shopper, platform administrator.
Rectangle, solid blueA container: one deployable unit (a Spring Boot service, an Angular SSR or Next.js server, the Caddy edge). The second line names its runtime and the port from common-config.yml.
Cylinder, dashed blueA database or object store.
Rectangle, dashed grayAn external system cvhome does not run.
SubgraphA deployment boundary: store-core (one per environment) or store-pod (one per pod).
Solid arrowA synchronous HTTP call in the direction of the request. The label says what it is for; a path on the label is the route the caller uses.
Dotted arrowA scheduled or asynchronous call (a poll, an outbox delivery, a webhook).

Ports are the container's own port. From outside its boundary a container is only reachable as a path on its gateway: store-core-gateway for the platform layer, spg for a pod.


Source of truth: cvhome .claude/skills/project-structure/SKILL.md, store-commons/autoconfigure/src/main/resources/common-config.yml, store-pod/spg/Caddyfile, store-pod/payment/payment-service (PublicPaymentWebhookApi), store-core/billing/billing-service (StripeWebhookApi), store-pod/landing-ui/storefront/scripts/static-assets/sync-s3.mjs; cvhome-platform main.tf.