Skip to content
DevelopersHow it works

Architecture overview

One public door, one private corridor, and a service for each kind of data.

3 min readUpdated View as Markdown

DashForDevs used to be one large application. It is now a set of services, each owning one kind of data in its own database, behind two gateways. The public contract (the /api/... paths, the keys, the JSON) did not change, so existing sites kept working through the move.

Who talks to whom
Public internetEdge (TLS, firewall)Private network: the corridorPrivate network: servicesIsolatedX-API-Keysession cookieOIDCsigned identityyour tokenprivate linkYour site / SDKDashboard userpapiDashboard (BFF)accountstapiinventoryorderscustomerscontent8 more servicescustomer PHI vault

Drag to move · Ctrl/⌘ + scroll to zoom · ← → to step

Overview

Step through it: 5 steps. Click any box for detail.

The services

Service Owns Personal data?
accounts People, sign-in, two-factor, sessions, OIDC Account holders only
organizations Organizations, members, roles, permissions, compliance checklist No
inventory Catalog, sizes, stock, locations, reviews, bundles No
orders Orders, carts, checkout, discounts, loyalty, tax, finance Yes, encrypted
customers Shoppers, tags, segments, bans, calendar Ids only; details in the vault
customer PHI vault Customer names, contacts, addresses, notes, survey answers Yes, encrypted, isolated
content Blog, page groups, media, legal documents, docs No
shipping Carrier connections, label rules, shipping locations Credentials, encrypted
payments Stores' payment processors, charges, subscriptions Card tokens only, never card numbers
billing What DashForDevs charges organizations No
emails Inbox, contact forms, transactional mail Yes
analytics De-identified reports None, by construction
automations Flows, runs, webhooks Ids only at rest
logs Traces of every action, per organization Field names only
cloud Apps, databases, projects for DashForDevs Cloud No

Rules every service follows

  • One writer per table. Exactly one service writes each kind of data.
  • Organization from identity, never from the request. A service takes the organization from the signed identity or the verified session, never from a header or parameter the caller chose.
  • Two checks. The gateway checks the caller, and the service checks again. One bug is not a breach.
  • Ids, not values, in logs and events. Audit rows, traces and events carry record ids and field names only.
  • Postgres only, one database per service, on AWS, encrypted at rest.

Keep reading

Something wrong or missing on this page? Email support@dashfordevs.com.