From 78db8d03243d237a7bb40b4e016457305d11fd16 Mon Sep 17 00:00:00 2001 From: Haelnorr Date: Sat, 7 Mar 2026 13:24:36 +1100 Subject: [PATCH] added staging banner --- internal/config/flags.go | 3 +++ internal/contexts/devmode.go | 1 + internal/embedfs/web/css/output.css | 5 ----- internal/server/middleware.go | 22 +++++++++++++--------- internal/view/baseview/layout.templ | 9 +++++++++ 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/internal/config/flags.go b/internal/config/flags.go index b131a67..986b795 100644 --- a/internal/config/flags.go +++ b/internal/config/flags.go @@ -14,6 +14,7 @@ type Flags struct { GenEnv string EnvFile string DevMode bool + Staging bool // Database reset (destructive) ResetDB bool @@ -36,6 +37,7 @@ func SetupFlags() (*Flags, error) { genEnv := flag.String("genenv", "", "Generate a .env file with all environment variables (specify filename)") envfile := flag.String("envfile", ".env", "Specify a .env file to use for the configuration") devMode := flag.Bool("dev", false, "Run the server in dev mode") + staging := flag.Bool("staging", false, "Show a staging banner") // Database reset (destructive) resetDB := flag.Bool("reset-db", false, "⚠️ DESTRUCTIVE: Drop and recreate all tables (dev only)") @@ -92,6 +94,7 @@ func SetupFlags() (*Flags, error) { GenEnv: *genEnv, EnvFile: *envfile, DevMode: *devMode, + Staging: *staging, ResetDB: *resetDB, MigrateUp: *migrateUp, MigrateRollback: *migrateRollback, diff --git a/internal/contexts/devmode.go b/internal/contexts/devmode.go index ea1c20e..21827ac 100644 --- a/internal/contexts/devmode.go +++ b/internal/contexts/devmode.go @@ -13,4 +13,5 @@ func DevMode(ctx context.Context) DevInfo { type DevInfo struct { WebsocketBase string HTMXLog bool + StagingBanner bool } diff --git a/internal/embedfs/web/css/output.css b/internal/embedfs/web/css/output.css index b0677f9..59614a2 100644 --- a/internal/embedfs/web/css/output.css +++ b/internal/embedfs/web/css/output.css @@ -2344,11 +2344,6 @@ align-items: flex-end; } } - .lg\:items-start { - @media (width >= 64rem) { - align-items: flex-start; - } - } .lg\:justify-between { @media (width >= 64rem) { justify-content: space-between; diff --git a/internal/server/middleware.go b/internal/server/middleware.go index 21f3f28..c75abcc 100644 --- a/internal/server/middleware.go +++ b/internal/server/middleware.go @@ -44,17 +44,21 @@ func addMiddleware( func devMode(cfg *config.Config) hws.Middleware { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if cfg.Flags.DevMode { - devInfo := contexts.DevInfo{ - WebsocketBase: "ws://" + cfg.HWS.Host + ":" + strconv.FormatUint(cfg.HWS.Port, 10), - HTMXLog: true, - } - ctx := context.WithValue(r.Context(), contexts.DevModeKey, devInfo) - req := r.WithContext(ctx) - next.ServeHTTP(w, req) + if !cfg.Flags.DevMode && !cfg.Flags.Staging { + next.ServeHTTP(w, r) return } - next.ServeHTTP(w, r) + devInfo := contexts.DevInfo{} + if cfg.Flags.DevMode { + devInfo.WebsocketBase = "ws://" + cfg.HWS.Host + ":" + strconv.FormatUint(cfg.HWS.Port, 10) + devInfo.HTMXLog = true + } + if cfg.Flags.Staging { + devInfo.StagingBanner = true + } + ctx := context.WithValue(r.Context(), contexts.DevModeKey, devInfo) + req := r.WithContext(ctx) + next.ServeHTTP(w, req) }, ) } diff --git a/internal/view/baseview/layout.templ b/internal/view/baseview/layout.templ index 531c87d..c118543 100644 --- a/internal/view/baseview/layout.templ +++ b/internal/view/baseview/layout.templ @@ -40,6 +40,9 @@ templ Layout(title string) { id="main-content" class="flex flex-col h-screen" > + if devInfo.StagingBanner { + @stagingBanner() + } @Navbar() if previewRole != nil { @previewModeBanner(previewRole) @@ -57,6 +60,12 @@ templ Layout(title string) { } +templ stagingBanner() { +
+ Staging Environment - For Testing Only +
+} + // Preview mode banner (private helper) templ previewModeBanner(previewRole *db.Role) {