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>
7.3 KiB
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):
<!-- 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__.pypackage 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
Dockerfilelabels, workdirdocker-compose.ymlservice name, image tag, volume names,container_name- Published image:
fabledscryer:latest→steward:latest
Database
- Alembic
script_locationand any customized version table - Table prefixes (if any — confirm via grep during implementation)
- Rename migration only if prefixed tables exist
Templates & UI
base.htmlwordmark,<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.comumbrella domaingit.fabledsword.complugin 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.