Product
Surfaces map
Which E-FACTS product owns which job — iOS, website, docs, backend, portal
Surfaces map
E-FACTS is a multi-surface system. Confusion usually comes from putting a job on the wrong surface.
Map
| Surface | Repo / home | Audience | Owns |
|---|---|---|---|
| Marketing website | efacts-website | Prospects, retailers, press | Brand story, public entry points |
| Consumer iOS app | efacts-iosapp | Shoppers | Primary product IA (4 tabs) |
| Backend / APIs | efacts-backend | Clients + ops | Auth, receipts, warranties, wallet bind, shopper services |
| Internal docs | efacts-dev (this site) | Company | Handbook at planned dev.efacts.ca |
| Portal / login | related portal work | Retail / internal | Access and session boundaries separate from public marketing |
Historical reference: E-Facts V.1 (earlier backend + iOS) — use for archaeology, not for greenfield defaults.
Ownership rules
| If the work is… | Put it in… |
|---|---|
| Shopper daily path (tabs, receipt detail, analysis) | iOS + backend APIs |
| Public narrative, SEO, retailer pitch | Website |
| Company process, design tokens, engineering standards | Docs (efacts-dev) |
| Tokens, schemas, bind validation, SSE streams | Backend |
| Retail ops console / internal admin | Portal (not consumer tabs) |
Cross-surface contracts
- Auth: Backend issues JWTs; iOS stores access tokens in Keychain; Google sign-in verifies
id_tokenserver-side. - Money: Integer cents (
Int64/ integer) end-to-end — never floating currency in APIs. - JSON: Backend responses use snake_case; clients map explicitly.
- Brand: Tokens and contrast rules live in
docs/Design.md+ Design language.
Domains
| Domain | Surface |
|---|---|
| efacts.ca | Marketing |
| dev.efacts.ca | Internal docs |
| API hosts (per env) | Backend — see each repo’s env docs |