From 54a8222b51bb0dfc6fa8897572fdb43891c49b06 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 3 Mar 2026 17:46:16 -0500 Subject: [PATCH] Add 5-theme switcher + open on projects instead of tasks Landing page: /app now redirects to /app/projects (not tasks). Logo links updated across all templates. Theme system with 5 options persisted in localStorage: - Midnight (default dark navy + gold) - Light (white/gray + blue accent) - Slate (gray-blue + teal accent) - Compact (same as midnight, 85% font scale) - Executive (warm dark browns, larger fonts, serif headings) CSS custom properties override all hardcoded Tailwind colors via attribute selectors. Floating theme bar on all pages. Co-Authored-By: Claude Opus 4.6 --- api/routes.go | 2 +- portal/templates/app/orgs.html | 49 ++++++++++++++++++++++++++++- portal/templates/app/project.html | 50 +++++++++++++++++++++++++++++- portal/templates/app/projects.html | 49 ++++++++++++++++++++++++++++- portal/templates/app/request.html | 49 ++++++++++++++++++++++++++++- portal/templates/app/tasks.html | 49 ++++++++++++++++++++++++++++- 6 files changed, 242 insertions(+), 6 deletions(-) diff --git a/api/routes.go b/api/routes.go index b1d446f..6d62579 100644 --- a/api/routes.go +++ b/api/routes.go @@ -93,7 +93,7 @@ func NewRouter(db *lib.DB, cfg *lib.Config, store lib.ObjectStore, websiteFS fs. // Portal app routes (serve templates, auth checked client-side via JS) r.Get("/app", func(w http.ResponseWriter, r *http.Request) { - http.Redirect(w, r, "/app/tasks", http.StatusFound) + http.Redirect(w, r, "/app/projects", http.StatusFound) }) r.Get("/app/login", h.ServeLogin) r.Get("/app/tasks", h.ServeAppTasks) diff --git a/portal/templates/app/orgs.html b/portal/templates/app/orgs.html index 7c13125..6487af1 100644 --- a/portal/templates/app/orgs.html +++ b/portal/templates/app/orgs.html @@ -10,10 +10,46 @@ .sidebar-link:hover:not(.active) { background: rgba(255,255,255,0.04); } .card:hover { border-color: rgba(201,168,76,0.3); } + +
- Dealspace + Dealspace
@@ -150,5 +186,16 @@ loadOrgs(); +
+ + + + + +
+ diff --git a/portal/templates/app/project.html b/portal/templates/app/project.html index 1c89264..27dcb71 100644 --- a/portal/templates/app/project.html +++ b/portal/templates/app/project.html @@ -14,11 +14,48 @@ .section-header { cursor: pointer; user-select: none; } .section-header:hover { background: rgba(255,255,255,0.02); } + +
- Dealspace + Dealspace / Projects / @@ -282,5 +319,16 @@ loadProject(); loadRequests(); +
+ + + + + +
+ diff --git a/portal/templates/app/projects.html b/portal/templates/app/projects.html index 3065344..adf900a 100644 --- a/portal/templates/app/projects.html +++ b/portal/templates/app/projects.html @@ -10,10 +10,46 @@ .sidebar-link:hover:not(.active) { background: rgba(255,255,255,0.04); } .card:hover { border-color: rgba(201,168,76,0.3); transform: translateY(-1px); } + +
- Dealspace + Dealspace
@@ -151,5 +187,16 @@ function escHtml(s) { const d = document.createElement('div'); d.textContent = s; return d.innerHTML; } loadProjects(); +
+ + + + + +
+ diff --git a/portal/templates/app/request.html b/portal/templates/app/request.html index d6c6d11..af21fd0 100644 --- a/portal/templates/app/request.html +++ b/portal/templates/app/request.html @@ -9,11 +9,47 @@ .sidebar-link.active { background: rgba(201,168,76,0.1); color: #c9a84c; border-left: 3px solid #c9a84c; } .sidebar-link:hover:not(.active) { background: rgba(255,255,255,0.04); } + +
- Dealspace + Dealspace / Projects / @@ -305,5 +341,16 @@ loadAll(); +
+ + + + + +
+ diff --git a/portal/templates/app/tasks.html b/portal/templates/app/tasks.html index d93988d..9260395 100644 --- a/portal/templates/app/tasks.html +++ b/portal/templates/app/tasks.html @@ -17,12 +17,48 @@ .priority-normal { background: #c9a84c; } .priority-low { background: #22c55e; } + +
- + Dealspace