You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**U-1: Role-Aware Dashboard Editor (COMPLETE)** — Role selector in dashboard editor. `RoleDashboardLayouts` struct with backward-compatible JSON format: detects legacy bare `{"rows":[...]}` vs role-keyed `{"default":...,"player":...,"scribe":...}`. Alpine.js toggle (Default/Player/Scribe) in customize.templ. `dashboard_editor.js` appends `?role=` param, listens for `role-change` events. Handler merges role layouts via `SetRoleDashboardJSON`/`RemoveRoleDashboardJSON`. `ParseRoleDashboardLayout(role)` with fallback chain. `UpdateDashboardLayoutRaw` service method. 9 unit tests in `model_test.go`.
15
+
-**W-1: Command Palette (PARTIAL)** — `static/js/command_palette.js` (~280 lines). Ctrl+Shift+P trigger, modal with search input, scrollable command list. Context-aware: detects campaign ID from URL, admin from DOM. 13 campaign nav commands, 3 action commands, 3 universal commands. Fuzzy substring match, keyboard nav (arrows/enter/escape). Added to `base.templ` and `shortcuts_help.js`. Saved filters not yet implemented.
16
+
-**T-3: Worldbuilding Prompts (COMPLETE)** — Full stack:
- Repository: `WorldbuildingPromptRepository` with Create, FindByID, ListForCampaign, ListForCampaignAndType, Update, Delete.
20
+
- Service: `WorldbuildingPromptService` with validation (name max 200, text max 5000), default icon. `EntityTypeLister` interface (subset of EntityTypeRepository). `SeedDefaults` inserts 16 prompts across 5 types.
21
+
- Handler: ListAPI (HTMX fragment support), CreateAPI, UpdateAPI, DeleteAPI with IDOR checks.
22
+
- Routes: GET (Player+), POST/PUT/DELETE (Owner) at `/campaigns/:id/worldbuilding-prompts`.
- Seeding: `WorldbuildingPromptSeeder` interface in campaigns package, called during campaign creation.
25
+
- Tests: 7 unit tests.
26
+
-**Next up:** W-1 saved filters, or Phase 2 (X-1: System Upload UX), or other backlog items.
12
27
13
28
41.**Post-Phase-1 Sprint: W-0.5 + V-4b + U-2.**
14
29
-**W-0.5 completion** — Accent color CSS variable now propagates to all 258 Tailwind utility usages. Updated `tailwind.config.js` to reference `var(--color-accent)` instead of hardcoded hex. Added `--color-accent-hover` and `--color-accent-light` CSS variables with auto-computed darker/lighter variants from the base hex color. New `AccentColorCSS()` helper in `layouts/data.go` generates the CSS block with all three variants. Topbar styling, brand name, brand logo were already working.
-[x]**Sprint T-3: Guided Worldbuilding Prompts** — Migration 000008 (`worldbuilding_prompts` table). `WorldbuildingPromptRepository` with full CRUD + type filtering. `WorldbuildingPromptService` with validation, `EntityTypeLister` interface for seeding, `SeedDefaults()` inserts 16 prompts across 5 entity types (character: 4, location: 4, organization: 3, item: 2, quest: 3). REST API (GET Player+, POST/PUT/DELETE Owner). `WorldbuildingPromptsPanel` templ component with HTMX lazy-load (`hx-trigger="revealed"`) and `<details>` accordion. Shown on entity show page for Scribe+. Seeded automatically on campaign creation via `WorldbuildingPromptSeeder` interface. 7 unit tests.
188
188
-[ ]**Sprint T-4: Entity Type Template Library** — Genre presets (fantasy, sci-fi, horror, modern, historical) as JSON fixtures. Campaign creation genre selection. "Import preset" in Customization Hub.
189
189
190
190
### Phase U: Collaboration & Platform Maturity
191
191
192
-
-[~]**Sprint U-1: Role-Aware Dashboards** — Two-dashboard architecture implemented: Campaign Page (public, `/campaigns/:id`) and Owner Dashboard (owner-only, `/campaigns/:id/dashboard`). Both independently customizable via Customization Hub. Migration 000006 adds `owner_dashboard_layout` column. Remaining: role selector in dashboard editor so Players/Scribes can see role-specific campaign page layouts.
192
+
-[x]**Sprint U-1: Role-Aware Dashboards** — Two-dashboard architecture implemented: Campaign Page (public, `/campaigns/:id`) and Owner Dashboard (owner-only, `/campaigns/:id/dashboard`). Both independently customizable via Customization Hub. Migration 000006 adds `owner_dashboard_layout` column. Role selector in dashboard editor: `RoleDashboardLayouts` struct with backward-compatible JSON format (detects legacy bare `{"rows":[...]}` vs role-keyed `{"default":...,"player":...,"scribe":...}`). Alpine.js role toggle (Default/Player/Scribe) in customize.templ. `dashboard_editor.js` appends `?role=` to GET/PUT/DELETE endpoints, listens for `role-change` events. Handler merges role-specific layout via `SetRoleDashboardJSON`. `ParseRoleDashboardLayout(role)` returns role-specific layout with fallback to default. 9 unit tests for model methods.
193
193
-[x]**Sprint U-2: Invite System** — Migration 000007 (`campaign_invites` table). InviteRepository, InviteService, InviteHandler. Email invitations with one-click accept link via `/invites/accept?token=xxx`. Invite management UI in campaign settings (HTMX lazy-loaded). Send form with email + role selector. Invite table with status badges (pending/accepted/expired) and revoke button. HTML+plaintext email template. Login/register redirect support (`?redirect=` param). 9 unit tests.
194
194
-[ ]**Sprint U-3: 2FA/TOTP Support** — TOTP enrollment with QR code (`pquerna/otp`). Login redirect to TOTP input. Recovery codes (8 hashed). Admin force-disable.
-[x]**Sprint W-0: Nav Menu Reorg Mode** — Small icon button near Dashboard in sidebar. Click to enter reorg mode for current level (categories or entities). Category level: drag to reorder category icons. Entity level: drag to reorder, create folders/submenus. Click again to exit reorg mode. Must work on desktop, tablet, and mobile. Button is context-aware: on base nav, reorders categories; drilled into a category, reorders entities.
213
213
-[x]**Sprint W-0.5: Owner Visual Customization** — Change "Chronicle" brand name per-campaign with optional image/logo. Top bar color/gradient/animation/background image (responsive). Visual customization editor with faux site outline (editable boxes for colors/backgrounds). Appearance-only, not layout editing. Accent color CSS variable now propagates to all Tailwind utilities via `var(--color-accent)` references. Auto-computed hover/light variants.
214
-
-[]**Sprint W-1: Command Palette & Saved Filters** — Ctrl+Shift+P action palette with fuzzy search. Saved entity list filter presets as sidebar links in `saved_filters` table.
-[ ]**Sprint W-2.5: Nested / Linked Maps** — Click marker to open sub-map. `linked_map_id` on markers. Breadcrumb navigation between map levels. Competitive gap vs World Anvil/LegendKeeper.
217
217
-[ ]**Sprint W-3: Discord Bot Integration** — Plugin at `internal/plugins/discord/`. Bot token config. Webhook session notifications. Reaction-based RSVP per ADR-012.
0 commit comments