From 4282b8d8cb8845df7bf05c20edbc9a87ffe7e014 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Fri, 13 Feb 2026 21:33:21 +0100 Subject: [PATCH] fixed --- controller/internal/stacks/manager.go | 7 +++++++ controller/internal/web/server.go | 8 +++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/controller/internal/stacks/manager.go b/controller/internal/stacks/manager.go index 55fb6cb..d9626be 100644 --- a/controller/internal/stacks/manager.go +++ b/controller/internal/stacks/manager.go @@ -7,6 +7,7 @@ import ( "os" "os/exec" "path/filepath" + "sort" "strings" "sync" "time" @@ -324,6 +325,12 @@ func (m *Manager) GetStacks() []Stack { for _, s := range m.stacks { result = append(result, *s) } + + // Sort alphabetically by display name for consistent UI ordering + sort.Slice(result, func(i, j int) bool { + return result[i].Meta.DisplayName < result[j].Meta.DisplayName + }) + return result } diff --git a/controller/internal/web/server.go b/controller/internal/web/server.go index 0beebf6..030bf24 100644 --- a/controller/internal/web/server.go +++ b/controller/internal/web/server.go @@ -390,11 +390,9 @@ func (s *Server) serveAsset(w http.ResponseWriter, r *http.Request, filename str func (s *Server) appDetailHandler(w http.ResponseWriter, r *http.Request, slug string) { for _, stack := range s.stackMgr.GetStacks() { if stack.Meta.Slug == slug { - if !stack.Deployed { - http.Redirect(w, r, "/stacks/"+stack.Name+"/deploy", http.StatusFound) - } else { - http.Redirect(w, r, "/stacks", http.StatusFound) - } + // Always redirect to deploy page — it has a read-only mode for + // deployed apps showing current settings, plus the external link + http.Redirect(w, r, "/stacks/"+stack.Name+"/deploy", http.StatusFound) return } }