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.
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.