Engineering
Stack & conventions
Languages, frameworks, and defaults across E-FACTS repos
Stack & conventions
By surface
| Surface | Stack (working) |
|---|---|
| Backend | Node Fastify, PostgreSQL, Redis/BullMQ, Zod, Vitest |
| iOS | SwiftUI (iOS 17+), SPM (e.g. GoogleSignIn), Keychain for tokens |
| Marketing website | Next.js App Router |
Internal docs (efacts-dev) | Next.js App Router · Fumadocs · MDX · Tailwind v4 · next-themes |
Historical Python FastAPI modules may appear in older trees (E-Facts V.1) — treat as reference unless a live service still runs them.
Docs site conventions
| Concern | Choice |
|---|---|
| Framework | Next.js App Router |
| Docs | Fumadocs + MDX under content/docs/ |
| Styling | Tailwind v4 · tokens in src/app/global.css |
| Theme | light / dark / system; dark = charcoal, not plum |
| Motion | Prefer CSS/SMIL; framer-motion only when needed |
| Auth | Lightweight email/password cookie gate — see README |
Cross-cutting conventions
| Topic | Convention |
|---|---|
| Money | Integer cents — never float |
| API JSON | snake_case responses |
| Brand tokens | docs/Design.md + Design language pages |
| Secrets | Env only — never commit |
| Performance (web) | Server Components first; lazy-load heavy client visuals; honor prefers-reduced-motion (see .cursor/rules/performance.mdc) |
Naming
- Product name in UI: E-FACTS / E-FACTS Docs
- Domains:
efacts.ca,dev.efacts.ca - Graphify tags:
efacts_inc_2026,efacts_v1,efacts_backend,efacts_iosapp,efacts_website