Indítópult launcher page + universal app placeholder icon (v0.163.0)

New /launcher page: a grid of large tappable tiles, one per openable deployed
app (subdomain presence is the single openability criterion, shared with the
Megnyitás button via the extracted Server.subdomainMap helper). Colored tiles
(deterministic slug color or .felhom.yml brand_color), white glyph/monogram
fallback, target=_blank links for operational apps, greyed unclickable tiles for
stopped ones. First sidebar item; / stays the Vezérlőpult.

Universal app placeholder: new AppPlaceholderSVG served at
/static/app-placeholder.svg, now the default FallbackIcon on app_list_row so a
logo-less app shows a placeholder instead of visibility:hidden. Brand mark is
never an app placeholder.

New Metadata.BrandColor; new funcmap tileColor/initial. 10 new test functions +
4 red-proofs. No agent coupling; MinAgent unchanged.
This commit is contained in:
2026-07-24 09:16:28 +02:00
parent a71cc58327
commit 987e915bf2
15 changed files with 632 additions and 26 deletions
+4 -1
View File
@@ -16,7 +16,10 @@ type Metadata struct {
Description string `yaml:"description" json:"description"`
Category string `yaml:"category" json:"category"`
Subdomain string `yaml:"subdomain" json:"subdomain"`
Slug string `yaml:"slug" json:"slug"`
// BrandColor is an optional launcher tile color (#rgb or #rrggbb). Invalid values fall back to
// the deterministic slug-derived color (see web.tileColor); no app sets it yet.
BrandColor string `yaml:"brand_color,omitempty" json:"brand_color,omitempty"`
Slug string `yaml:"slug" json:"slug"`
// Lifecycle governs whether this app is OFFERED for new installs. It never affects an app that
// is already deployed — a customer running a hidden or abandoned app keeps full function, which
// is the whole point: removing a template from the catalog would orphan them instead.