diff --git a/docs/superpowers/specs/2026-04-13-rebrand-design.md b/docs/superpowers/specs/2026-04-13-rebrand-design.md new file mode 100644 index 0000000..72e3d6a --- /dev/null +++ b/docs/superpowers/specs/2026-04-13-rebrand-design.md @@ -0,0 +1,161 @@ +# Roundtable Rebrand — Design + +**Date:** 2026-04-13 +**Status:** Approved for planning + +## 1. Identity + +**Name:** Roundtable (dropping the "Fabled" prefix). + +**Why the change:** The old name `FabledScryer` framed the app as a single seer peering into one crystal ball. The actual product is a gathering point — hosts, metrics, alerts, plugins, and dashboards from across the homelab converge here. "Roundtable" captures that: a place where the realm's tools and information meet. + +**Name conflict check:** +- *Roundtable Software* — a Progress ABL tooling vendor. Different demographic, no overlap. +- *Fabled.gg* — a virtual tabletop product. Closest concern, and the reason the "Fabled" prefix is dropped entirely to avoid confusion inside the tabletop/fantasy space. + +**Umbrella:** `fabledsword.com` remains the family umbrella domain; `git.fabledsword.com` remains the plugin catalog host. Roundtable becomes one product under that umbrella. + +**Tone:** Heraldic / Arthurian register. The roundtable is the gathering place of those who keep watch over the realm. + +## 2. Visual System + +### Palette — Pewter & Gold + +Design tokens (map to CSS custom properties in `base.html` `:root`): + +| Token | Value | Role | +|---|---|---| +| `--bg-0` | `#131315` | Page background (near-black, no blue cast) | +| `--bg-1` | `#1d1d20` | Card / panel background | +| `--bg-2` | `#24242a` | Hover / elevated surface | +| `--border` | `#30303a` | Default border | +| `--border-accent` | `#c8a840` | Gold accent border (focus, active) | +| `--text-0` | `#d4d0c0` | Primary text (warm parchment) | +| `--text-1` | `#b8b8b0` | Secondary text | +| `--text-2` | `#8a8a92` | Tertiary / pewter text | +| `--gold` | `#c8a840` | Brand gold | +| `--pewter` | `#8a8a92` | Brand pewter | + +No purple. No steel blue. Backgrounds are neutral near-black; text is warm parchment; the only chromatic accents are gold and pewter. + +### Buttons — full action palette + +| Role | Color | Use | +|---|---|---| +| Primary | Gold (`#c8a840`) | Main CTA, submit, confirm | +| Success | Green | Positive state changes, "all clear" | +| Danger | Crimson | Destructive / warning actions | +| Secondary | Pewter (`#8a8a92`) | Cancel, neutral | + +Exact green/crimson hues finalized in implementation; must sit harmoniously next to gold and against the near-black background. + +### Logo — Heraldic Seal (crown & table) + +Locked SVG (24×24 viewBox, solid gold fills only): + +```html + + + + + + + + + + +``` + +Reads as a heraldic seal: gold rim, faint pewter wash, five-point crown, solid-gold elliptical table with two legs. No inner detail to clutter at small sizes. Legible from 22px nav icon to 200px marketing size. + +### Typography + +**EB Garamond** via Google Fonts. Used for the wordmark, headings, and body. Warm, classical, matches the heraldic register without being costume-y. Replaces Libertinus Serif. + +### Background + +Candlelit glow — a soft, warm radial wash behind the main content area. Replaces the animated star field. Static (no animation) to stay calm and low-distraction. + +### Wordmark + +"Roundtable" in EB Garamond, gold (`#c8a840`), paired with the seal mark to the left in the nav header. + +## 3. Voice & Copy + +**Strategy:** plain, functional UI copy. Themed flavor appears only at the edges — places where a little atmosphere costs nothing and rewards exploration. + +**Plain (no flavor):** +- Host list, alert list, plugin settings, forms, tables, error validation +- Button labels ("Save", "Delete", "Add host") +- Column headers, tooltips, help text + +**Themed (heraldic flavor):** +- **Login screen** — brief atmospheric tagline below the wordmark +- **Empty states** — "No hosts yet. Summon one to the table." style, one line each +- **404 / 500 pages** — themed error messages with clear recovery actions +- **Dashboard hero title** — **"Under Watch, Under Care"** (optional, can be disabled) + +**Not used:** themed language in validation errors, confirmation dialogs, or anywhere the user is trying to accomplish a task. Flavor must never get in the way of understanding what's happening. + +## 4. Rename Mechanics + +**Code & packaging** +- `fabledscryer/` package directory → `roundtable/` +- All `from fabledscryer...` / `import fabledscryer...` → `roundtable` +- `pyproject.toml`: project name, CLI entry point (`fabledscryer = "fabledscryer.cli:main"` → `roundtable = "roundtable.cli:main"`), tool sections +- `__init__.py` package metadata + +**Runtime config** +- Env vars: `FABLEDSCRYER_*` → `ROUNDTABLE_*` +- Residual `FABLEDNETMON_*` env vars removed +- Config dir: `~/.config/fabledscryer` → `~/.config/roundtable` (one-shot copy on first boot) +- Log file names, systemd unit names if any + +**Container & deploy** +- `Dockerfile` labels, workdir +- `docker-compose.yml` service name, image tag, volume names, `container_name` +- Published image: `fabledscryer:latest` → `roundtable:latest` + +**Database** +- Alembic `script_location` and any customized version table +- Table prefixes (if any — confirm via grep during implementation) +- Rename migration only if prefixed tables exist + +**Templates & UI** +- `base.html` wordmark, ``, meta tags +- Hardcoded "FabledScryer" strings in templates, flash messages, emails +- Favicon / app icon assets + +**Docs & repo** +- README, CONTRIBUTING, `docs/` +- Forgejo repo rename (redirect preserves old URL) +- Local directory rename (optional) + +**Preserved (not renamed)** +- `fabledsword.com` umbrella domain +- `git.fabledsword.com` plugin catalog host +- Plugin repo names + +## 5. Sequencing + +Staged so `main` stays runnable between PRs. + +**PR 1 — Visual reskin (no rename)** +New palette tokens, locked logo SVG, EB Garamond font swap, candlelit glow background, themed edge copy (login, empty states, 404/500, dashboard hero "Under Watch, Under Care"). Still named FabledScryer internally. Ships independently, low risk. + +**PR 2 — Python package rename** +`fabledscryer/` → `roundtable/`, all imports, `pyproject.toml` name + entry point, `__init__.py` metadata. Docker/config untouched. Package installable as `roundtable` locally. + +**PR 3 — Config & env vars** +`FABLEDSCRYER_*` → `ROUNDTABLE_*` with a short-lived fallback reader (accept both, warn on old) so self-hosters don't break mid-upgrade. Config dir migration on first boot. Drop `FABLEDNETMON_*` residue. + +**PR 4 — Container & deploy** +`Dockerfile`, `docker-compose.yml` service/image/volume/container names. Published image tag switch. Template wordmark + `<title>` + meta (the last user-visible string flip). + +**PR 5 — Repo & docs** +README, docs, CONTRIBUTING. Forgejo repo rename. Local directory rename (optional). + +**PR 6 — Cleanup (after one release cycle)** +Remove env var fallback shim from PR 3. Remove config dir migration code. + +**Rationale:** reskin first is safe and visible; package rename is the mechanical core; config/container flips are the breaking-change moments gated behind the fallback shim; docs last so they reflect final state.