From 3a7340975f75d324141de674c27955e4667b15ca Mon Sep 17 00:00:00 2001 From: claudecode Date: Tue, 30 Jun 2026 23:22:34 -0400 Subject: [PATCH] feat: Phase 3 campaign management Campaign CRUD API with cascading delete across all campaign-scoped tables, a systems endpoint to seed the create-campaign form, active campaign state wired to the sidebar chaos factor, and a campaign management view for creating/switching/deleting campaigns. --- CLAUDE.md | 6 +- public/css/styles.css | 16 ++++ public/index.html | 3 + public/js/api.js | 50 ++++++++++++ public/js/app.js | 84 ++++++++++++++++--- public/js/campaigns.js | 118 +++++++++++++++++++++++++++ server/index.js | 2 + server/routes/campaigns.js | 160 +++++++++++++++++++++++++++++++++++++ server/routes/systems.js | 12 +++ 9 files changed, 438 insertions(+), 13 deletions(-) create mode 100644 public/js/campaigns.js create mode 100644 server/routes/systems.js diff --git a/CLAUDE.md b/CLAUDE.md index 7b82628..d7166af 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,7 +73,8 @@ mythic-oracle/ │ ├── threads.js │ ├── npcs.js │ ├── notes.js -│ └── tables.js +│ ├── tables.js +│ └── systems.js ├── public/ │ ├── index.html # Shell only — sidebar + view containers │ ├── css/ @@ -89,7 +90,8 @@ mythic-oracle/ │ ├── npcs.js │ ├── notes.js │ ├── character.js -│ └── tables.js +│ ├── tables.js +│ └── campaigns.js # Campaign management view UI ├── data/ │ ├── tables/ # Static JSON tables — version controlled │ └── mythic-oracle.db # SQLite database — gitignored diff --git a/public/css/styles.css b/public/css/styles.css index 0374336..832cf1f 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -156,6 +156,22 @@ h1, h2, h3, h4, h5, h6 { transform: rotate(180deg); } +.sidebar-active-campaign { + flex-shrink: 0; + padding: 10px 16px; + border-bottom: 1px solid var(--border); + font-family: var(--font-body); + font-size: 0.78rem; + color: var(--accent); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.sidebar.collapsed .sidebar-active-campaign { + display: none; +} + .sidebar-nav { flex: 1; overflow-y: auto; diff --git a/public/index.html b/public/index.html index bcbf7d5..047455e 100644 --- a/public/index.html +++ b/public/index.html @@ -28,6 +28,8 @@ + +