feat: Spotter design system + full frontend redesign - #360
Conversation
Ownable Spotify-evoking identity (green #1FDF6E + Vibe Violet #8B5CF6, deliberately not Spotify's #1DB954/#1ED760). Adds the custom `spotter` DaisyUI theme (default), Figtree type + polish utilities, re-themes the Docusaurus docs off the hardcoded Spotify green, and publishes a class-based design-system bundle (ds-bundle/) synced to claude.ai/design. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restyle all 40 templ views into the Spotter design language (green leads, Vibe Violet for AI/Vibes, near-black surfaces, pill CTAs, art shelves, hero headers, now-playing rows, Figtree). Markup-only: all htmx/SSE/ hyperscript/Alpine wiring, form fields, templ control flow, and component signatures preserved. Updates one login copy assertion to match new text. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Security review — clean ✅Adversarial security pass over the full What I checked
VerdictNo high/critical (or lower) security findings. The redesign preserved every existing escaping and 🤖 Posted on behalf of |
Test / coverage review — design-system redesignTL;DR: Not blocking. What's good
Finding 1 — weak/near-tautological assertion (please tighten)
assert.Contains(t, body, "AI") // AI attribution badge
Finding 2 — pre-existing theme-init bug, now more relevant (non-blocking)
const defaultTheme = '{ cfg.Theme.Default }';This sits inside a Coverage
🤖 Posted on behalf of |
LINT review —
|
| Linter | Command | Result |
|---|---|---|
| templ fmt | templ fmt -fail . |
✅ clean (41 files, 0 changed) |
| go vet | go vet ./... |
✅ clean |
| golangci-lint | golangci-lint run ./... (v1.64.8, CI-pinned) |
✅ clean |
| markdownlint | npx markdownlint "**/*.md" ... |
❌ 2 failures |
❌ Markdown (BLOCKING — CI make lint-md would fail)
ds-bundle/README.md has two table rows with a missing cell (header declares 3 columns, these rows supply 2):
ds-bundle/README.md:62:116 MD056/table-column-count Expected: 3; Actual: 2
ds-bundle/README.md:63:34 MD056/table-column-count Expected: 3; Actual: 2
- Line 62 —
| Type | \sp-display` `sp-h1` ... |` — only 2 cells. - Line 63 —
| Layout | \sp-stack` · `sp-row` |` — only 2 cells.
Each needs a third pipe-delimited cell (or the table structure adjusted) to match the 3-column header.
Notes
- Local
golangci-lintis v2.11.4, which cannot parse this repo's v1-format.golangci.yml. To match CI exactly I installed and ran the pinned v1.64.8 — that run is clean. templ fmtin this environment does not support-l; used-fail(read-only, same check CI'slint-templuses).- No YAML or Dockerfile changes in this PR, so
lint-yaml/lint-dockerare unaffected.
BLOCKING: yes — the 2 markdownlint MD056 errors in ds-bundle/README.md will fail CI until fixed.
🤖 Posted on behalf of @joestump by Claude.
- ds-bundle/README.md: fix MD056 table column counts (CI-blocking markdownlint)
- dashboard.templ: fix theme-init script that relied on templ interpolating
{ cfg.Theme.Default } inside <script> (templ does not); server-rendered
data-theme is the default, JS now only applies a saved override.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adversarial review round — resolvedThree parallel adversarial reviews ran (security / testing / lint):
Fixes applied (1924760)
Deferred (pre-existing, non-blocking): 🤖 Posted on behalf of |
…spotter-design-system # Conflicts: # internal/config/config.go
Spotter Design System + full frontend redesign
Introduces the Spotter design system and restyles the entire frontend onto it.
Identity — evokes a modern music app, legally its own thing
#1FDF6E(primary) — deliberately not Spotify's#1DB954/#1ED760#8B5CF6(secondary) — reserved for AI / Vibes features; breaks the green-only monochromeWhat changed
spotterDaisyUI theme (tailwind.config.js) — now the default (internal/config), wired intoBase()/switcher. Cascades through every view via DaisyUI semantic classes.static/css/input.css(Figtree, green CTA glow, card hover-lift, green active-nav, violet Vibes utilities).internal/views/**/*.templredesigned into the design language — hero headers, art shelves w/ hover lift, now-playing rows, stat blocks, violet Vibes panels, pill CTAs.docs-site) re-themed to match.ds-bundle/— the design system published to a claude.ai/design project.Guardrails (markup-only redesign)
Every htmx/SSE/hyperscript/Alpine attribute, form field
name/id,type=,templ.URL/templ.KV, and@components.*call was preserved verbatim — verified via net-zero functional-attribute diff analysis. Notemplsignatures or Go logic changed.Verification
templ generate+go build ./...+npm run build:csscleango test ./...green (updated one login copy assertion)Known low-severity notes (non-blocking)
secondary) is used broadly; each usage should sit on a genuinely AI/Vibes surface (spot-check recommended).toggleBio()JS — a minor cosmetic lag.🤖 Generated with Claude Code
🤖 Posted on behalf of
@joestumpby Claude.