diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5208b22..73f08da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
## Changelog
+### v0.77.0 — per-app open_path for the "Megnyitás" link (2026-06-23)
+- The dashboard/deploy/app-info **"Megnyitás"** (open) button was hardcoded to the bare subdomain root
+ `https://{sub}.{domain}` for every app. Apps whose UI isn't at `/` (e.g. Gokapi redirects `/` away;
+ Ghost's admin is at `/ghost/`) opened to the wrong place.
+- New optional `open_path` field on `Metadata` (`internal/stacks/metadata.go`, `.felhom.yml`) appended to
+ the URL in all three link sites (`dashboard.html`, `deploy.html`, `app_info.html` via `.Meta.OpenPath`).
+ Empty = bare root (unchanged for the other 50 apps). No handler changes (all three templates already
+ carry `.Meta`). Catalog: `gokapi` → `/admin`, `ghost` → `/ghost/`.
+
### v0.76.0 — campaign-#3 hardening: settings recovery, restore-name validation, quiesce-marker quarantine (2026-06-22)
Three controller findings from chaos campaign #3, all small, all controller-side.
diff --git a/controller/internal/stacks/metadata.go b/controller/internal/stacks/metadata.go
index ea18472..c58c1c9 100644
--- a/controller/internal/stacks/metadata.go
+++ b/controller/internal/stacks/metadata.go
@@ -16,6 +16,9 @@ type Metadata struct {
Category string `yaml:"category" json:"category"`
Subdomain string `yaml:"subdomain" json:"subdomain"`
Slug string `yaml:"slug" json:"slug"`
+ // OpenPath is appended to the app's public URL for the "Megnyitás" (open) link, for apps whose UI
+ // isn't at "/" (e.g. Gokapi → "/admin"). Empty = bare root. Must start with "/".
+ OpenPath string `yaml:"open_path,omitempty" json:"open_path,omitempty"`
Resources ResourceHints `yaml:"resources" json:"resources"`
DeployFields []DeployField `yaml:"deploy_fields" json:"deploy_fields"`
AppInfo AppInfo `yaml:"app_info" json:"app_info"`
diff --git a/controller/internal/web/templates/app_info.html b/controller/internal/web/templates/app_info.html
index 42719d9..5df63e1 100644
--- a/controller/internal/web/templates/app_info.html
+++ b/controller/internal/web/templates/app_info.html
@@ -10,7 +10,7 @@
{{if .Stack.Deployed}}
{{stateLabel .Stack.State}}
{{if .Stack.Orphaned}}Elavult{{end}}
- {{if .EffectiveSubdomain}}Megnyitás ↗{{end}}
+ {{if .EffectiveSubdomain}}Megnyitás ↗{{end}}
Napló
{{if .Stack.Orphaned}}
diff --git a/controller/internal/web/templates/dashboard.html b/controller/internal/web/templates/dashboard.html
index 7a87afb..a54caa5 100644
--- a/controller/internal/web/templates/dashboard.html
+++ b/controller/internal/web/templates/dashboard.html
@@ -170,7 +170,7 @@
{{else}}
{{if isOperational .State}}
{{$subdomain := index $.Subdomains .Name}}
- {{if $subdomain}}Megnyitás ↗{{end}}
+ {{if $subdomain}}Megnyitás ↗{{end}}
{{else}}
diff --git a/controller/internal/web/templates/deploy.html b/controller/internal/web/templates/deploy.html
index 47c136f..f5507b9 100644
--- a/controller/internal/web/templates/deploy.html
+++ b/controller/internal/web/templates/deploy.html
@@ -15,7 +15,7 @@
{{end}}
{{if and (isOperational .Stack.State) .EffectiveSubdomain}}
- Megnyitás ↗
+ Megnyitás ↗
{{end}}
{{end}}
ℹ️ Részletek