Files
FabledSteward/docs/superpowers/specs/2026-04-13-rebrand-design.md
T
bvandeusen 88ab5b917e chore: rename project Roundtable → Steward
Renames the Python package directory, CLI command, env var prefix,
docker-compose service/container/image, Postgres role/db, and all
visible branding. Marketing form is "Fabled Steward".

Clean break from the previous rebrand: drops the fabledscryer→roundtable
import shim in __init__.py and the FABLEDSCRYER_* env var fallback in
config.py and migrations/env.py. Env vars are now STEWARD_* only.

Heads-up for existing deployments:
- Postgres user/db renamed fabledscryer → steward in docker-compose.yml.
  Existing volumes need the role/db renamed inside Postgres, or override
  POSTGRES_USER/POSTGRES_DB to keep the old names.
- Host-agent systemd unit is now steward-agent.service. Existing agents
  keep running under the old name; reinstall to switch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 16:20:14 -04:00

162 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Steward Rebrand — Design
**Date:** 2026-04-13
**Status:** Approved for planning
## 1. Identity
**Name:** Steward (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. "Steward" captures that: a place where the realm's tools and information meet.
**Name conflict check:**
- *Steward 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. Steward becomes one product under that umbrella.
**Tone:** Heraldic / Arthurian register. The steward 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
<!-- Seal: gold rim -->
<circle cx="12" cy="12" r="10.5" fill="none" stroke="#c8a840" stroke-width="1.5"/>
<!-- Faint pewter wash -->
<circle cx="12" cy="12" r="9.3" fill="#8a8a92" opacity="0.1"/>
<!-- Crown above, five points -->
<path d="M7 10 L7 5.8 L9 7.8 L10.5 5 L12 7.2 L13.5 5 L15 7.8 L17 5.8 L17 10 Z" fill="#c8a840"/>
<!-- Table: filled ellipse tabletop + two legs -->
<ellipse cx="12" cy="15.5" rx="5.2" ry="1" fill="#c8a840"/>
<rect x="9.6" y="15.5" width="1" height="3.8" fill="#c8a840"/>
<rect x="13.4" y="15.5" width="1" height="3.8" fill="#c8a840"/>
```
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
"Steward" 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 → `steward/`
- All `from fabledscryer...` / `import fabledscryer...``steward`
- `pyproject.toml`: project name, CLI entry point (`fabledscryer = "fabledscryer.cli:main"``steward = "steward.cli:main"`), tool sections
- `__init__.py` package metadata
**Runtime config**
- Env vars: `FABLEDSCRYER_*``STEWARD_*`
- Residual `FABLEDNETMON_*` env vars removed
- Config dir: `~/.config/fabledscryer``~/.config/steward` (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``steward: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, `<title>`, 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/``steward/`, all imports, `pyproject.toml` name + entry point, `__init__.py` metadata. Docker/config untouched. Package installable as `steward` locally.
**PR 3 — Config & env vars**
`FABLEDSCRYER_*``STEWARD_*` 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.