From 99404db48b4d60b6b0d45ad820eb2ab6e4f48bba Mon Sep 17 00:00:00 2001 From: Keysat Date: Thu, 18 Jun 2026 21:50:34 -0500 Subject: [PATCH] Add mobile-first design contract and redesign brief Scaffold design/ for the frontend's first design contract, extracted as-built from index.html (document-as-is): - DESIGN.md: 9-section brand brief (dark venture-CRM look, IBM Plex, single #3b82c4 accent) + tokens.tokens.json (DTCG, from :root + an inline-style census). - BRIEF.md: the mobile-first redesign packet. Mobile = 4 surfaces (Grid, Pipeline, Reminders, Contacts) in a bottom tab bar; the rest desktop-only. Grid view-switching first-class; narrow on-the-go edit set (name, contacts, notes/comms/outreach log, stage, reminders) + create-investor, all via the canonical grid path (Contacts stays read-only). Includes a backend-reality callout: no field-level write (whole-grid versioned PUT vs the targeted log-communication path), stage is a separate two-call opportunities flow, pill removal has no undo, dedup typeahead is client-side. - brand/ assets, inspiration/ provenance. Wire the AGENTS.md Design line so any agent reads the contract before UI work. --- AGENTS.md | 9 +- design/BRIEF.md | 247 +++++++++++++++++++++++++ design/DESIGN.md | 125 +++++++++++++ design/brand/ten31-favicon.svg | 5 + design/brand/ten31-inverted-square.png | Bin 0 -> 10521 bytes design/brand/ten31-logo-white.svg | 43 +++++ design/inspiration/README.md | 17 ++ design/tokens.tokens.json | 96 ++++++++++ 8 files changed, 538 insertions(+), 4 deletions(-) create mode 100644 design/BRIEF.md create mode 100644 design/DESIGN.md create mode 100644 design/brand/ten31-favicon.svg create mode 100644 design/brand/ten31-inverted-square.png create mode 100644 design/brand/ten31-logo-white.svg create mode 100644 design/inspiration/README.md create mode 100644 design/tokens.tokens.json diff --git a/AGENTS.md b/AGENTS.md index 0288525..82d7190 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,6 +75,7 @@ Subsystem rules live in `docs/guides/` and lazy-load in Claude Code via `.claude - **Env:** secrets in `.env` (gitignored); names in `.env.example`. Verified names: `ANTHROPIC_API_KEY`, `SPARK_CONTROL_URL`, `SPARK_CONTROL_VERIFY_TLS`, `QDRANT_URL`, `X_API_KEY`, `CRM_DB_PATH`, `CRM_DEV_DB_PATH`. Also used: `CRM_SECRET_KEY` (beta/prod), `CRM_HOST`/`CRM_PORT`, `CRM_DATA_DIR`; digest mailer: `CRM_DIGEST_SENDER` (DWD impersonation sender) + `SMTP_HOST`/`SMTP_PORT`/`SMTP_SECURITY`/`SMTP_FROM`/`SMTP_USERNAME`/`SMTP_PASSWORD` (SMTP fallback); daily digest (Phase B): `CRM_DIGEST_ENABLED` + `CRM_DIGEST_SEND_HOUR` **only seed the first-boot default** — the live control is the DB policy (`app_settings.digest_policy`, set in Settings → Admin). - **Config placement:** operational/feature toggles live in the **admin panel**, DB-backed via `app_settings` (read-merge through a `load_*_policy(conn)` helper shared by the API + any scheduler; precedence DB-row → env-seed → default), so they're discoverable and take effect live. Reserve StartOS actions / env for **secrets and deploy-time config** (SMTP creds, API keys, DWD sender). Precedent: `digest_policy` (`GET/PATCH /api/admin/digest/policy`), `fundraising_backup_policy`. - **Agent/bot API access — three roles now (`admin`/`member`/`bot`).** `require_admin` is the only hard gate; everything else is "authenticated" (member, admin, *and* bot all pass). The **`bot` role** (added v0.1.0:89) is authenticated-but-never-admin: `require_bot_or_admin` gates agent-facing endpoints (e.g. `/api/intake/email-proposals*`) so a bot credential reaches *only* what it needs, never user-management/settings/security. Provision it via Settings → Admin edit-user dropdown (kept out of the teammate-invite form). **Two axes to keep separate as more agent capability lands:** the role controls *reach* (which endpoints); the per-feature human draft→approve gate controls *autonomy* (acting unattended). Money/merge/delete mutations stay behind the approval gate regardless of role. Don't build a finer capability/scope system until real NL-mutation endpoints exist to scope against. +- **Design:** before building or changing any user-facing UI, read `design/DESIGN.md` and `design/tokens.tokens.json` and conform to them. A **mobile-first redesign** is in flight — read `design/BRIEF.md` before any responsive/layout work. (Note: inline `style={{}}` objects can't respond to media queries; responsive layout belongs in the CSS ` + + Ten31 + + + + + + + + + + \ No newline at end of file diff --git a/design/inspiration/README.md b/design/inspiration/README.md new file mode 100644 index 0000000..1f79202 --- /dev/null +++ b/design/inspiration/README.md @@ -0,0 +1,17 @@ +# Inspiration / reference — Ten31 CRM design + +This contract was **extracted as-built** (document-as-is), so the de-facto reference is the +product's own code and brand mark, not an external inspiration set. + +- **De-facto design reference:** `frontend/index.html` — the single-file React UI. The + embedded `