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:
@@ -157,6 +157,11 @@ backups, monitoring and notifications. All Proxmox/disk operations are delegated
|
||||
(traefik/cloudflared/filebrowser) get curated Hungarian display identity from the
|
||||
`inframeta.go` map (name + description + generic `/static/infra-logo.svg` fallback icon);
|
||||
filebrowser is the only infra stack with a customer link (`files.<domain>`).
|
||||
**Universal app placeholder (v0.163.0):** `app_list_row` now DEFAULTS its fallback icon to the
|
||||
embedded `AppPlaceholderSVG` (a 2×2 app-grid glyph, served at `/static/app-placeholder.svg`), so a
|
||||
logo-less app shows a placeholder on every list surface instead of a hidden icon; infra rows still
|
||||
override with the server glyph. The felhom brand mark is never an app placeholder (brand = platform
|
||||
identity only).
|
||||
**Enforcement:** `scripts/template_id_gate.py` (JS element-ID integrity) + `scripts/emoji_gate.py`
|
||||
(no emoji) + `scripts/native_confirm_gate.py` (zero native confirm/prompt) +
|
||||
`scripts/app_row_dedup_gate.py` (row markup single-sourced) + `scripts/mojibake_gate.py`
|
||||
@@ -256,6 +261,23 @@ When a user visits a stopped or undeployed app's subdomain (e.g., `travel.demo-f
|
||||
- **`catchall.html`** — standalone template (no layout, inline CSS) showing the app name, status ("leállítva" / "nincs telepítve" / "nem található"), and links to the controller dashboard or the app's detail page.
|
||||
- **Subdomain links** on the Alkalmazások page are only shown for deployed apps (non-deployed apps have no guaranteed subdomain yet).
|
||||
|
||||
#### Indítópult (app launcher page) (v0.163.0)
|
||||
|
||||
`/launcher` (`launcherHandler` + `templates/launcher.html`) is the **first** sidebar item, above
|
||||
Vezérlőpult; `/` still lands on the Vezérlőpult. It renders a grid of large tappable tiles — one per
|
||||
**openable** deployed app. Openability has a single criterion, shared with the „Megnyitás" button: the
|
||||
stack has a subdomain (env `SUBDOMAIN` > `.felhom.yml` subdomain > `protectedStackSubdomains`),
|
||||
resolved through the extracted `Server.subdomainMap` helper (the dashboard and Alkalmazások pages use
|
||||
the same helper). The controller's own stack is excluded by name.
|
||||
|
||||
Each tile is a colored rounded square: `funcmap.tileColor(slug, brand)` returns a validated
|
||||
`.felhom.yml` **`brand_color`** (`#rgb`/`#rrggbb`, `Metadata.BrandColor`) or, when absent/invalid, a
|
||||
deterministic FNV-1a-of-slug → HSL color (fixed S/L, hue varies per app). The white monochrome logo
|
||||
renders on top of a **monogram** initial (`funcmap.initial`, multibyte-safe); if the logo fails to
|
||||
load the monogram shows through (the launcher does NOT use the app-placeholder here). Operational apps
|
||||
are `<a target="_blank" rel="noopener">` links; stopped/degraded apps render greyed + unclickable with
|
||||
the Hungarian state badge. Empty state links to `/stacks`.
|
||||
|
||||
#### Dashboard "Megnyitás" Button
|
||||
|
||||
Running apps on the Vezérlőpult now show a "Megnyitás ↗" button that opens the app's subdomain in a new tab. The `Subdomains` map is built in `dashboardHandler` from `app.yaml` env or metadata fallback.
|
||||
|
||||
Reference in New Issue
Block a user