From c18efc0610e631227a7f967d9d3ebaac94f74157 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Wed, 16 Sep 2026 19:51:54 +0200 Subject: [PATCH] teardown layer 1, a proper secret-leak check, and the fresh-box proof in both rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VM 335 purged with its disks; demo-hp's own containers untouched; evidence pulled off the box before the destroy, with the one thing I could not collect stated (the agent journal — root SSH is refused on the appliance by design). The leak check redone properly: six real secret VALUES as needles against all 41 evidence files, planted positive control matched 6/6, committed evidence matched 0. The earlier „22" was the word „password" in labels — a word count, not a leak check. R-537 and R-538 now carry the fresh-box proof: the labels on a box where off-site is on, the refusal that pointed at the off-site route, and five photos returned byte-identical. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS --- .../phaseE-photos.txt | 15 + .../phaseE-teardown.txt | 22 + .../teardown-e1-backups-apps.html | 750 +++++++++++++++ .../teardown-e1-controller-debug.json | 1 + .../teardown-e1-disks.json | 1 + .../teardown-e1-hostpage.html | 882 ++++++++++++++++++ .../teardown-e1-stacks.json | 1 + documentation/backlog/OPEN-ITEMS.md | 4 +- 8 files changed, 1674 insertions(+), 2 deletions(-) create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/phaseE-teardown.txt create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-backups-apps.html create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-controller-debug.json create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-disks.json create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-hostpage.html create mode 100644 documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-stacks.json diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-photos.txt b/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-photos.txt index 98891689..b35db1f2 100644 --- a/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-photos.txt +++ b/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-photos.txt @@ -305,3 +305,18 @@ ## against the originals above. ## THIS IS THE SENTENCE THE TASK EXISTED TO MAKE TRUE. This morning the same deletion ended with ## five photos listed and none of them openable, and a success message over the top of it. +## 2026-09-16T17:50:15Z EVIDENCE OFF THE BOX, BEFORE ANY TEARDOWN (R-320) + controller debug log: http=200 bytes=26288 + stacks: http=200 + disks: http=200 + backup page: http=200 + hub host page: http=200 + token-leak control over everything just written (must be 0): + /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-hostpage.html:22 + /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-controller-debug.json:0 + /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-stacks.json:1 + /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-backups-apps.html:2 + /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-disks.json:0 + NOT COLLECTED, and why: the agent journal on the box itself — root SSH is refused on this + appliance (the agent hardens sshd; operator access is a separate, tunnel-only port), and the + break-glass credential on the hub is behind a Reveal action rather than an inline value. diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-teardown.txt b/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-teardown.txt new file mode 100644 index 00000000..6654843c --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/phaseE-teardown.txt @@ -0,0 +1,22 @@ +## 2026-09-16T17:50:47Z TEARDOWN, LAYER 1 — the machine +purging VM 335 from related configurations.. +--- qm list after: +--- any 335 disk left: +ls: cannot access '/mnt/hdd_1/images/335': No such file or directory +--- FENCE CHECK, demo-hp own containers: +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch +## LAYER 1 DONE: VM 335 stopped and destroyed with --purge --destroy-unreferenced-disks. +## `qm list` empty · /mnt/hdd_1/images/335 absent · no file matching *335* on the drive. +## FENCE CHECK: demo-hp's own containers 9201 („demo-hp") and 9202 („demo-hp-scratch") both still +## running and untouched, as required. +## EVIDENCE WENT FIRST (R-320): controller debug log (26 288 B), stacks, disks, the backup page and +## the hub host page were pulled BEFORE the destroy. Not collected: the agent journal from the box +## itself — root SSH is refused on the appliance (the agent hardens sshd; operator access is a +## separate tunnel-only port) — stated rather than quietly omitted. +## SECRET-LEAK CHECK, done properly this time: six real secret VALUES (dashboard password, app admin +## password, claim code, recovery code, install root password, owner passphrase) used as needles +## against all 41 evidence files. Planted positive control matched 6/6, so the grep works; the +## committed evidence matched 0 files. The earlier count of „22" was the WORD „password" in labels +## like „Password set" — a word count, not a leak check. diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-backups-apps.html b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-backups-apps.html new file mode 100644 index 00000000..6df92f6a --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-backups-apps.html @@ -0,0 +1,750 @@ + + + + + + + + Biztonsági mentés — Alkalmazások — Felhom.eu + + + + + + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + +

Alkalmazás-mentések (adatbázis + konfiguráció)

+

Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.

+ + +
+

Ütemezés

+
+
+ Adatbázis mentés + 02:30 + Következő: holnap 02:30 +
+
+
+ +
+ Utolsó adatbázis mentés: + 2026-09-16 19:34 (16 perce) +
+ +
+
+ +
+
+ + +
+

Adatbázisok

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AlkalmazásTípusMéretUtolsóÉrvényesítésÁllapot
nextcloudMariaDB495.5 KB19:34 + + 131 tábla + + + + OK + +
+
+ +
+ + + +
+

Alkalmazások mentési állapota

+ + + + +
+ +
+ + Nextcloud +
+ + Adatlemez + 68.0 MB + + +
+ ▶ +
+ +
+ + +
+ + + + + + + +
+ + + + diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-controller-debug.json b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-controller-debug.json new file mode 100644 index 00000000..baf368b3 --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-controller-debug.json @@ -0,0 +1 @@ +{"data":{"entries":[{"timestamp":"2026-09-16T17:42:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:42:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:42:58Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (184ms)","source":""},{"timestamp":"2026-09-16T17:42:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:42:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (554ms)","source":""},{"timestamp":"2026-09-16T17:43:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (526ms)","source":""},{"timestamp":"2026-09-16T17:43:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:18Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (189ms)","source":""},{"timestamp":"2026-09-16T17:43:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:43:28Z","level":"INFO","message":"[deadapp] check alive: 200 scans since boot, 1 deployed app(s) evaluated, 0 currently down","source":""},{"timestamp":"2026-09-16T17:43:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (462ms)","source":""},{"timestamp":"2026-09-16T17:43:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 463ms)","source":""},{"timestamp":"2026-09-16T17:43:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (540ms)","source":""},{"timestamp":"2026-09-16T17:43:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (534ms)","source":""},{"timestamp":"2026-09-16T17:43:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:39Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (177ms)","source":""},{"timestamp":"2026-09-16T17:43:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:43:59Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (187ms)","source":""},{"timestamp":"2026-09-16T17:43:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (553ms)","source":""},{"timestamp":"2026-09-16T17:44:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (544ms)","source":""},{"timestamp":"2026-09-16T17:44:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:18Z","level":"INFO","message":"Health probes: 1 ok (of 1 probed)","source":""},{"timestamp":"2026-09-16T17:44:19Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (198ms)","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[scheduler] Running job: stack-scan","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[stacks] ScanStacks complete: 56 stacks found (1 deployed, 55 available)","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:28Z","level":"INFO","message":"[scheduler] Job stack-scan completed (took 82ms)","source":""},{"timestamp":"2026-09-16T17:44:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (499ms)","source":""},{"timestamp":"2026-09-16T17:44:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 499ms)","source":""},{"timestamp":"2026-09-16T17:44:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (572ms)","source":""},{"timestamp":"2026-09-16T17:44:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (566ms)","source":""},{"timestamp":"2026-09-16T17:44:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:40Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (190ms)","source":""},{"timestamp":"2026-09-16T17:44:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:44:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (554ms)","source":""},{"timestamp":"2026-09-16T17:45:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (556ms)","source":""},{"timestamp":"2026-09-16T17:45:00Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (179ms)","source":""},{"timestamp":"2026-09-16T17:45:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:11Z","level":"WARN","message":"[web] restore refused for nextcloud: unit carries no file leg (1 drive path(s))","source":""},{"timestamp":"2026-09-16T17:45:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:21Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (198ms)","source":""},{"timestamp":"2026-09-16T17:45:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:45:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (466ms)","source":""},{"timestamp":"2026-09-16T17:45:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 466ms)","source":""},{"timestamp":"2026-09-16T17:45:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (539ms)","source":""},{"timestamp":"2026-09-16T17:45:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (532ms)","source":""},{"timestamp":"2026-09-16T17:45:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:41Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (183ms)","source":""},{"timestamp":"2026-09-16T17:45:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:45:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (561ms)","source":""},{"timestamp":"2026-09-16T17:46:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (552ms)","source":""},{"timestamp":"2026-09-16T17:46:01Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (193ms)","source":""},{"timestamp":"2026-09-16T17:46:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:12Z","level":"INFO","message":"[offbox] restored nextcloud (35f32017, full=true) → /mnt/felhom-drives/adatlemez/backups/offsite-restore/nextcloud","source":""},{"timestamp":"2026-09-16T17:46:12Z","level":"INFO","message":"[web] off-box restore nextcloud completed (full=true, async)","source":""},{"timestamp":"2026-09-16T17:46:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:22Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (215ms)","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[scheduler] Running job: stack-scan","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[stacks] ScanStacks complete: 56 stacks found (1 deployed, 55 available)","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[scheduler] Job stack-scan completed (took 47ms)","source":""},{"timestamp":"2026-09-16T17:46:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (462ms)","source":""},{"timestamp":"2026-09-16T17:46:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 463ms)","source":""},{"timestamp":"2026-09-16T17:46:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (521ms)","source":""},{"timestamp":"2026-09-16T17:46:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (547ms)","source":""},{"timestamp":"2026-09-16T17:46:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:42Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (177ms)","source":""},{"timestamp":"2026-09-16T17:46:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:46:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (560ms)","source":""},{"timestamp":"2026-09-16T17:47:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (548ms)","source":""},{"timestamp":"2026-09-16T17:47:02Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (171ms)","source":""},{"timestamp":"2026-09-16T17:47:05Z","level":"INFO","message":"[backup] Discovered 1 databases","source":""},{"timestamp":"2026-09-16T17:47:06Z","level":"INFO","message":"[backup] DB dump: nextcloud-db → pre-restore-20260916T174705Z-nextcloud-mariadb.sql (496.9 KB, 626ms, 131 tables)","source":""},{"timestamp":"2026-09-16T17:47:06Z","level":"INFO","message":"[offbox] nextcloud: pre-restore safety dump written → pre-restore-20260916T174705Z-nextcloud-mariadb.sql (496.9 KB)","source":""},{"timestamp":"2026-09-16T17:47:06Z","level":"INFO","message":"[stacks] Stopping stack: nextcloud","source":""},{"timestamp":"2026-09-16T17:47:06Z","level":"DEBUG","message":"Running: docker compose down (in /opt/docker/stacks/nextcloud)","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"DEBUG","message":"Command completed: docker compose down (took 1.8s)","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"INFO","message":"[stacks] Stack nextcloud stopped successfully (took 1.8s)","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"INFO","message":"[stacks] Status refresh: 3 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"INFO","message":"[backup] Restoring Docker volume nextcloud_nextcloud_db_data for nextcloud","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"INFO","message":"[stacks] Status refresh: 3 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:08Z","level":"INFO","message":"[backup] Restoring Docker volume nextcloud_nextcloud_html for nextcloud","source":""},{"timestamp":"2026-09-16T17:47:18Z","level":"INFO","message":"[stacks] Status refresh: 3 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:19Z","level":"INFO","message":"[backup] Restoring Docker volume nextcloud_nextcloud_redis_data for nextcloud","source":""},{"timestamp":"2026-09-16T17:47:19Z","level":"INFO","message":"[backup] Restored 3 Docker volume(s) for nextcloud","source":""},{"timestamp":"2026-09-16T17:47:19Z","level":"INFO","message":"[stacks] Starting stack nextcloud services only: [nextcloud-db]","source":""},{"timestamp":"2026-09-16T17:47:19Z","level":"DEBUG","message":"Running: docker compose up -d nextcloud-db (in /opt/docker/stacks/nextcloud)","source":""},{"timestamp":"2026-09-16T17:47:20Z","level":"DEBUG","message":"Command completed: docker compose up -d nextcloud-db (took 0.5s)","source":""},{"timestamp":"2026-09-16T17:47:20Z","level":"INFO","message":"[stacks] Stack nextcloud services [nextcloud-db] started (took 0.5s)","source":""},{"timestamp":"2026-09-16T17:47:20Z","level":"INFO","message":"[stacks] Status refresh: 4 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:20Z","level":"INFO","message":"[backup] Discovered 1 databases","source":""},{"timestamp":"2026-09-16T17:47:20Z","level":"INFO","message":"[backup] Restore nextcloud: replaying DB dump into nextcloud-db (mariadb)","source":""},{"timestamp":"2026-09-16T17:47:23Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (190ms)","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[sync] Starting catalog sync","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main)","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"DEBUG","message":"[sync] Running: git fetch --depth 1 origin main","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Running job: offsite-credential-retry","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Job offsite-credential-retry completed (took 0s)","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Running job: system-health","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Running job: hub-report","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[report] Building system report","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Running job: backup-cache","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[stacks] Status refresh: 4 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"DEBUG","message":"[sync] Running: git reset --hard origin/main","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[settings] Settings saved","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[backup] Found 2 DB dump files across drives","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[backup] Discovered 1 databases","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[backup] Backup status cache refreshed","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[scheduler] Job backup-cache completed (took 147ms)","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[sync] Catalog sync complete","source":""},{"timestamp":"2026-09-16T17:47:28Z","level":"INFO","message":"[sync] Periodic sync: Sablonok naprakészek — nincs változás","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[monitor] Health check: status=ok","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[scheduler] Job system-health completed (took 309ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[monitor] Health check: status=ok","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[metrics] logscanner: starting log scan for 2 containers (since 15m0s)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[metrics] logscanner: scanned nextcloud-db: errors=0 warnings=3 issues=3 (took 29ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[metrics] logscanner: scanned felhom-controller: errors=0 warnings=1 issues=1 (took 37ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[metrics] logscanner: log scan completed: 2 containers in 67ms","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[report] Hub report pushed successfully (3879 bytes)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[settings] Settings saved","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[scheduler] Job hub-report completed (took 483ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (461ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 461ms)","source":""},{"timestamp":"2026-09-16T17:47:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (516ms)","source":""},{"timestamp":"2026-09-16T17:47:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (512ms)","source":""},{"timestamp":"2026-09-16T17:47:31Z","level":"INFO","message":"[backup] Imported DB dump nextcloud-mariadb.sql into nextcloud-db (mariadb)","source":""},{"timestamp":"2026-09-16T17:47:31Z","level":"INFO","message":"[backup] Restore nextcloud: replayed 1 DB dump(s)","source":""},{"timestamp":"2026-09-16T17:47:31Z","level":"INFO","message":"[stacks] Starting stack: nextcloud","source":""},{"timestamp":"2026-09-16T17:47:31Z","level":"DEBUG","message":"Running: docker compose up -d (in /opt/docker/stacks/nextcloud)","source":""},{"timestamp":"2026-09-16T17:47:38Z","level":"DEBUG","message":"Command completed: docker compose up -d (took 6.2s)","source":""},{"timestamp":"2026-09-16T17:47:38Z","level":"INFO","message":"[stacks] Stack nextcloud started successfully (took 6.2s)","source":""},{"timestamp":"2026-09-16T17:47:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"DEBUG","message":"Running: docker compose ps -a --format table {{.Name}}\t{{.Image}}\t{{.State}}\t{{.Status}} (in /opt/docker/stacks/nextcloud)","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"DEBUG","message":"Command completed: docker compose ps -a --format table {{.Name}}\t{{.Image}}\t{{.State}}\t{{.Status}} (took 0.1s)","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"INFO","message":"[stacks] Stack nextcloud post-start status:","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"INFO","message":"[stacks] nextcloud nextcloud:34.0.1-apache running Up 3 seconds (health: starting)","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"INFO","message":"[stacks] nextcloud-db mariadb:11.6 running Up 21 seconds (healthy)","source":""},{"timestamp":"2026-09-16T17:47:41Z","level":"INFO","message":"[stacks] nextcloud-redis redis:7-alpine running Up 9 seconds (healthy)","source":""},{"timestamp":"2026-09-16T17:47:43Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (197ms)","source":""},{"timestamp":"2026-09-16T17:47:46Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:46Z","level":"INFO","message":"[offbox] reconstituted nextcloud from snapshot 35f32017: 5 file(s) placed, 3 volume(s) replayed, 1 DB dump(s) replayed, safety dump=pre-restore-20260916T174705Z-nextcloud-mariadb.sql, skewed=false","source":""},{"timestamp":"2026-09-16T17:47:46Z","level":"INFO","message":"[web] off-box reconstitute nextcloud completed (async): files=5 dbs=1 snapshot=35f32017","source":""},{"timestamp":"2026-09-16T17:47:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:48Z","level":"INFO","message":"Health probes: 1 ok (of 1 probed)","source":""},{"timestamp":"2026-09-16T17:47:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:47:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (568ms)","source":""},{"timestamp":"2026-09-16T17:48:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (546ms)","source":""},{"timestamp":"2026-09-16T17:48:04Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (170ms)","source":""},{"timestamp":"2026-09-16T17:48:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:24Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (200ms)","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[scheduler] Running job: stack-scan","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[stacks] ScanStacks complete: 56 stacks found (1 deployed, 55 available)","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[scheduler] Job stack-scan completed (took 48ms)","source":""},{"timestamp":"2026-09-16T17:48:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (474ms)","source":""},{"timestamp":"2026-09-16T17:48:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 475ms)","source":""},{"timestamp":"2026-09-16T17:48:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (530ms)","source":""},{"timestamp":"2026-09-16T17:48:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (523ms)","source":""},{"timestamp":"2026-09-16T17:48:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:44Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (179ms)","source":""},{"timestamp":"2026-09-16T17:48:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:48:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (554ms)","source":""},{"timestamp":"2026-09-16T17:49:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (555ms)","source":""},{"timestamp":"2026-09-16T17:49:05Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (188ms)","source":""},{"timestamp":"2026-09-16T17:49:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:18Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:25Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (189ms)","source":""},{"timestamp":"2026-09-16T17:49:28Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:28Z","level":"INFO","message":"[scheduler] Running job: agent-channel-health","source":""},{"timestamp":"2026-09-16T17:49:29Z","level":"DEBUG","message":"[agentapi] GET /storage -\u003e 200 (484ms)","source":""},{"timestamp":"2026-09-16T17:49:29Z","level":"INFO","message":"[scheduler] Job agent-channel-health completed (took 484ms)","source":""},{"timestamp":"2026-09-16T17:49:29Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (567ms)","source":""},{"timestamp":"2026-09-16T17:49:30Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (535ms)","source":""},{"timestamp":"2026-09-16T17:49:38Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:45Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (184ms)","source":""},{"timestamp":"2026-09-16T17:49:48Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:58Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""},{"timestamp":"2026-09-16T17:49:59Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (533ms)","source":""},{"timestamp":"2026-09-16T17:50:00Z","level":"DEBUG","message":"[agentapi] GET /disks -\u003e 200 (550ms)","source":""},{"timestamp":"2026-09-16T17:50:06Z","level":"DEBUG","message":"[agentapi] GET /disks/candidates -\u003e 200 (190ms)","source":""},{"timestamp":"2026-09-16T17:50:08Z","level":"INFO","message":"[stacks] Status refresh: 6 containers across 56 stacks","source":""}],"total":2827},"ok":true} diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-disks.json b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-disks.json new file mode 100644 index 00000000..9f37c3e0 --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-disks.json @@ -0,0 +1 @@ +{"data":{"vmid":9201,"initialize":[{"device":"/dev/sdb","size_bytes":107374182400,"model":"QEMU HARDDISK","fstype":"ext4","data_bearing":true,"mountable":true,"mount_source":"/dev/sdb","durable_id":"uuid:e6808631-b6f5-446c-9fd7-854a16b1c4e2"}],"attach":[{"device":"/dev/sdb","size_bytes":107374182400,"model":"QEMU HARDDISK","fstype":"ext4","data_bearing":true,"mountable":true,"mount_source":"/dev/sdb","durable_id":"uuid:e6808631-b6f5-446c-9fd7-854a16b1c4e2"},{"device":"/dev/mapper/pve-vm--9201--disk--1","size_bytes":0,"fstype":"ext4","data_bearing":true,"mountable":true,"mount_source":"/mnt/sys_drive","already_mounted":true}]},"ok":true} diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-hostpage.html b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-hostpage.html new file mode 100644 index 00000000..362acefb --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-hostpage.html @@ -0,0 +1,882 @@ + + + + + + tester-1-33b6a9 — Felhom Hub + + + + +
+
+

Felhom Hub

+ +
+ + ← Hosts + + + +
+
+

tester-1-33b6a9

+ ONLINE +
+
+
+ Host ID + tester-1-33b6a9 +
+
+ Customer + Tester 1 +
+
+ Agent Version + 0.131.0 +
+ +
+ PBS wrapper + + matches vouched 104db0a4401f… + +
+ +
+ Enrolled + 2h ago +
+
+ Last Report + 4 min ago +
+
+ Desired Generation + 2 +
+ +
+
+ + + +
+

Vitals

+
+
+ CPU + 0% +
+
+ Memory + 29% +
+
+ Disk (root fs) + 40% +
+
+ Cloudflared + inactive +
+
+ Guests + 1/1 running +
+
+
+ + + +
+

Guests

+ + + + + + + + + + + + + + + + + + + + + + +
VMIDNameStatusControllerLast Seen
9201tester-1running—4 min ago
+ +
+ + +
+

Storage Targets

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameRoleTypeStateFillThin PoolSMARTTempWear
felhom-pbs—pbsattached0%—UNKNOWN——
local—localattached40%—UNKNOWN0°C—
local-lvm—lvmthinattached62%62%UNKNOWN——
+ +
+ + +
+

Capabilities

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CapabilityStatusFeature / reason
controllerswap-image-inspect criticalokcontroller-swap / managed auto-update
controllerswap-inspect criticalokcontroller-swap / managed auto-update
controllerswap-read criticalokcontroller-swap / managed auto-update
controllerswap-restart criticalokcontroller-swap / managed auto-update
controllerswap-write criticalokcontroller-swap / managed auto-update
disk-blkid criticalokdisk data-bearing classify (format gate)
disk-lsblk criticalokdisk topology read (format gate)
disk-lvsokthin-pool usage read
disk-mkfs-ext4 criticalokguarded format (ext4)
disk-mkfs-xfsokguarded format (xfs)
disk-smartokdisk SMART health read
dnsmasq-enableokdnsmasq enable
dnsmasq-guest-domainokguest domain discovery
dnsmasq-guest-ipokguest LAN IP discovery
dnsmasq-installokdnsmasq package install
dnsmasq-reloadokdnsmasq reload
dnsmasq-restartokdnsmasq restart (LAN-DNS self-heal)
dnsmasq-rmokdnsmasq drop-in remove (decommission)
dnsmasq-writeokdnsmasq drop-in write
drive-bind criticalokdrive attach (felhom-data bind under parent)
drive-umount criticalokdrive detach (fail-closed unmount)
drives-chown-dataokfelhom-data guest-root chown
drives-mkdir-dataokfelhom-data namespace create
drives-mkdir-parentokstable parent dir create
drives-mkdir-subokper-drive stable dir create
escrow-ceremony criticalokcustomer recovery-code ceremony (controller-driven)
guest-init-pid criticalokdrive-gate guest-sees check (multi-drive concurrency)
guest-rebootokenroll activate-binds reboot
guesthook-delete-mpokdead mountpoint slot delete (C1 net)
guesthook-installokpre-start hook snippet install
guesthook-registerokpre-start hook register
guestnet-dhclient-probeokguest DHCP-client liveness probe
guestnet-healokguest DHCP-client restart (the 2026-07-20 heal)
guestnet-ifacesokguest interface-mode read
guestnet-routeokguest default-route probe
mount-daemon-reloadoksystemd reload after unit write
mount-unit-disableokmount unit disable
mount-unit-enableokmount unit enable
mount-unit-installokfs-UUID mount unit install
mount-unit-stopokmount unit stop
netmount-reset-failedokNAS automount re-arm after start-limit (F10)
netmount-rmdirokremoved-share mountpoint cleanup (F1)
parent-bind-mp8okparent bind into guest at provision
parent-make-private criticalokintermediary shared-parent peer-group isolation
parent-make-shared criticalokintermediary shared-parent propagation
parent-script-installokshared-parent boot script install
parent-self-bind criticalokintermediary shared-parent self-bind
parent-unit-enableokshared-parent boot-persistence enable
parent-unit-installokshared-parent boot unit install
pbsdr-createokPBS DR storage-entry create (K autogen)
pbsdr-grantokPBS DR storage ACL self-grant
pbsdr-readokPBS DR credential read (verify-loop auth probe)
pbsdr-reconcileokPBS DR storage-entry reconcile (set-only)
provision-chownokbootstrap mount guest-root chown
provision-config-mountokbootstrap config bind mount
provision-onbootokcustomer guest autostart (onboot)
pve:pool-readokstale-lock recovery scoping (pool ownership check)
pve:store-grant:felhom-pbs criticalokbackup tier felhom-pbs readable by the agent (archive listing, restore-test candidacy)
pve:store-grant:localokbackup tier local readable by the agent (archive listing, restore-test candidacy)
selfheal-networking-startokappliance networking recovery at boot (F12 defense in depth)
selfupdate-applyokagent self-update apply (A/B flip)
selfupdate-commitokagent self-update commit
selfupdate-rollbackokagent self-update rollback
stalelock-unlock criticalokreboot-during-backup stale-lock recovery
wg-conf-install criticalokwg-felhom conf install
wg-disableokwg-quick@wg-felhom disable (revocation)
wg-enable criticalokwg-quick@wg-felhom enable
wg-handshake-read criticaloktunnel handshake-age read
wg-restart criticalokwg-quick@wg-felhom restart (conf change)
wg-tools-installokwireguard-tools package install
+ +
+ + +
+

Diagnostics — Log Bundles

+

+ Pull-based: the box ships its debug ring on its own next cycle — controller ≤ one report interval (~15 min), + agent ≈ one heartbeat. The pull is recorded in the box's own log (customer-visible). Bundles expire after 72 h. +

+
+
+ + + +
+
+ + + +
+
+ +
+

No log bundles. Use the request buttons above — the box delivers on its next cycle.

+
+ +
+ + +
+

Network

+
+
+ WireGuard + + 10.77.0.5 + confirmed + + + +
+
+ + + + + + + + + + + + + +
InterfaceAddress
vmbr0192.168.0.101/24
+

+ Every routable address the box holds, as the kernel sees it. Loopback and link-local are + excluded — including the 169.254.253.1 local-API island, which is identical on + every box. The PVE web console is at https://<the LAN address>:8006. +

+ +
+ + +
+

Guest network + healthy + +

+ + + + + + + + + + + + + + + + + + +
GuestStateAddressRoutedhclientRepairs (1h)
9201 + healthy + + + + 192.168.0.107 (dhcp)yesyes + 0 +
+ +

+ Last swept 2026-09-16T17:46:20Z. One row per owned running guest the watchdog has probed. +

+ +
+ + +
+

DR / Backup

+
+
+ DR Recipe + present +
+
+ Key Escrow + present +
+
+
+ + +
+

Console access

+ +
+
+ User + root@pam +
+
+ Password set + 2h ago +
+
+
+ •••••••••••••••• + + +
+

+ Break-glass credential for the PVE web console at https://<host-ip>:8006 (realm: Linux PAM standard authentication). Copy puts it straight on the clipboard without showing it; Reveal displays it for 60 s. Either one is recorded on the customer's event timeline. Last vaulted value — if root@pam was changed on the box without re-vaulting, this is stale. +

+ +
+ + + + + + + + +
+ + diff --git a/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-stacks.json b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-stacks.json new file mode 100644 index 00000000..1292144b --- /dev/null +++ b/documentation/audits/evidence-backup-promise-2026-09-16/teardown-e1-stacks.json @@ -0,0 +1 @@ +{"ok":true,"data":[{"name":"actualbudget","meta":{"display_name":"ActualBudget","description":"Személyes pénzügyek és költségvetés kezelése","category":"finance","subdomain":"budget","slug":"actualbudget","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"budget","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Költségvetés tervező - pénzügyeid kézben tartása egyszerűen","use_cases":["Havi költségvetés tervezése és követése envelope módszerrel","Bankszámla tranzakciók importálása és kategorizálása","Riportok és grafikonok a kiadásokról és bevételekről","Több felhasználó - közös háztartási pénzügyek kezelése","Offline is működik, szinkronizálás a szerver és eszközök között"],"first_steps":["Nyisd meg a budget.DOMAIN címet a böngészőben","Hozz létre egy jelszót az első megnyitáskor","Hozd létre a költségvetési kategóriákat (pl. élelmiszer, közlekedés)","Adj hozzá számlákat és kezdd el rögzíteni a tranzakciókat"],"prerequisites":null,"default_creds":"","docs_url":"https://actualbudget.org/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":5006,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/actualbudget/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745110687Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"adventurelog","meta":{"display_name":"AdventureLog","description":"Utazási napló és kalandtervező","category":"travel","subdomain":"travel","slug":"adventurelog","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"travel","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true,"data_key":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Utazási napló - utazások dokumentálása térképpel és fotókkal","use_cases":["Utazások dokumentálása képekkel és jegyzetekkel","Térképes megjelenítés a meglátogatott helyekről","Úti tervek készítése és szervezése","Statisztikák - meglátogatott országok, városok","Kalandok megosztása családdal és barátokkal"],"first_steps":["Nyisd meg a travel.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Add hozzá az első utazásodat","Jelöld meg a meglátogatott helyeket a térképen"],"prerequisites":null,"default_creds":"","docs_url":"https://adventurelog.app/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8000,"path":"/api/","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/adventurelog/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745112981Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"audiobookshelf","meta":{"display_name":"Audiobookshelf","description":"Hangoskönyv és podcast kezelő szerver","category":"media","subdomain":"audiobooks","slug":"audiobookshelf","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"512M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"audiobooks","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Hangoskönyv tár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Hangoskönyv és podcast kezelő, lejátszó és szinkronizáló","use_cases":["Hangoskönyvek és podcastok rendszerezése és lejátszása","Automatikus metaadat letöltés - borítók, leírások, fejezetek","Folytatás ott, ahol abbahagytad (szinkron eszközök között)","Podcast feliratkozás és automatikus letöltés","Dedikált mobil alkalmazások (Android, iOS)"],"first_steps":["Nyisd meg az audiobooks.DOMAIN címet a böngészőben","Hozd létre az admin fiókot az első megnyitáskor","Add hozzá a könyvtárakat (/audiobooks és/vagy /podcasts)","Várd meg az automatikus szkennelést","Telepítsd az Audiobookshelf alkalmazást a telefonodra"],"prerequisites":["Külső HDD szükséges a hangoskönyvek tárolásához","Hangoskönyvek mappákba rendezve (pl. Szerző/Könyv/)"],"default_creds":"","docs_url":"https://www.audiobookshelf.org/docs"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":80,"path":"/healthcheck","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/audiobooks","class":"optional"},{"path":"media/podcasts","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/audiobookshelf/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.7451067Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"bentopdf","meta":{"display_name":"BentoPDF","description":"Adatvédelmi fókuszú PDF eszköztár","category":"tools","subdomain":"pdf","slug":"bentopdf","catalog_since":"2026-07-12","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"pdf","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Adatvédelmi fókuszú PDF eszköztár - a fájlok soha nem hagyják el a szervered","use_cases":["PDF összefűzés, szétválasztás és forgatás","PDF konvertálás képekké és képekből","Jelszóvédelem és titkosítás","Vízjel hozzáadása dokumentumokhoz","Minden feldolgozás a szerveren - a fájlok nem kerülnek külső szolgáltatóhoz"],"first_steps":["Nyisd meg a pdf.DOMAIN címet a böngészőben","Válaszd ki a kívánt műveletet","Töltsd fel a PDF fájlt és kattints a feldolgozásra"],"prerequisites":null,"default_creds":"","docs_url":"https://www.bentopdf.com/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/bentopdf/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745118271Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"bookstack","meta":{"display_name":"BookStack","description":"Egyszerű, könyv-szerű wiki és dokumentáció platform","category":"productivity","subdomain":"wiki","slug":"bookstack","catalog_since":"2026-07-18","resources":{"mem_request":"150M","mem_limit":"512M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"wiki","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"APP_KEY","label":"Alkalmazás kulcs","type":"secret","generate":"base64key:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak","use_cases":["Családi tudásbázis - receptek, kézikönyvek, szabályok","Projekt dokumentáció strukturált formában","Könyv \u003e Fejezet \u003e Oldal hierarchia az áttekinthetőségért","Teljes szöveges keresés és címkék","WYSIWYG és Markdown szerkesztő"],"first_steps":["Nyisd meg a wiki.DOMAIN címet a böngészőben","Jelentkezz be: admin@admin.com / password","Változtasd meg azonnal az admin jelszót és email címet","Hozd létre az első polcot és könyvet","Kezdj el írni!"],"prerequisites":null,"default_creds":"admin@admin.com / password","docs_url":"https://www.bookstackapp.com/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":80,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/bookstack/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745113202Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"calcom","meta":{"display_name":"Cal.com","description":"Nyílt forráskódú időpontfoglaló (Calendly alternatíva)","category":"travel","subdomain":"cal","slug":"calcom","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"768M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"cal","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"NEXTAUTH_SECRET","label":"NextAuth titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"CALENDSO_ENCRYPTION_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:16","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Időpontfoglaló - Calendly alternatíva saját szerveren","use_cases":["Időpontfoglalási oldal létrehozása ügyfeleknek","Naptár szinkronizáció (Google Calendar, Outlook)","Személyre szabható foglalási típusok és időtartamok","Automatikus emlékeztető emailek","Csapat naptár kezelés"],"first_steps":["Nyisd meg a cal.DOMAIN címet a böngészőben","Hozd létre az admin fiókot","Állíts be egy foglalási típust (pl. 30 perces megbeszélés)","Szinkronizáld a naptáradat","Oszd meg a foglalási linket"],"prerequisites":["x86 processzor szükséges","Legalább 1 GB szabad RAM (Cal.com + PostgreSQL)"],"default_creds":"","docs_url":"https://cal.com/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3000,"path":"/api/auth/providers","method":"GET","expect":{"status":200,"body_contains":""}}]},"smtp_mapping":{"host_var":"EMAIL_SERVER_HOST","port_var":"EMAIL_SERVER_PORT","security_var":"","security_value":"","from_var":"EMAIL_FROM","from_name_var":"EMAIL_FROM_NAME","from_local":"calcom","extra":null,"tls_mode":"plaintext","from_domain_var":""}},"compose_path":"/opt/docker/stacks/calcom/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745114955Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"calibre-web","meta":{"display_name":"Calibre-Web Automated","description":"Automatizált e-könyv könyvtár - konvertálás, metaadat kezelés és webes olvasó","category":"media","subdomain":"books","slug":"calibre-web","catalog_since":"2026-07-12","resources":{"mem_request":"200M","mem_limit":"768M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"books","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"E-könyvtár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a Calibre könyvtár található","locked_after_deploy":true}],"app_info":{"tagline":"Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed","use_cases":["Automatizált e-könyv feldolgozás - csak dobd be az ingest mappába","Automatikus formátumkonverzió (EPUB, MOBI, PDF, AZW3)","OPDS feed e-olvasókhoz (Kindle, KOReader, Moon+ Reader)","Webes olvasó böngészőben","KOReader szinkronizáció (olvasási pozíció, könyvjelzők)"],"first_steps":["Nyisd meg a books.DOMAIN címet a böngészőben","Jelentkezz be: admin / admin123","Változtasd meg azonnal a jelszót","Dobj egy könyvet a Fájlkezelőben (FileBrowser) az import/calibre mappába — automatikusan feldolgozza és a media/books könyvtárba helyezi"],"prerequisites":["Külső HDD szükséges az e-könyvek tárolásához","x86 processzor szükséges (a CWA tartalmazza a Calibre binárist)","Legalább 768 MB szabad RAM ajánlott"],"default_creds":"admin / admin123","docs_url":"https://github.com/crocodilestick/Calibre-Web-Automated/wiki"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8083,"path":"/","method":""}]},"backup":{"userdata":[{"path":"media/books","class":"mandatory"}],"import":[{"path":"calibre","class":"excluded"}]},"data_paths":[{"path":"calibre","root":"import","role":"import","label":"Beolvasandó e-könyvek"},{"path":"media/books","root":"userdata","role":"library","label":"E-könyvtár"}]},"compose_path":"/opt/docker/stacks/calibre-web/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745110958Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"claper","meta":{"display_name":"Claper","description":"Interaktív prezentáció és közönség bevonás","category":"productivity","subdomain":"present","slug":"claper","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"present","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY_BASE","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Interaktív prezentáció - szavazás, kérdések és reakciók élőben","use_cases":["Interaktív prezentációk élő szavazásokkal","Közönség kérdéseinek gyűjtése és megjelenítése","Reakciók és visszajelzések valós időben","PDF prezentációk feltöltése és megosztása","QR kód a közönség gyors csatlakozásához"],"first_steps":["Nyisd meg a present.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Tölts fel egy PDF prezentációt","Oszd meg a kódot a közönséggel"],"prerequisites":null,"default_creds":"","docs_url":"https://docs.claper.co/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":4000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/claper/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745115206Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"cloudflared","meta":{"display_name":"Cloudflared","description":"","category":"tools","subdomain":"","slug":"cloudflared","resources":{"mem_request":"","mem_limit":"","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":null,"app_info":{"tagline":"","use_cases":null,"first_steps":null,"prerequisites":null,"default_creds":"","docs_url":""},"optional_config":null},"compose_path":"/opt/docker/stacks/cloudflared/docker-compose.yml","state":"running","deployed":false,"protected":true,"orphaned":false,"containers":[{"name":"cloudflared","image":"cloudflare/cloudflared:2026.6.0","state":"running","status":"Up 2 hours"}],"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745111188Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"code-server","meta":{"display_name":"Code-Server","description":"VS Code a böngészőben - kódolás bárhonnan","category":"dev","subdomain":"code","slug":"code-server","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"1024M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"code","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"PASSWORD","label":"Hozzáférési jelszó","type":"password","generate":"password:16","default":"","required":false,"placeholder":"","description":"Bejelentkezési jelszó a szerkesztőhöz.","locked_after_deploy":false}],"app_info":{"tagline":"VS Code a böngészőben - teljes fejlesztői környezet bárhonnan","use_cases":["Kódolás bárhonnan, bármilyen eszközről böngészőben","VS Code teljes funkcionalitás - bővítmények, terminál, debug","Távoli fejlesztés alacsony sávszélességű kapcsolaton is","Egységes fejlesztői környezet több eszközről","Tableten és iPaden is használható"],"first_steps":["Nyisd meg a code.DOMAIN címet a böngészőben","Add meg a hozzáférési jelszót","Nyisd meg a terminált (Ctrl+`) és telepíts eszközöket","Telepíts bővítményeket az Extensions panelben"],"prerequisites":["x86 processzor szükséges a legjobb teljesítményhez","Legalább 1 GB szabad RAM ajánlott"],"default_creds":"(telepítéskor generált jelszó)","docs_url":"https://coder.com/docs/code-server/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8443,"path":"/healthz","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/code-server/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74510696Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"crafty-controller","meta":{"display_name":"Crafty Controller","description":"Minecraft szerver kezelő webes felülettel","category":"games","subdomain":"minecraft","slug":"crafty-controller","catalog_since":"2026-06-26","resources":{"mem_request":"256M","mem_limit":"2048M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"minecraft","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"CRAFTY_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:24","default":"","required":false,"placeholder":"","description":"A Crafty admin felhasználó (admin) kezdeti jelszava — ezzel tudsz belépni a kezelőfelületre","locked_after_deploy":true}],"app_info":{"tagline":"Minecraft szerver kezelő - hozd létre a saját világodat","use_cases":["Minecraft szerver létrehozása és kezelése webes felületen","Több szerver párhuzamos futtatása (Java és Bedrock)","Automatikus mentések és ütemezett újraindítás","Játékos menedzsment és konzol hozzáférés","Szerver fájlok kezelése böngészőből"],"first_steps":["Nyisd meg a minecraft.DOMAIN címet a böngészőben","A kezdeti belépési adatokat ezen az oldalon (Kezdeti belépési adatok) találod","Hozz létre egy új Minecraft szervert a varázslóval","Állítsd be a szerver beállításokat (játékmód, nehézség, stb.)","Állítsd be a szerver portját a 25565–25575 tartományon belül (server.properties → server-port); az első szerver a 25565-öt használja, a továbbiak 25566–25575-öt","Helyi hálózaton csatlakozz a szerver helyi IP-címére és portjára (pl. 192.168.x.x:25565) — a Minecraft kliens „helyi hálózat keresése” nem listázza automatikusan, add meg kézzel a címet","Interneten keresztüli eléréshez port-továbbítás szükséges a választott port(ok)ra — egyeztess az üzemeltetővel"],"prerequisites":["Legalább 2 GB szabad RAM ajánlott (Minecraft szerver + Crafty)","x86 processzor szükséges (nem fut Raspberry Pi-n)","A Minecraft szerverek a 25565–25575 porttartományt használhatják (egyszerre legfeljebb 11 szerver)"],"default_creds":"","docs_url":"https://docs.craftycontrol.com/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"tcp","port":8443,"path":"","method":""}]},"initial_credentials":{"file":"/crafty/app/config/default.json","format":"json","username_key":"username","password_key":"password","note":"Kezdeti admin jelszó (a telepítéskor beállított). Az első belépés után változtasd meg a Crafty felületén — ez a kártya továbbra is a kezdeti jelszót mutatja."}},"compose_path":"/opt/docker/stacks/crafty-controller/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745116859Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"docmost","meta":{"display_name":"Docmost","description":"Modern wiki és dokumentáció platform (Notion-szerű)","category":"productivity","subdomain":"docs","slug":"docmost","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"768M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"docs","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"APP_SECRET","label":"Alkalmazás titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Modern wiki és dokumentáció platform Notion-szerű szerkesztővel","use_cases":["Csapat tudásbázis és belső dokumentáció","Notion-szerű blokk szerkesztő valós idejű együttműködéssel","Terek és oldalak hierarchikus szervezése","Képek, táblázatok és kód blokkok beágyazása","Keresés a teljes dokumentációban"],"first_steps":["Nyisd meg a docs.DOMAIN címet a böngészőben","Az első regisztrált felhasználó automatikusan admin lesz","Hozd létre az első teret (Space) a dokumentumoknak","Kezdj el írni a Notion-szerű szerkesztőben"],"prerequisites":["x86 processzor szükséges","Legalább 768 MB szabad RAM (Docmost + PostgreSQL + Redis)"],"default_creds":"","docs_url":"https://docmost.com/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/docmost/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74511712Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"emby","meta":{"display_name":"Emby","description":"Személyes média szerver élő TV és DVR támogatással","category":"media","subdomain":"emby","slug":"emby","catalog_since":"2026-07-18","resources":{"mem_request":"512M","mem_limit":"2048M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"emby","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Médiatár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Személyes média szerver élő TV és DVR támogatással","use_cases":["Filmek, sorozatok, zene és fotók kezelése egy helyen","Élő TV nézés és felvétel (DVR) TV tunerrel","Automatikus transzkódolás bármilyen eszközhöz","Szülői felügyelet és felhasználói profilok","Szinkronizálás offline megtekintéshez mobilon"],"first_steps":["Nyisd meg az emby.DOMAIN címet a böngészőben","Kövesd a beállítás varázslót","Hozd létre az admin fiókot","Add hozzá a médiatárat a /media mappából","Telepítsd az Emby alkalmazást eszközeidre"],"prerequisites":["Külső HDD szükséges a médiafájlok tárolásához","Legalább 2 GB szabad RAM ajánlott","Emby Premiere előfizetés a prémium funkciókhoz (opcionális)"],"default_creds":"","docs_url":"https://emby.media/support/articles/Home.html"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8096,"path":"/emby/system/ping","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/emby/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745104235Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"filebrowser","meta":{"display_name":"Filebrowser","description":"","category":"tools","subdomain":"","slug":"filebrowser","resources":{"mem_request":"","mem_limit":"","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":null,"app_info":{"tagline":"","use_cases":null,"first_steps":null,"prerequisites":null,"default_creds":"","docs_url":""},"optional_config":null},"compose_path":"/opt/docker/stacks/filebrowser/docker-compose.yml","state":"running","deployed":false,"protected":true,"orphaned":false,"containers":[{"name":"filebrowser","image":"gtstef/filebrowser:1.3.3-stable","state":"running","status":"Up 2 hours (healthy)"}],"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745113393Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"ghost","meta":{"display_name":"Ghost","description":"Professzionális blog és hírlevél platform","category":"productivity","subdomain":"blog","slug":"ghost","catalog_since":"2026-07-18","open_path":"/ghost/","resources":{"mem_request":"150M","mem_limit":"512M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"blog","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Professzionális blog és hírlevél platform","use_cases":["Professzionális blog indítása és üzemeltetése","Hírlevél küldés beépített email funkcióval","SEO-optimalizált tartalom publikálás","Tagság és fizetős tartalom kezelés","Markdown és vizuális szerkesztő"],"first_steps":["Nyisd meg a blog.DOMAIN/ghost/ címet a böngészőben","Hozd létre az admin fiókot a beállítás varázslóban","Írd meg és publikáld az első posztodat","Személyre szabd a témát és beállításokat"],"prerequisites":["x86 processzor szükséges"],"default_creds":"","docs_url":"https://ghost.org/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":2368,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/ghost/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745104566Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"gitea","meta":{"display_name":"Gitea","description":"Könnyű, saját Git szerver webes felülettel","category":"dev","subdomain":"git","slug":"gitea","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"512M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"git","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Saját Git szerver - GitHub-szerű felület, privát repók","use_cases":["Privát Git repozitóriók a saját szerveren","GitHub-szerű felület: pull request, issue, wiki","CI/CD pipeline-ok (Gitea Actions - GitHub Actions kompatibilis)","Szervezetek és csapatok kezelése","Container registry és csomagkezelő"],"first_steps":["Nyisd meg a git.DOMAIN címet a böngészőben","Kövesd az első beállítás varázslót","Hozd létre az admin fiókot","Hozd létre az első repozitóriót","Klónozd a repót: git clone https://git.DOMAIN/user/repo.git"],"prerequisites":null,"default_creds":"","docs_url":"https://docs.gitea.com/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3000,"path":"/api/healthz","method":"GET","expect":{"status":200,"body_contains":""}}]},"smtp_mapping":{"host_var":"GITEA__mailer__SMTP_ADDR","port_var":"GITEA__mailer__SMTP_PORT","security_var":"GITEA__mailer__PROTOCOL","security_value":"smtp+starttls","from_var":"GITEA__mailer__FROM","from_name_var":"","from_local":"gitea","extra":{"GITEA__mailer__ENABLED":"true","GITEA__mailer__FORCE_TRUST_SERVER_CERT":"true"},"tls_mode":"","from_domain_var":""}},"compose_path":"/opt/docker/stacks/gitea/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745118562Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"glance","meta":{"display_name":"Glance","description":"Minimalista információs dashboard","category":"dashboard","subdomain":"dashboard","slug":"glance","catalog_since":"2026-07-18","resources":{"mem_request":"20M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"dashboard","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Minimalista dashboard - RSS, időjárás, könyvjelzők egy oldalon","use_cases":["RSS hírek, YouTube, Reddit és egyéb tartalmak egy oldalon","Időjárás és rendszer monitorozás widgetekkel","Könyvjelzők és kedvenc oldalak rendszerezése","Ultragyors, minimális erőforrás igény","Személyre szabható elrendezés YAML konfigurációval"],"first_steps":["Nyisd meg a dashboard.DOMAIN címet a böngészőben","Szerkeszd a glance.yml konfigurációs fájlt a kötetben","Add hozzá az RSS feedeket, widgeteket","Személyre szabd az elrendezést"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/glanceapp/glance/blob/main/docs/configuration.md"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/glance/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745108723Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"gokapi","meta":{"display_name":"Gokapi","description":"Ideiglenes fájlmegosztás lejáró linkekkel","category":"files","subdomain":"share","slug":"gokapi","catalog_since":"2026-07-18","open_path":"/admin","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"share","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"GOKAPI_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:24","default":"","required":false,"placeholder":"","description":"A Gokapi admin felhasználó (admin) jelszava — ezzel tudsz belépni a kezelőfelületre","locked_after_deploy":true}],"app_info":{"tagline":"Ideiglenes fájlmegosztás lejáró linkekkel","use_cases":["Fájlok biztonságos megosztása lejáró linkekkel","Beállítható lejárati idő és letöltési limit","Jelszóvédett letöltési linkek","API támogatás automatizált feltöltéshez","Titkosított tárolás és E2E titkosítás opció"],"first_steps":["Nyisd meg a share.DOMAIN címet a böngészőben","Lépj be: felhasználó \"admin\", a jelszó a Beállítások oldalon található","Tölts fel egy fájlt és generálj megosztási linket","Állíts be lejárati időt és letöltési limitet a linkhez","Oszd meg a linket - automatikusan lejár a beállított idő után"],"prerequisites":null,"default_creds":"Felhasználó: admin · A jelszó a Beállítások oldalon látható (telepítéskor generált kezdeti jelszó)","docs_url":"https://gokapi.readthedocs.io/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":53842,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/gokapi/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745107181Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"grafana","meta":{"display_name":"Grafana","description":"Professzionális monitoring és vizualizációs platform","category":"dashboard","subdomain":"grafana","slug":"grafana","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"512M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"grafana","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"GF_SECURITY_ADMIN_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:16","default":"","required":false,"placeholder":"","description":"Első bejelentkezéshez. Utána a webes felületen módosítható.","locked_after_deploy":false}],"app_info":{"tagline":"Vizualizációs platform - dashboardok, grafikonok, alertek","use_cases":["Rendszer metrikák vizualizálása (CPU, RAM, hálózat, lemez)","Egyedi dashboardok létrehozása különböző adatforrásokból","Alertek és értesítések küszöbértékek alapján","Prometheus, InfluxDB és sok más adatforrás támogatás","Szép, megosztható dashboardok"],"first_steps":["Nyisd meg a grafana.DOMAIN címet a böngészőben","Jelentkezz be az admin fiókkal","Add hozzá az adatforrásokat (Connections \u003e Data Sources)","Importálj egy dashboard sablont vagy hozz létre sajátot"],"prerequisites":["Adatforrás szükséges (pl. Prometheus - külön telepítendő)"],"default_creds":"admin / (telepítéskor megadott jelszó)","docs_url":"https://grafana.com/docs/grafana/latest/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3000,"path":"/api/health","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/grafana/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745113492Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"gramps-web","meta":{"display_name":"Gramps Web","description":"Családfa készítő és genealógiai szoftver","category":"home","subdomain":"family","slug":"gramps-web","catalog_since":"2026-07-18","resources":{"mem_request":"384M","mem_limit":"1024M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"family","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"GRAMPSWEB_SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Családfa készítő - genealógiai adatbázis webes felületen","use_cases":["Családfa építése és vizualizálása","Személyek, események, helyszínek és kapcsolatok rögzítése","Fényképek és dokumentumok csatolása a családtagokhoz","GEDCOM import és export kompatibilitás","Családtagok közös hozzáférése a családfához"],"first_steps":["Nyisd meg a family.DOMAIN címet a böngészőben","Hozd létre az admin fiókot","Importálj egy meglévő GEDCOM fájlt, vagy kezdd az üres családfát","Add hozzá az első családtagokat"],"prerequisites":null,"default_creds":"","docs_url":"https://gramps-project.github.io/web/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":5000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/gramps-web/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745113803Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"home-assistant","meta":{"display_name":"Home Assistant","description":"Nyílt forráskódú okos otthon központ","category":"home","subdomain":"ha","slug":"home-assistant","catalog_since":"2026-07-18","resources":{"mem_request":"256M","mem_limit":"1024M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"ha","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Okos otthon központ - automatizálás és vezérlés egy helyről","use_cases":["Okos otthon eszközök központi kezelése (lámpa, termosztát, kamera)","Automatizálások létrehozása (pl. mozgásérzékelőre lámpa be)","2000+ integráció (Zigbee, Z-Wave, Tuya, Shelly, stb.)","Dashboard a család számára mobilon és tableten","Energiafogyasztás monitorozás"],"first_steps":["Nyisd meg a ha.DOMAIN címet a böngészőben","Hozd létre a tulajdonos fiókot az onboarding során","Fedezd fel az automatikusan felfedezett eszközöket","Telepíts integrációkat az okos otthon eszközeidhez","Hozd létre az első automatizálást"],"prerequisites":["Okos otthon eszközök (nem kötelező, de ajánlott a telepítés előtt)","Zigbee/Z-Wave koordinátor USB eszközök átpasszolása nem támogatott Docker módban"],"default_creds":"","docs_url":"https://www.home-assistant.io/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8123,"path":"/api/","method":"GET"}]}},"compose_path":"/opt/docker/stacks/home-assistant/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745109114Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"homebox","meta":{"display_name":"Homebox","description":"Otthoni leltár és eszköznyilvántartás","category":"tools","subdomain":"inventory","slug":"homebox","catalog_since":"2026-07-19","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"HBOX_AUTH_API_KEY_PEPPER","label":"API-kulcs pepper","type":"secret","generate":"base64key:48","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true,"data_key":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"inventory","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Otthoni leltár kezelő - tartsd számon a tárgyaidat","use_cases":["Otthoni tárgyak leltározása és nyilvántartása","Helyszínek, címkék és kategóriák szerinti rendszerezés","Garancia lejáratok és beszerzési árak nyilvántartása","Vonalkód szkennelés a gyors hozzáadáshoz","Biztosítási célú leltár készítés"],"first_steps":["Nyisd meg az inventory.DOMAIN címet a böngészőben","Hozd létre a fiókodat az első megnyitáskor","Add hozzá a helyszíneket (pl. nappali, konyha, garázs)","Kezdd el felvenni a tárgyakat fotókkal"],"prerequisites":null,"default_creds":"","docs_url":"https://homebox.software/en/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":7745,"path":"/api/v1/status","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/homebox/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745115416Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"homepage","meta":{"display_name":"Homepage","description":"Személyre szabható kezdőlap szolgáltatás widgetekkel","category":"dashboard","subdomain":"home","slug":"homepage","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"home","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Személyes kezdőlap - szolgáltatás státuszok és widgetek egy helyen","use_cases":["Összes szolgáltatás egy áttekinthető oldalon","Szolgáltatás állapot monitoring widgetek","Docker integráció - automatikus szolgáltatás felfedezés","Könyvjelzők és kedvenc oldalak","Időjárás, rendszer erőforrás és egyéb widgetek"],"first_steps":["Nyisd meg a home.DOMAIN címet a böngészőben","Szerkeszd a konfigurációs fájlokat a homepage_config kötetben","Add hozzá a szolgáltatásokat a services.yaml-ban","Állítsd be a widgeteket a widgets.yaml-ban"],"prerequisites":null,"default_creds":"","docs_url":"https://gethomepage.dev/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/homepage/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745115616Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"immich","meta":{"display_name":"Immich","description":"Fotók és videók kezelése (Google Photos alternatíva)","category":"media","subdomain":"photos","slug":"immich","catalog_since":"2026-07-18","resources":{"mem_request":"2048M","mem_limit":"4096M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"photos","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Adattárolási útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a fotók és videók tárolódnak","locked_after_deploy":true}],"app_info":{"tagline":"Google Photos alternatíva - automatikus fotó mentés és rendszerezés","use_cases":["Fotók és videók automatikus mentése telefonról","Arc- és tárgyfelismerés gépi tanulással","Térképes megjelenítés helyszín alapján","Emlékek és visszatekintések automatikus generálása","Albumok létrehozása és megosztása családtagokkal"],"first_steps":["Nyisd meg a photos.DOMAIN címet a böngészőben","Hozd létre az admin fiókot","Telepítsd az Immich alkalmazást a telefonodra (Android/iOS)","Állítsd be az automatikus feltöltést az alkalmazásban","Hívd meg a családtagokat külön fiókokkal","Külső könyvtár (opcionális): Administration → External Libraries → add /external/photos"],"prerequisites":["Külső HDD szükséges a fotók és videók tárolásához","Legalább 4 GB szabad RAM ajánlott (gépi tanulás funkciókhoz)","x86 processzor szükséges (nem fut Raspberry Pi-n)"],"default_creds":"","docs_url":"https://immich.app/docs/overview/introduction"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":2283,"path":"/api/server/ping","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/photos","class":"optional"}],"hdd":[{"path":"appdata/immich","class":"mandatory"}]}},"compose_path":"/opt/docker/stacks/immich/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745111549Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"jellyfin","meta":{"display_name":"Jellyfin","description":"Ingyenes és nyílt forráskódú média szerver","category":"media","subdomain":"media","slug":"jellyfin","catalog_since":"2026-07-18","resources":{"mem_request":"512M","mem_limit":"2048M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"media","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Médiatár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a filmek, sorozatok és zenék tárolódnak","locked_after_deploy":true}],"app_info":{"tagline":"Ingyenes média szerver - filmek, sorozatok és zene streamelése","use_cases":["Filmek, sorozatok és zenék streamelése bármilyen eszközre","Automatikus metaadat letöltés - borítók, leírások, értékelések","Élő TV és DVR funkció TV tunerrel","Több felhasználó külön profillal és szülői felügyelettel","Mobil és TV alkalmazások (Android, iOS, Roku, Fire TV, stb.)"],"first_steps":["Nyisd meg a media.DOMAIN címet a böngészőben","Kövesd a beállítás varázslót - válaszd a magyar nyelvet","Hozd létre az admin fiókot","Add hozzá a médiatárat (filmek: /media/movies, sorozatok: /media/shows)","Telepítsd a Jellyfin alkalmazást a telefonodra vagy TV-dre"],"prerequisites":["Külső HDD szükséges a médiafájlok tárolásához","Legalább 2 GB szabad RAM ajánlott","Filmek és sorozatok mappákba rendezve (pl. /media/movies/, /media/shows/)"],"default_creds":"","docs_url":"https://jellyfin.org/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8096,"path":"/health","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/jellyfin/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745115837Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"seerr","meta":{"display_name":"Jellyseerr","description":"Média igénylés kezelő Jellyfin/Plex integrációval","category":"media-automation","subdomain":"requests","slug":"seerr","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"requests","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Film és sorozat igénylő a háztartás tagjai számára","use_cases":["Családtagok filmeket és sorozatokat igényelhetnek egyszerűen","Automatikus letöltés Sonarr/Radarr integrációval","Elérhető tartalmak böngészése szép felületen","Igénylések állapotának követése","Felhasználói kvóták és jogosultságok kezelése"],"first_steps":["Nyisd meg a requests.DOMAIN címet a böngészőben","Kövesd a beállítás varázslót","Csatlakoztasd a Jellyfin vagy Plex szerveredet","Csatlakoztasd a Sonarr és Radarr példányokat","Hívd meg a családtagokat"],"prerequisites":["Jellyfin vagy Plex szerver szükséges","Sonarr és/vagy Radarr szükséges az automatikus letöltéshez"],"default_creds":"","docs_url":"https://docs.overseerr.dev/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":5055,"path":"/api/v1/status","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/seerr/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745118973Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"kimai","meta":{"display_name":"Kimai","description":"Időkövetés és projektmenedzsment","category":"productivity","subdomain":"time","slug":"kimai","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"time","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"ADMIN_EMAIL","label":"Admin email","type":"text","generate":"","default":"admin@example.com","required":false,"placeholder":"","description":"","locked_after_deploy":false},{"env_var":"ADMIN_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:16","default":"","required":false,"placeholder":"","description":"Első bejelentkezéshez. Utána a webes felületen módosítható.","locked_after_deploy":false}],"app_info":{"tagline":"Időkövetés - projektek, ügyfelek és munkaidő nyilvántartás","use_cases":["Munkaidő nyilvántartás projektekre és ügyfelekre bontva","Stopper-szerű időmérés egy kattintással","Riportok és exportálás (PDF, CSV, Excel)","Költségek és számlázás nyilvántartás","Több felhasználó csapat szintű jogosultságokkal"],"first_steps":["Nyisd meg a time.DOMAIN címet a böngészőben","Jelentkezz be a telepítéskor megadott admin adatokkal","Hozd létre az első ügyfelet és projektet","Indítsd el az időmérést"],"prerequisites":null,"default_creds":"(telepítéskor megadott admin email és jelszó)","docs_url":"https://www.kimai.org/documentation/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8001,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/kimai/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745114094Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"komga","meta":{"display_name":"Komga","description":"Képregény és manga szerver OPDS támogatással","category":"media","subdomain":"comics","slug":"komga","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"512M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"comics","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Képregénytár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Képregény, manga és könyv szerver webes olvasóval","use_cases":["Képregények és mangák rendszerezése és olvasása böngészőben","Automatikus metaadat szkennelés és borítókép generálás","OPDS feed kompatibilis olvasó alkalmazásokhoz","Olvasási haladás szinkronizálás eszközök között","Több felhasználó külön könyvtárral"],"first_steps":["Nyisd meg a comics.DOMAIN címet a böngészőben","Hozd létre az admin fiókot az első megnyitáskor","Add hozzá a könyvtárat (/data)","Várd meg az automatikus szkennelést","Használj OPDS-kompatibilis alkalmazást mobilon (pl. Tachiyomi)"],"prerequisites":["Külső HDD szükséges a képregények tárolásához","Támogatott formátumok: CBZ, CBR, PDF, EPUB"],"default_creds":"","docs_url":"https://komga.org/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":25600,"path":"/actuator/health","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/comics","class":"optional"}]}},"compose_path":"/opt/docker/stacks/komga/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745116147Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"mealie","meta":{"display_name":"Mealie","description":"Receptkezelő és étkezéstervező","category":"productivity","subdomain":"recipes","slug":"mealie","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"1000M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"recipes","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Receptkezelő és étkezés tervező a családnak","use_cases":["Receptek gyűjtése és rendszerezése kategóriák és címkék szerint","Receptek importálása weboldalakról automatikusan","Heti étkezés tervezés és bevásárlólista generálás","Receptek megosztása családtagokkal és barátokkal","Többnyelvű felület - magyar is elérhető"],"first_steps":["Nyisd meg a mealie.DOMAIN címet a böngészőben","Jelentkezz be: changeme@example.com / MyPassword","Változtasd meg azonnal az email címet és jelszót","Importáld az első receptet egy weboldal URL beillesztésével","Próbáld ki az étkezés tervezőt"],"prerequisites":null,"default_creds":"changeme@example.com / MyPassword","docs_url":"https://docs.mealie.io/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"tcp","port":9000,"path":"","method":""}]},"smtp_mapping":{"host_var":"SMTP_HOST","port_var":"SMTP_PORT","security_var":"SMTP_AUTH_STRATEGY","security_value":"NONE","from_var":"SMTP_FROM_EMAIL","from_name_var":"SMTP_FROM_NAME","from_local":"mealie","extra":null,"tls_mode":"","from_domain_var":""}},"compose_path":"/opt/docker/stacks/mealie/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745104857Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"navidrome","meta":{"display_name":"Navidrome","description":"Könnyű zene szerver Subsonic API támogatással","category":"media","subdomain":"music","slug":"navidrome","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"music","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Zenegyűjtemény útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a zenefájlok tárolódnak","locked_after_deploy":true}],"app_info":{"tagline":"Könnyű zene szerver - streameld a saját zenegyűjteményedet","use_cases":["Saját zenegyűjtemény streamelése bármilyen eszközről","Subsonic API kompatibilis mobil alkalmazások használata","Lejátszási listák, kedvencek és értékelések kezelése","Automatikus metaadat és borítókép letöltés","Több felhasználó külön könyvtárral és beállításokkal"],"first_steps":["Nyisd meg a music.DOMAIN címet a böngészőben","Az első felhasználó automatikusan admin lesz","Hozd létre a fiókodat és várd meg az első szkennelést","Telepíts Subsonic-kompatibilis alkalmazást (pl. Subtracks, play:Sub)","Add meg a szerver címet: https://music.DOMAIN"],"prerequisites":["Külső HDD szükséges a zenefájlok tárolásához","Zenefájlok mappákba rendezve (pl. Előadó/Album/szám.flac)"],"default_creds":"","docs_url":"https://www.navidrome.org/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":4533,"path":"/ping","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/music","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/navidrome/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745111759Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"nextcloud","meta":{"display_name":"Nextcloud","description":"Saját felhő tárhely - Google Drive/Dropbox alternatíva","category":"files","subdomain":"cloud","slug":"nextcloud","catalog_since":"2026-07-18","resources":{"mem_request":"256M","mem_limit":"1024M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"cloud","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"MYSQL_ROOT_PASSWORD","label":"MariaDB root jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"NEXTCLOUD_ADMIN_USER","label":"Admin felhasználónév","type":"text","generate":"","default":"admin","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"NEXTCLOUD_ADMIN_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:16","default":"","required":false,"placeholder":"","description":"Első bejelentkezéshez. Utána a webes felületen módosítható.","locked_after_deploy":false},{"env_var":"HDD_PATH","label":"Adattárolási útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"A saját Google Drive-od - fájlok, naptár, névjegyek egy helyen","use_cases":["Fájlok szinkronizálása és megosztása eszközök között","Naptár és névjegyek szinkronizálás (CalDAV/CardDAV)","Dokumentumok közös szerkesztése (OnlyOffice integrációval)","Fotó és videó automatikus feltöltés telefonról","Alkalmazásbolt - kibővíthető funkciók (Notes, Tasks, Forms, stb.)"],"first_steps":["Nyisd meg a cloud.DOMAIN címet a böngészőben","Jelentkezz be a telepítéskor megadott admin fiókkal","Telepítsd a Nextcloud asztali alkalmazást a számítógépedre","Telepítsd a Nextcloud mobil alkalmazást a telefonodra","Hívd meg a családtagokat felhasználói fiókok létrehozásával"],"prerequisites":["Külső HDD szükséges a fájlok tárolásához","Legalább 1 GB szabad RAM (Nextcloud + MariaDB + Redis)","x86 processzor ajánlott a legjobb teljesítményhez"],"default_creds":"Az admin fiók adatait a telepítéskor adod meg","docs_url":"https://docs.nextcloud.com/server/latest/user_manual/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":80,"path":"/status.php","method":"GET","expect":{"status":200,"body_contains":"installed"}}]},"smtp_mapping":{"host_var":"SMTP_HOST","port_var":"SMTP_PORT","security_var":"","security_value":"","from_var":"MAIL_FROM_ADDRESS","from_name_var":"","from_local":"nextcloud","extra":null,"tls_mode":"plaintext","from_domain_var":"MAIL_DOMAIN"},"backup":{"hdd":[{"path":"appdata/nextcloud","class":"mandatory"}]}},"compose_path":"/opt/docker/stacks/nextcloud/docker-compose.yml","state":"running","deployed":true,"protected":false,"orphaned":false,"containers":[{"name":"nextcloud","image":"nextcloud:34.0.1-apache","state":"running","status":"Up 2 minutes (healthy)"},{"name":"nextcloud-redis","image":"redis:7-alpine","state":"running","status":"Up 2 minutes (healthy)"},{"name":"nextcloud-db","image":"mariadb:11.6","state":"running","status":"Up 2 minutes (healthy)"}],"app_config":{"deployed":true,"deployed_at":"2026-09-16T17:15:34Z","env":{"DB_PASSWORD":"ENC:3i3egDPtM79jb1sl3u56R4tBQF9Z1nzz16BrxZwnSMTQHn6KQd204jwSb1cmGWr8FYI8sg==","DOMAIN":"enkicsifelhom.hu","HDD_PATH":"/mnt/felhom-drives/adatlemez","MYSQL_ROOT_PASSWORD":"ENC:xzESMHOV5+Fw52UgDWyxXvBx6lbkhcGMgFiNC/s7Wjo3g4VFSKruot7J0vWx7RF+xmoogw==","NEXTCLOUD_ADMIN_PASSWORD":"ENC:ovJbyDCs/7SZ3oLS3fhI2EQkIEmTLW95Xwj9dXSHI4GGCO1ItICFPWrKrqHmpnpw","NEXTCLOUD_ADMIN_USER":"admin","SUBDOMAIN":"cloud"},"locked_fields":["DOMAIN","SUBDOMAIN","DB_PASSWORD","MYSQL_ROOT_PASSWORD","NEXTCLOUD_ADMIN_USER","HDD_PATH"],"desired_state":"running","installed_images":{"nextcloud":{"ref":"nextcloud:34.0.1-apache","digest":"sha256:b52f7bc0e496f227b0e85e3b88571a42c68b6245ccde29d577e733227715dcf5","at":"2026-09-16T17:16:23Z"},"nextcloud-db":{"ref":"mariadb:11.6","digest":"sha256:bfb1298c06cd15f446f1c59600b3a856dae861705d1a2bd2a00edbd6c74ba748","at":"2026-09-16T17:16:23Z"},"nextcloud-redis":{"ref":"redis:7-alpine","digest":"sha256:ff02b58f971e7d7d156a1267e283fcbbeee91773b6aa36c49dac28ecfe28eadf","at":"2026-09-16T17:16:23Z"}},"pinned_images":{"nextcloud":"nextcloud:34.0.1-apache","nextcloud-db":"mariadb:11.6","nextcloud-redis":"redis:7-alpine"}},"deploying":false,"updating":false,"health_probe":{"healthy":true,"last_check":"2026-09-16T17:47:48.749106536Z","details":[{"type":"api","target":":80/status.php","healthy":true,"status":200,"latency":"40ms"}]},"last_updated":"2026-09-16T17:50:08.745109855Z","restarting_since":"0001-01-01T00:00:00Z","template_images":{"nextcloud":"nextcloud:34.0.1-apache","nextcloud-db":"mariadb:11.6","nextcloud-redis":"redis:7-alpine"},"catalog_images":{"nextcloud":"nextcloud:34.0.1-apache","nextcloud-db":"mariadb:11.6","nextcloud-redis":"redis:7-alpine"}},{"name":"onlyoffice","meta":{"display_name":"OnlyOffice","description":"Teljes értékű irodai csomag a böngészőben","category":"productivity","subdomain":"office","slug":"onlyoffice","catalog_since":"2026-07-18","resources":{"mem_request":"512M","mem_limit":"2048M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"office","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"JWT_SECRET","label":"JWT titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Teljes értékű irodai csomag - Word, Excel, PowerPoint a böngészőben","use_cases":["Dokumentumok, táblázatok és prezentációk szerkesztése böngészőben","Valós idejű közös szerkesztés több felhasználóval","Microsoft Office formátumok teljes kompatibilitása (docx, xlsx, pptx)","Nextcloud és egyéb felhő tárhely integrációk","PDF konvertálás és kitöltés"],"first_steps":["Nyisd meg az office.DOMAIN címet a böngészőben","Várj amíg az inicializálás befejeződik (1-2 perc)","A Document Server önmagában API-ként működik","Integráld Nextcloud-dal vagy más alkalmazással a JWT tokennel","Nextcloudban: telepítsd az OnlyOffice alkalmazást és add meg az URL-t"],"prerequisites":["Legalább 2 GB szabad RAM szükséges","x86 processzor szükséges (nem fut Raspberry Pi-n)","Nextcloud vagy más kompatibilis alkalmazás ajánlott az integrációhoz"],"default_creds":"","docs_url":"https://helpcenter.onlyoffice.com/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":80,"path":"/healthcheck","method":"GET","expect":{"status":200,"body_contains":""}}]},"integrations":[{"target":"filebrowser","label":"FileBrowser integráció","description":"Dokumentumok szerkesztése a fájlkezelőben"},{"target":"nextcloud","label":"Nextcloud integráció","description":"Dokumentumok szerkesztése a Nextcloudban"}]},"compose_path":"/opt/docker/stacks/onlyoffice/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74511734Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"opengist","meta":{"display_name":"OpenGist","description":"Kód snippetek megosztása (GitHub Gist alternatíva)","category":"dev","subdomain":"gist","slug":"opengist","catalog_since":"2026-07-18","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"gist","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Kód snippetek megosztása - privát GitHub Gist alternatíva","use_cases":["Kód snippetek és szövegek megosztása","Szintaxis kiemelés sok programozási nyelvhez","Privát és nyilvános gistek","Git-alapú tárolás - verziókezelés automatikusan","Markdown támogatás és beágyazás"],"first_steps":["Nyisd meg a gist.DOMAIN címet a böngészőben","Hozd létre a fiókodat (az első felhasználó admin lesz)","Hozd létre az első gistet - írd be a kódot és mentsd","Oszd meg a linket"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/thomiceli/opengist"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":6157,"path":"/healthcheck","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/opengist/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745114384Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"outline","meta":{"display_name":"Outline","description":"Modern csapat tudásbázis Markdown támogatással","category":"productivity","subdomain":"kb","slug":"outline","catalog_since":"2026-07-18","resources":{"mem_request":"200M","mem_limit":"768M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"kb","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"UTILS_SECRET","label":"Segédprogram kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Modern tudásbázis - Markdown, valós idejű együttműködés, keresés","use_cases":["Csapat tudásbázis és dokumentáció","Markdown szerkesztő valós idejű együttműködéssel","Strukturált dokumentumok fa-szerkezetben","Teljes szöveges keresés és hivatkozások","API és integrációk (Slack, webhookok)"],"first_steps":["Nyisd meg a kb.DOMAIN címet a böngészőben","Hozd létre az első felhasználót","Hozz létre egy gyűjteményt (Collection) a dokumentumoknak","Kezdj el írni Markdown-ban","Hívd meg a csapattagokat"],"prerequisites":["x86 processzor szükséges","Legalább 1 GB szabad RAM (Outline + PostgreSQL + Redis)"],"default_creds":"","docs_url":"https://docs.getoutline.com/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3000,"path":"/_health","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/outline/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745118763Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"paperless-ngx","meta":{"display_name":"Paperless-ngx","description":"Dokumentumok digitalizálása és rendszerezése","category":"productivity","subdomain":"paperless","slug":"paperless-ngx","catalog_since":"2026-07-18","resources":{"mem_request":"500M","mem_limit":"1664M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"paperless","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"PAPERLESS_SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"PAPERLESS_ADMIN_USER","label":"Admin felhasználónév","type":"text","generate":"","default":"admin","required":false,"placeholder":"","description":"","locked_after_deploy":false},{"env_var":"PAPERLESS_ADMIN_PASSWORD","label":"Admin jelszó","type":"password","generate":"password:16","default":"","required":false,"placeholder":"","description":"Első bejelentkezéshez. Utána a webes felületen módosítható.","locked_after_deploy":false},{"env_var":"HDD_PATH","label":"Adattárolási útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a dokumentumok tárolódnak","locked_after_deploy":true},{"env_var":"PAPERLESS_OCR_LANGUAGE","label":"OCR nyelv","type":"select","generate":"","default":"hun+eng","required":false,"placeholder":"","description":"Dokumentum felismerés nyelve","locked_after_deploy":false,"options":[{"value":"hun","label":"Magyar"},{"value":"eng","label":"Angol"},{"value":"hun+eng","label":"Magyar + Angol"},{"value":"deu+eng","label":"Német + Angol"}]}],"app_info":{"tagline":"Digitális irattár - szkennelés, OCR és automatikus rendszerezés","use_cases":["Papír dokumentumok digitalizálása és rendszerezése","Automatikus OCR szövegfelismerés szkennelt dokumentumokon","Intelligens automatikus kategorizálás és címkézés","Teljes szöveges keresés az összes dokumentumban","Email-ből érkező dokumentumok automatikus feldolgozása"],"first_steps":["Nyisd meg a paperless.DOMAIN címet a böngészőben","Lépj be: felhasználó \"admin\", a jelszó a Beállítások oldalon található (Automatikusan generált értékek)","Tölts fel egy dokumentumot a webfelületen, VAGY dobd a Fájlkezelőben (FileBrowser) az import/paperless mappába — onnan automatikusan beolvassa és OCR-rel feldolgozza. A Fájlkezelő belépése a Fájlkezelő alkalmazás oldalán található","Sok dokumentumot egyszerre is feltölthetsz: egyenként dolgozza fel őket, egy nagyobb köteg néhány percig tart","Hozz létre címkéket és levelezőket az automatikus rendszerezéshez"],"prerequisites":["Külső HDD ajánlott a dokumentumok tárolásához","Legalább 1 GB szabad RAM (OCR feldolgozáshoz)"],"default_creds":"","docs_url":"https://docs.paperless-ngx.com/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8000,"path":"/","method":""}]},"backup":{"hdd":[{"path":"appdata/paperless/media","class":"mandatory"},{"path":"appdata/paperless/export","class":"excluded"}],"import":[{"path":"paperless","class":"excluded"}]},"data_paths":[{"path":"paperless","root":"import","role":"import","label":"Beolvasandó dokumentumok"}]},"compose_path":"/opt/docker/stacks/paperless-ngx/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74511199Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"papra","meta":{"display_name":"Papra","description":"Minimalista dokumentumtár és rendszerező","category":"productivity","subdomain":"papra","slug":"papra","catalog_since":"2026-07-12","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"papra","required":true,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"AUTH_SECRET","label":"Munkamenet-aláíró kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true,"data_key":true}],"app_info":{"tagline":"Minimalista dokumentumtár - egyszerű rendszerezés és keresés","use_cases":["Dokumentumok egyszerű feltöltése és rendszerezése","Gyors keresés a dokumentumok között","Minimalista felület felesleges funkciók nélkül","Könnyű alternatíva a Paperless-ngx-hez"],"first_steps":["Nyisd meg a papra.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Töltsd fel az első dokumentumot"],"prerequisites":null,"default_creds":"","docs_url":"https://docs.papra.app/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":1221,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/papra/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745116448Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"plant-it","meta":{"display_name":"Plant-it","description":"Növénynapló és gondozás emlékeztető","category":"home","subdomain":"plants","slug":"plant-it","lifecycle":"abandoned","catalog_since":"2026-07-21","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"plants","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"JWT_SECRET","label":"JWT titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Növénynapló - emlékeztetők öntözésre, trágyázásra és fotónapló","use_cases":["Szobanövények és kerti növények nyilvántartása","Emlékeztetők öntözésre, trágyázásra, átültetésre","Fotónapló a növények fejlődéséről","Statisztikák és gondozási előzmények","Több felhasználó - a család együtt gondozhat"],"first_steps":["Nyisd meg a plants.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Add hozzá az első növényt fotóval","Állíts be gondozási emlékeztetőket"],"prerequisites":null,"default_creds":"","docs_url":"https://docs.plant-it.org/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8080,"path":"/api/info","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/plant-it/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745107421Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"plex","meta":{"display_name":"Plex","description":"Népszerű média szerver csiszolt felülettel","category":"media","subdomain":"plex","slug":"plex","catalog_since":"2026-02-15","resources":{"mem_request":"512M","mem_limit":"2048M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"plex","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"PLEX_CLAIM","label":"Plex Claim Token","type":"text","generate":"","default":"","required":true,"placeholder":"claim-xxxxxxxxxxxx","description":"Generáld a https://plex.tv/claim oldalon (4 percig érvényes)","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Médiatár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Prémium média szerver kiváló alkalmazás támogatással","use_cases":["Filmek, sorozatok és zene streamelése professzionális felületen","Automatikus transzkódolás bármilyen eszközhöz","Watch Together - közös filmnézés távolról","Intro/outro skip funkció (Plex Pass)","Gazdag mobilalkalmazás és Smart TV támogatás"],"first_steps":["Generálj egy claim tokent a https://plex.tv/claim oldalon","Telepítés után nyisd meg a plex.DOMAIN címet","Kapcsold össze a Plex fiókoddat a szerverrel","Add hozzá a médiatárat (filmek: /media/movies, sorozatok: /media/shows)","Telepítsd a Plex alkalmazást eszközeidre"],"prerequisites":["Plex fiók szükséges (ingyenes regisztráció a plex.tv-n)","Külső HDD a médiafájlok tárolásához","Legalább 2 GB szabad RAM (transzkódoláshoz több ajánlott)"],"default_creds":"","docs_url":"https://support.plex.tv/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":32400,"path":"/identity","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/plex/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745110096Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"privatebin","meta":{"display_name":"PrivateBin","description":"Titkosított jegyzet és szöveg megosztás","category":"security","subdomain":"paste","slug":"privatebin","catalog_since":"2026-09-14","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"paste","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Titkosított szöveg megosztás - a szerver nem látja a tartalmat","use_cases":["Érzékeny szövegek biztonságos megosztása","E2E titkosítás - a szerver nem fér hozzá a tartalomhoz","Beállítható lejárati idő (5 perc - 1 év, vagy soha)","Olvasás után automatikus törlés opció","Jelszóvédelem a még nagyobb biztonságért"],"first_steps":["Nyisd meg a paste.DOMAIN címet a böngészőben","Írd be a szöveget és kattints a Küldés gombra","Oszd meg a generált linket - a titkosítási kulcs az URL-ben van"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/PrivateBin/PrivateBin/wiki"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/privatebin/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74511755Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"radarr","meta":{"display_name":"Radarr","description":"Automatikus film letöltő és rendszerező","category":"media-automation","subdomain":"radarr","slug":"radarr","catalog_since":"2026-07-18","resources":{"mem_request":"150M","mem_limit":"512M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"radarr","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Médiatár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Automatikus film letöltő és rendszerező","use_cases":["Filmek automatikus letöltése és rendszerezése","Kívánságlista - filmek automatikusan a könyvtáradba kerülnek","Minőség kezelés és automatikus frissítés jobb minőségre","Integráció Jellyfin/Plex és letöltő kliensekkel","Metaadat és borítókép automatikus letöltés"],"first_steps":["Nyisd meg a radarr.DOMAIN címet a böngészőben","Állíts be egy letöltő klienst (pl. qBittorrent)","Add hozzá az indexereket (vagy használj Prowlarr-t)","Állítsd be a gyökérmappát (/media/movies)","Keress rá egy filmre és add hozzá a listádhoz"],"prerequisites":["Külső HDD szükséges a médiafájlok tárolásához","Letöltő kliens szükséges (pl. qBittorrent - külön telepítendő)","Indexer hozzáférés szükséges a kereséshez"],"default_creds":"","docs_url":"https://wiki.servarr.com/radarr"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":7878,"path":"/ping","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/movies","class":"excluded"},{"path":"downloads","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/radarr/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745108112Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"rallly","meta":{"display_name":"Rallly","description":"Időpont szavazás (Doodle alternatíva)","category":"productivity","subdomain":"poll","slug":"rallly","catalog_since":"2026-07-18","resources":{"mem_request":"384M","mem_limit":"1024M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"poll","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_PASSWORD","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Időpont szavazás - Doodle alternatíva a saját szerveren","use_cases":["Közös időpont egyeztetés szavazással","Találkozók, események szervezése","Résztvevők regisztráció nélkül szavazhatnak","Email értesítések és emlékeztetők","Egyszerű, tiszta felület"],"first_steps":["Nyisd meg a poll.DOMAIN címet a böngészőben","Hozz létre egy új szavazást","Add meg a lehetséges időpontokat","Oszd meg a linket a résztvevőkkel"],"prerequisites":null,"default_creds":"","docs_url":"https://support.rallly.co/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3000,"path":"/","method":""}]},"smtp_mapping":{"host_var":"SMTP_HOST","port_var":"SMTP_PORT","security_var":"SMTP_SECURE","security_value":"false","from_var":"NOREPLY_EMAIL","from_name_var":"NOREPLY_EMAIL_NAME","from_local":"rallly","extra":{"SMTP_REJECT_UNAUTHORIZED":"false"},"tls_mode":"","from_domain_var":""}},"compose_path":"/opt/docker/stacks/rallly/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.74511234Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"recipe-importer","meta":{"display_name":"Recipe Importer","description":"Magyar receptoldalak importálása Mealie-be és Tandoor-ba","category":"tools","subdomain":"rimport","slug":"recipe-importer","catalog_since":"2026-07-12","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"rimport","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY","label":"Titkos kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"Flask munkamenet titkos kulcs (automatikusan generált)","locked_after_deploy":true}],"app_info":{"tagline":"Magyar receptoldalak importálása egyszerűen — egyedi és tömeges import Mealie-be és Tandoor-ba","use_cases":["Receptek importálása 6 magyar oldalról: mindmegette.hu, streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu és gastrohobbi.hu — hozzávalók, lépések, képek és címkék automatikus felismerése","Tömeges importálás: több URL beillesztése egyszerre, recept-áttekintéssel vagy teljesen automatikus módban","Importálás előtti szerkesztés — strukturált hozzávalók (mennyiség, mértékegység, étel, megjegyzés), lépések módosítása, címkék kezelése","Mealie és Tandoor Recipes egyidejű támogatás — választhatsz célrendszert, vagy mindkettőbe importálhatsz egyszerre","Ismeretlen oldalak esetén schema.org JSON-LD alapú automatikus feldolgozás (recipeIngredient, recipeInstructions, keywords)"],"first_steps":["Nyisd meg a rimport.DOMAIN címet a böngészőben","Menj a Beállítások oldalra és add meg a Mealie és/vagy Tandoor URL-t és API kulcsot (Mealie: Profil → API Tokens; Tandoor: Beállítások → API Browser → Auth Token)","Állíts be felhasználónevet és jelszót a hozzáférés védelméhez","Illeszd be egy recept URL-jét az importálás oldalon, kattints a Feldolgozás gombra, majd ellenőrzés után az Importálás gombra"],"prerequisites":["Mealie és/vagy Tandoor Recipes telepítve és elérhető a hálózaton","API kulcs a célalkalmazásban (Mealie és/vagy Tandoor) létrehozva"],"default_creds":"","docs_url":"https://gitea.dooplex.hu/admin/recipe-importer"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8000,"path":"/health","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/recipe-importer/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745117801Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"romm","meta":{"display_name":"RomM","description":"Retró játékgyűjtemény kezelő","category":"media","subdomain":"arcade","slug":"romm","catalog_since":"2026-07-18","resources":{"mem_request":"300M","mem_limit":"1024M","pi_compatible":false,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"arcade","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"MYSQL_ROOT_PASSWORD","label":"MariaDB root jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"ROMM_AUTH_SECRET_KEY","label":"Hitelesítési titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Adattárolási útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja, ahol a ROM-ok és borítóképek tárolódnak","locked_after_deploy":true}],"app_info":{"tagline":"Retró játékgyűjtemény kezelő, böngésző és lejátszó","use_cases":["Retró játékgyűjtemény rendszerezése és böngészése webes felületen","Játékok metaadatainak automatikus letöltése — borítók, leírások, értékelések","Platformonkénti szűrés és keresés a teljes gyűjteményben","ROM fájlok webes feltöltése és letöltése","Többfelhasználós hozzáférés a háztartás tagjai számára"],"first_steps":["Nyisd meg az arcade.DOMAIN címet a böngészőben","Jelentkezz be az alapértelmezett admin / admin fiókkal","Változtasd meg azonnal a jelszót a Settings menüben","Töltsd fel a ROM fájlokat a Fájlkezelőben (FileBrowser) a roms/ mappába, platform mappákba rendezve (pl. roms/gba/, roms/snes/)","Indíts egy Scan-t a bal oldali menüben a ROM-ok beolvasásához","Opcionális: állíts be metaadat-szolgáltatókat a borítóképek és leírások automatikus letöltéséhez (lásd lent)"],"prerequisites":["Külső HDD szükséges a ROM fájlok és borítóképek tárolásához","Legalább 1 GB szabad RAM ajánlott (MariaDB + Redis + RomM)","ROM fájlok platform mappákba rendezve (pl. roms/gba/, roms/snes/)"],"default_creds":"admin / admin","docs_url":"https://github.com/rommapp/romm/wiki"},"optional_config":[{"group":"Metaadat-szolgáltatók","description":"Játékok borítóinak, leírásainak és értékeléseinek automatikus letöltéséhez. Legalább az IGDB beállítása ajánlott. Mindegyik ingyenesen használható regisztráció után.","fields":[{"env_var":"IGDB_CLIENT_ID","label":"IGDB Client ID","type":"text","help_url":"https://api-docs.igdb.com/#getting-started","help_text":"1) Regisztrálj / jelentkezz be a Twitch fejlesztői portálon (dev.twitch.tv). 2) Hozz létre egy új alkalmazást (bármilyen névvel). 3) Másold be a Client ID-t."},{"env_var":"IGDB_CLIENT_SECRET","label":"IGDB Client Secret","type":"secret_input","help_url":"","help_text":"A Twitch alkalmazásod Client Secret-je (a „New Secret\" gombbal generálhatod)."},{"env_var":"STEAMGRIDDB_API_KEY","label":"SteamGridDB API Key","type":"text","help_url":"https://www.steamgriddb.com/profile/preferences/api","help_text":"Regisztrálj a SteamGridDB oldalon, majd a Preferences → API fül alatt kattints a „Generate API key\" gombra."},{"env_var":"SCREENSCRAPER_USER","label":"ScreenScraper felhasználónév","type":"text","help_url":"https://www.screenscraper.fr/","help_text":"Regisztrálj a screenscraper.fr oldalon. A felhasználóneved lesz az API felhasználónév."},{"env_var":"SCREENSCRAPER_PASSWORD","label":"ScreenScraper jelszó","type":"secret_input","help_url":"","help_text":"A screenscraper.fr fiókod jelszava."},{"env_var":"MOBYGAMES_API_KEY","label":"MobyGames API Key","type":"text","help_url":"https://www.mobygames.com/info/api/","help_text":"Regisztrálj a MobyGames oldalon, majd az API oldalon igényelj kulcsot. Részletes játékinformációkat és krediteket biztosít."}]}],"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/","method":""}]},"backup":{"userdata":[{"path":"roms","class":"optional"}],"hdd":[{"path":"appdata/romm/resources","class":"excluded"}]},"data_paths":[{"path":"roms","root":"userdata","role":"library","label":"ROM gyűjtemény"}]},"compose_path":"/opt/docker/stacks/romm/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745114835Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"sonarr","meta":{"display_name":"Sonarr","description":"Automatikus sorozat letöltő és rendszerező","category":"media-automation","subdomain":"sonarr","slug":"sonarr","catalog_since":"2026-07-18","resources":{"mem_request":"150M","mem_limit":"512M","pi_compatible":true,"needs_hdd":true,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"sonarr","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"HDD_PATH","label":"Médiatár útvonal","type":"path","generate":"","default":"","required":true,"placeholder":"/mnt/felhom-drives/hdd_1","description":"A külső merevlemez elérési útja","locked_after_deploy":true}],"app_info":{"tagline":"Automatikus sorozat letöltő és rendszerező","use_cases":["Sorozatok automatikus letöltése és rendszerezése","Kívánságlista kezelés - új epizódok automatikus letöltése","Minőség kezelés (480p-tól 4K-ig, automatikus frissítés)","Integráció Jellyfin/Plex és letöltő kliensekkel","Felirat automatikus letöltés"],"first_steps":["Nyisd meg a sonarr.DOMAIN címet a böngészőben","Állíts be egy letöltő klienst (pl. qBittorrent)","Add hozzá az indexereket (vagy használj Prowlarr-t)","Állítsd be a gyökérmappát (/media/shows)","Keress rá egy sorozatra és add hozzá a listádhoz"],"prerequisites":["Külső HDD szükséges a médiafájlok tárolásához","Letöltő kliens szükséges (pl. qBittorrent - külön telepítendő)","Indexer hozzáférés szükséges a kereséshez"],"default_creds":"","docs_url":"https://wiki.servarr.com/sonarr"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":8989,"path":"/ping","method":"GET","expect":{"status":200,"body_contains":""}}]},"backup":{"userdata":[{"path":"media/tv","class":"excluded"},{"path":"downloads","class":"excluded"}]}},"compose_path":"/opt/docker/stacks/sonarr/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745112721Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"sparkyfitness","meta":{"display_name":"SparkyFitness","description":"Táplálkozás- és edzéskövető","category":"home","subdomain":"sparky","slug":"sparkyfitness","catalog_since":"2026-07-18","resources":{"mem_request":"400M","mem_limit":"1792M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"sparky","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"APP_DB_PASSWORD","label":"Alkalmazás adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"API_ENCRYPTION_KEY","label":"Adattitkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true,"data_key":true},{"env_var":"BETTER_AUTH_SECRET","label":"Munkamenet aláíró kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true,"data_key":true}],"app_info":{"tagline":"Táplálkozási napló, kalóriaszámláló és edzéskövető – önállóan üzemeltetve","use_cases":["Napi étkezések és kalóriabevitel naplózása","Testsúly és testméretek követése grafikonokkal","Edzések és mozgás rögzítése","Tápanyag-célok (fehérje, szénhidrát, zsír) beállítása és követése","Haladás áttekintése idővonalon és statisztikákon"],"first_steps":["Nyisd meg a sparky.DOMAIN címet a böngészőben","Regisztrálj egy fiókot e-mail címmel és jelszóval","Állítsd be a profilodat és a napi céljaidat","Kezdd el naplózni az étkezéseidet és edzéseidet"],"prerequisites":["Az első indításkor a szerver lefuttatja az adatbázis-migrációkat – ez akár 1-2 percig is eltarthat, mire az alkalmazás elérhetővé válik"],"default_creds":"","docs_url":"https://github.com/CodeWithCJ/SparkyFitness"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":80,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/sparkyfitness/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745105527Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"tandoor","meta":{"display_name":"Tandoor Recipes","description":"Receptkezelő és étkezés tervező","category":"home","subdomain":"recipes","slug":"tandoor","catalog_since":"2026-07-18","resources":{"mem_request":"512M","mem_limit":"1280M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"recipes","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Receptkezelő és étkezés tervező a családnak","use_cases":["Receptek gyűjtése és rendszerezése egy helyen","Receptek importálása weboldalakról egy kattintással","Heti étkezés tervezés és bevásárlólista generálás","Több felhasználó - a család együtt tervezhet","Receptek megosztása linkkel családtagokkal, barátokkal"],"first_steps":["Nyisd meg a recipes.DOMAIN címet a böngészőben","Hozd létre az admin fiókot","Importáld az első receptet egy weboldalról (Bookmarklet)","Próbáld ki az étkezés tervezőt","Hívd meg a családtagokat"],"prerequisites":null,"default_creds":"","docs_url":"https://docs.tandoor.dev/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/accounts/login/","method":""}]}},"compose_path":"/opt/docker/stacks/tandoor/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745105758Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"termix","meta":{"display_name":"Termix","description":"Webes SSH és szerver menedzser","category":"dev","subdomain":"terminal","slug":"termix","catalog_since":"2026-07-12","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"terminal","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Webes SSH terminál - szerver hozzáférés a böngészőből","use_cases":["SSH hozzáférés a szerveredhez böngészőből","Nincs szükség SSH kliensre a számítógépen","Alapvető szerver menedzsment feladatok bárhonnan"],"first_steps":["Nyisd meg a terminal.DOMAIN címet a böngészőben","Csatlakozz a szerveredhez SSH-n keresztül"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/Termix-SSH/Termix"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":8080,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/termix/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745119273Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"traefik","meta":{"display_name":"Traefik","description":"","category":"tools","subdomain":"","slug":"traefik","resources":{"mem_request":"","mem_limit":"","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":null,"app_info":{"tagline":"","use_cases":null,"first_steps":null,"prerequisites":null,"default_creds":"","docs_url":""},"optional_config":null},"compose_path":"/opt/docker/stacks/traefik/docker-compose.yml","state":"running","deployed":false,"protected":true,"orphaned":false,"containers":[{"name":"traefik","image":"traefik:v3.6.7","state":"running","status":"Up 2 hours"}],"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745119444Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"uptime-kuma","meta":{"display_name":"Uptime Kuma","description":"Szolgáltatás és weboldal monitoring","category":"dashboard","subdomain":"status","slug":"uptime-kuma","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"status","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Szolgáltatás monitoring - értesítés ha valami nem működik","use_cases":["Weboldalak és szolgáltatások elérhetőségének figyelése","HTTP, TCP, DNS, ping és egyéb protokollok támogatása","Értesítések emailben, Telegramon, Discord-on, stb.","Nyilvános státusz oldal a felhasználóknak","Szép grafikonok a rendelkezésre állásról"],"first_steps":["Nyisd meg a status.DOMAIN címet a böngészőben","Hozd létre az admin fiókot az első megnyitáskor","Add hozzá az első monitort (pl. a saját weboldalad)","Állíts be értesítéseket (email, Telegram, stb.)","Opcionálisan: hozz létre egy nyilvános státusz oldalt"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/louislam/uptime-kuma/wiki"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3001,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/uptime-kuma/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745106119Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"vaultwarden","meta":{"display_name":"Vaultwarden","description":"Jelszókezelő (Bitwarden-kompatibilis)","category":"security","subdomain":"vault","slug":"vaultwarden","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"vault","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"ADMIN_TOKEN","label":"Admin panel token","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"Token az admin panel eléréséhez (https://vault.\u003cdomain\u003e/admin)","locked_after_deploy":true},{"env_var":"SIGNUPS_ALLOWED","label":"Regisztráció engedélyezése","type":"select","generate":"","default":"false","required":false,"placeholder":"","description":"Alapból lezárva: a család tagjait az admin panelen hívod meg (lásd Első lépések). Nyitott regisztrációval bárki fiókot nyithat, aki kitalálja a címet.","locked_after_deploy":false,"options":[{"value":"false","label":"Nem – csak meghívással (ajánlott)"},{"value":"true","label":"Igen – bárki regisztrálhat, aki ismeri a címet"}]}],"app_info":{"tagline":"Jelszókezelő - Bitwarden kompatibilis, a saját szerveren","use_cases":["Jelszavak biztonságos tárolása és automatikus kitöltése","Bitwarden kliensek teljes kompatibilitása (böngésző, mobil, asztali)","Jelszavak megosztása családtagokkal szervezeten belül","Kétfaktoros hitelesítés (TOTP) kódok tárolása","Biztonságos jegyzetek és bankkártya adatok tárolása"],"first_steps":["Nyisd meg a vault.DOMAIN/admin címet, és lépj be az admin panel tokenjével (Beállítások → Automatikusan generált értékek)","A „Users\" fülön az „Invite User\" mezőben hívd meg a saját és a családtagok e-mail címét — a regisztráció alapból le van zárva, csak meghívott cím nyithat fiókot","Nyisd meg a vault.DOMAIN címet, válaszd a „Create account\" lehetőséget a meghívott címmel, és adj meg erős mesterjelszót","Telepítsd a Bitwarden bővítményt a böngésződbe","Telepítsd a Bitwarden alkalmazást a telefonodra","Importáld a meglévő jelszavaidat (Chrome, Firefox, LastPass, stb.)"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/dani-garcia/vaultwarden/wiki"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":80,"path":"/alive","method":"GET","expect":{"status":200,"body_contains":""}}]},"smtp_mapping":{"host_var":"SMTP_HOST","port_var":"SMTP_PORT","security_var":"SMTP_SECURITY","security_value":"starttls","from_var":"SMTP_FROM","from_name_var":"SMTP_FROM_NAME","from_local":"vaultwarden","extra":{"SMTP_ACCEPT_INVALID_CERTS":"true","SMTP_ACCEPT_INVALID_HOSTNAMES":"true","_ENABLE_SMTP":"true"},"tls_mode":"","from_domain_var":""}},"compose_path":"/opt/docker/stacks/vaultwarden/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745118001Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"vikunja","meta":{"display_name":"Vikunja","description":"Feladatkezelő listák és táblák (Todoist/Trello alternatíva)","category":"productivity","subdomain":"tasks","slug":"vikunja","catalog_since":"2026-07-18","resources":{"mem_request":"50M","mem_limit":"256M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"tasks","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"VIKUNJA_SERVICE_JWTSECRET","label":"JWT titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Feladatkezelő - listák, Kanban táblák és Gantt diagramok","use_cases":["Feladatlisták és teendők kezelése","Kanban tábla nézet (Trello-szerű)","Gantt diagram projekt ütemezéshez","Megosztott listák és csapat együttműködés","Emlékeztetők, lejárati dátumok, címkék és prioritások"],"first_steps":["Nyisd meg a tasks.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Hozd létre az első projektet és feladatlistát","Próbáld ki a Kanban és Lista nézeteket","Hívd meg a családtagokat vagy kollégákat"],"prerequisites":null,"default_creds":"","docs_url":"https://vikunja.io/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3456,"path":"/api/v1/info","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/vikunja/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745106349Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"wanderer","meta":{"display_name":"Wanderer","description":"Túra tervező és nyomkövetéssel","category":"travel","subdomain":"hike","slug":"wanderer","catalog_since":"2026-07-21","resources":{"mem_request":"350M","mem_limit":"1024M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"hike","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SUBDOMAIN_DB","label":"Adatbázis aldomain","type":"subdomain","generate":"","default":"hike-db","required":true,"placeholder":"","description":"A PocketBase adatbázis aldomainje - a böngésző KÖZVETLENÜL ezt hívja, ezért saját nevet kap","locked_after_deploy":true},{"env_var":"MEILI_MASTER_KEY","label":"Keresőmotor kulcs","type":"secret","generate":"hex:16","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"POCKETBASE_ENCRYPTION_KEY","label":"Adatbázis titkosítási kulcs","type":"secret","generate":"hex:16","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Túra tervező - útvonalak, GPX nyomok és domborzati térképek","use_cases":["Túra útvonalak tervezése és mentése","GPX fájlok importálása és exportálása","Domborzati profilok és statisztikák","Fotók és jegyzetek hozzáadása az útvonalakhoz","Útvonalak megosztása másokkal"],"first_steps":["Nyisd meg a hike.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Importálj egy GPX fájlt vagy tervezz új útvonalat","Fedezd fel a térképes megjelenítést"],"prerequisites":null,"default_creds":"","docs_url":"https://wanderer.to/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/wanderer/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745119664Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"wishlist","meta":{"display_name":"Wishlist","description":"Családi kívánságlista megosztás","category":"home","subdomain":"wishes","slug":"wishlist","catalog_since":"2026-07-19","resources":{"mem_request":"30M","mem_limit":"128M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"wishes","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true}],"app_info":{"tagline":"Családi kívánságlista - karácsonyra, születésnapokra","use_cases":["Kívánságlisták létrehozása karácsonyra, születésnapokra","Családtagok meghívása saját listáik kezeléséhez","Ajándékok lefoglalása meglepetés nélkül","Árak és linkek hozzáadása az ajándékokhoz","Csoportos ajándékok szervezése"],"first_steps":["Nyisd meg a wishes.DOMAIN címet a böngészőben","Hozd létre a fiókodat","Hozd létre az első kívánságlistádat","Hívd meg a családtagokat"],"prerequisites":null,"default_creds":"","docs_url":"https://github.com/cmintey/wishlist"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":3000,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/wishlist/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745108433Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"zipline","meta":{"display_name":"Zipline","description":"ShareX/Flameshot szerver - screenshot és fájlmegosztás","category":"files","subdomain":"img","slug":"zipline","catalog_since":"2026-07-18","resources":{"mem_request":"100M","mem_limit":"512M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"img","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"CORE_SECRET","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true},{"env_var":"DB_PASSWORD","label":"Adatbázis jelszó","type":"secret","generate":"password:24","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Screenshot és fájlmegosztó szerver ShareX/Flameshot integrációval","use_cases":["Screenshotok automatikus feltöltése ShareX/Flameshot-ból","URL rövidítés és szöveg megosztás (paste)","Galéria nézet és album kezelés","API támogatás egyedi integrációkhoz","Felhasználói fiókok és meghívó rendszer"],"first_steps":["Nyisd meg az img.DOMAIN címet a böngészőben","Jelentkezz be: admin / zipline","Változtasd meg azonnal a jelszót","Konfiguráld a ShareX-et vagy Flameshot-ot az API URL-lel","Tölts fel egy screenshot-ot a teszteléshez"],"prerequisites":["ShareX (Windows) vagy Flameshot (Linux) ajánlott a screenshot feltöltéshez"],"default_creds":"admin / zipline","docs_url":"https://zipline.diced.sh/docs/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":3000,"path":"/api/health","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/zipline/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745119794Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"n8n","meta":{"display_name":"n8n","description":"Workflow automatizálás vizuális szerkesztővel","category":"productivity","subdomain":"auto","slug":"n8n","catalog_since":"2026-07-18","resources":{"mem_request":"512M","mem_limit":"1536M","pi_compatible":false,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"auto","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"N8N_ENCRYPTION_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:16","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Vizuális workflow automatizálás - Zapier/IFTTT alternatíva","use_cases":["Alkalmazások összekapcsolása vizuális workflow szerkesztővel","Automatizálás: email, Telegram, webhook, fájl feldolgozás","400+ integráció (Google, Slack, Notion, GitHub, stb.)","Időzített feladatok (cron) és webhook triggerek","AI munkafolyamatok LLM integrációval"],"first_steps":["Nyisd meg az auto.DOMAIN címet a böngészőben","Hozd létre az admin fiókot","Próbálj ki egy sablon workflow-t a Template galériából","Hozd létre az első saját munkafolyamatot"],"prerequisites":["x86 processzor szükséges"],"default_creds":"","docs_url":"https://docs.n8n.io/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"api","port":5678,"path":"/healthz","method":"GET","expect":{"status":200,"body_contains":""}}]}},"compose_path":"/opt/docker/stacks/n8n/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745105087Z","restarting_since":"0001-01-01T00:00:00Z"},{"name":"wger","meta":{"display_name":"wger","description":"Edzésnapló és fitnesz tervező","category":"home","subdomain":"fitness","slug":"wger","catalog_since":"2026-07-19","resources":{"mem_request":"100M","mem_limit":"384M","pi_compatible":true,"needs_hdd":false,"hungarian_ui":false},"deploy_fields":[{"env_var":"DOMAIN","label":"Domain","type":"domain","generate":"","default":"","required":true,"placeholder":"","description":"A szerver domain neve","locked_after_deploy":true},{"env_var":"SUBDOMAIN","label":"Aldomain","type":"subdomain","generate":"","default":"fitness","required":true,"placeholder":"","description":"Az alkalmazás aldomainje","locked_after_deploy":true},{"env_var":"SECRET_KEY","label":"Titkosítási kulcs","type":"secret","generate":"hex:32","default":"","required":false,"placeholder":"","description":"","locked_after_deploy":true}],"app_info":{"tagline":"Edzésnapló - edzéstervek, haladás követés és testsúly napló","use_cases":["Edzéstervek létrehozása és követése","Testsúly és testméretek nyilvántartása grafikonokkal","Gyakorlatok adatbázisa képekkel és leírásokkal","Kalória és tápanyag követés","API támogatás fitnesz alkalmazás integrációkhoz"],"first_steps":["Nyisd meg a fitness.DOMAIN címet a böngészőben","Jelentkezz be: admin / adminadmin","Változtasd meg azonnal a jelszót","Hozd létre az edzéstervedet","Kezdd el naplózni az edzéseidet"],"prerequisites":null,"default_creds":"admin / adminadmin","docs_url":"https://wger.readthedocs.io/"},"optional_config":null,"healthcheck":{"interval":"5m","checks":[{"type":"http","port":80,"path":"/","method":""}]}},"compose_path":"/opt/docker/stacks/wger/docker-compose.yml","state":"not_deployed","deployed":false,"protected":false,"orphaned":false,"containers":null,"deploying":false,"updating":false,"last_updated":"2026-09-16T17:50:08.745108323Z","restarting_since":"0001-01-01T00:00:00Z"}]} diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index 1cf4f9cf..16d4eccd 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -726,8 +726,8 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-541** | **[P3-LOW] There is no path to move a customer between off-site boxes, or from shared to dedicated.** Read from source 2026-09-16: provisioning is idempotent-reuse keyed on the customer (`shared already provisioned for tester-1 (subaccount 311327)`), and a dedicated deprovision destroys the repository — so "move this customer" has no safe route today. It becomes reachable the moment R-540's second pool box exists, or when a customer outgrows the shared model. **Needs:** a move that copies the repository, re-keys, and only then releases the old sub-account — a new mechanism nobody has measured. | **READY — rank P3-LOW; owner: CC (hub) — design first** | | **R-542** | **[P3-LOW] `/api/disks/candidates` offers a REGISTERED, in-use drive under „initialize".** MEASURED 2026-09-16 on the fresh box (controller 0.244.0): after `/dev/sdb` was formatted, mounted at `/mnt/felhom-drives/adatlemez` and registered as the default data drive, the endpoint still listed it under `initialize` (and again under `attach` with `already_mounted: null`). **Customer-invisible today:** the Meghajtók page filters correctly — its „Nem regisztrált meghajtók" section lists none, and the drive shows as „Adatlemez · Alapértelmezett · Aktív". So the defect is in the raw endpoint that feeds a FORMATTING flow, not in the page. **It also misleads a session:** I read „not mounted" off this endpoint and briefly filed a false finding against the product (corrected in `audits/evidence-backup-promise-2026-09-16/phaseE-freshbox.txt`). **Fix shape:** exclude paths the controller has registered from `initialize`, and set `already_mounted` from the real mount state rather than null. | **READY — rank P3-LOW; owner: CC (controller/agent)** | | **R-543** | **[P1-HIGH] Off-site ON by default is not off-site WORKING: on a fresh box tier 3 sits at „Kulcsletétre vár" until the household does the escrow ceremony, and nothing asks them to — while the tier-1 row now tells them their files are protected by that very copy.** MEASURED 2026-09-16 on the fresh box (controller 0.244.0, hub 0.116.0, off-site provisioned automatically by the new default): the app-backup page reads „3. mentés — Kulcsletétre vár · A távoli mentés a titkosítási kulcs letétbe helyezéséig szünetel", the remote page reads „Helyreállítási kód szükséges", and `POST /backup/offbox/run` returns 302 while producing no snapshot (the controller log shows only `offsite-credential-retry`, no restic activity). **Why it matters more than before today:** hub v0.116.0 makes off-site the default *because* a one-drive box otherwise keeps the household's files in no tier at all (R-537/R-538), and controller v0.244.0 now prints „Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi" under the tier-1 row. On day one both are true-in-intent and false-in-fact: the copy is paused. **Fix shape (one of):** prompt the escrow ceremony as part of first-run when off-site is enabled and un-escrowed; and/or make the tier-1 sentence state the tier's actual state („…védené — a távoli mentés a helyreállítási kód létrehozásáig szünetel"). The ceremony itself works and is customer-facing („Helyreállítási kód létrehozása"); what is missing is that anyone is told to do it. | **READY — rank P1-HIGH; owner: CC (controller copy + first-run prompt)** | -| **R-537** | **[P1-HIGH] The app-backup page labels the tier-1 backup „DB + Konfig + Adatok" and prints the app's data-drive size next to it — but the tier-1 unit contains NO drive-side app data at all.** MEASURED 2026-09-16 on the drill box (fresh install, controller 0.243.0, one drive, tier 2 and tier 3 both „Nincs beállítva"): five photos (3 000 000 B) were uploaded into Nextcloud through its own WebDAV interface, then the customer-visible „Mentés most" was pressed (`POST /api/backup/run` → 200, the unit grew 25 337 B → 978 MB). The resulting unit's `manifest.json` lists `db-dumps` + three **docker volume** dumps and nothing else; listing the 781 MB `nextcloud_nextcloud_html.tar` (29 346 entries, positive control `version.php` = 3 hits) gives **`Fotok` = 0 and `nyaralas` = 0**, and `./data/` is the empty bind-mount point. A `find` over the whole `backups/` tree for `*appdata*` / `*Fotok*` returns nothing. The page nevertheless renders „1. mentés … DB + Konfig + Adatok" and „Nextcloud Adatlemez 65.1 MB" — a size measured on exactly the data it does not copy (`internal/web/handlers.go:1176-1178`, `BackupContents`). **This is a truth defect, not a design defect:** `07-backup-architecture.md` §6.2 places nextcloud's file leg at **Tier 2 and Tier 3 only**, and its „[FACT] What the whole-guest tiers do NOT carry" says `mp8 /mnt/felhom-drives` is out of vzdump scope (confirmed live: „excluding bind mount point mp8 … (not a volume)"). So on a one-drive box with no off-site tier — the state every fresh install starts in — the household's files are in **no backup**, while the page says „Adatok". Same family as R-517/R-518. **Fix shape:** render tier-1 contents from the capture set actually written (`ComputeCaptureSet`), so a unit with no file leg reads „DB + Konfig" and the drive size is not shown beside it; and say on the page that the app's files need tier 2 or tier 3. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-f10.txt`. **CLOSED 2026-09-16 — controller v0.244.0, proven live.** The contents label is computed PER TIER from what that tier captures: Tier 1 says „Adatok" only when the app's data really is in the volumes the unit captured, and a class-A app carries one sentence saying where its files ARE protected. Proven on demo-hp through the page the customer opens: Paperless-ngx reads „1. mentés … DB + Konfig" with „Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi …", while its „2. mentés" row still reads „DB + Konfig + Adatok". Red-proof: restoring the old app-shaped label fails `TestAppBackupRows_Tier1LabelDoesNotClaimFilesItCannotHold`. | **CLOSED 2026-09-16 — controller v0.244.0 (proven live on demo-hp)** | -| **R-538** | **[P1-HIGH] A tier-1 app restore reports plain success and leaves Nextcloud listing files whose bytes were never in the backup — and it destroys the app's own trash, the customer's last copy.** MEASURED 2026-09-16 on the drill box, F10 („a child deletes the photo folder"): the five photos were deleted through Nextcloud (DELETE 204, PROPFIND 404), then restored through the page exactly as a customer would (`POST /backup/restore` `stack_name=nextcloud` `snapshot_id=helyi` → 302, finished in **35 s**, „A(z) nextcloud: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult."). Afterwards the folder is back and **lists all five photos**, and **none of them opens**: `GET nyaralas-1..5` = 404 / 503×4 with `Sabre\DAV\Exception\NotFound`, while the positive controls at the same moment pass (`status.php` 200, WebDAV PUT 201, GET 200). Cause: the replayed MariaDB dump (11:01:45Z) knows the photos, the bytes live on `mp8` and were never captured (R-537). **Worse:** the bytes were still on the drive in Nextcloud's own trash (`appdata/nextcloud/admin/files_trashbin/files/Fotok.d1789556707/nyaralas-1..5.jpg`, all five present) and the restored database no longer references them — the trash listing comes back **empty**, so „restore from trash", the one route that would have worked, is gone. The customer is left with five unopenable photos, a success message, and no warning. **Fix shape:** before replaying a database whose app has an uncaptured file leg, refuse or warn („ennek az alkalmazásnak a fájljai nincsenek ebben a mentésben — a visszaállítás után a fájlok hiányozni fognak"); and never present a DB-only restore of a class-A app as a complete one. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-f10.txt`. **CLOSED 2026-09-16 — controller v0.244.0, proven live.** A unit restore refuses before anything is touched when the unit cannot return the app's drive-side files, and names the route that can. Fired live on demo-hp: `POST /backup/restore` for paperless-ngx → 302 with „Ez a mentés nem tartalmazza az alkalmazás fájljait, ezért nem állítjuk vissza az adatbázist föléjük — a fájlok így a helyükön maradnak. A fájlok a távoli másolatból állíthatók vissza …", and the app read `running` before AND after, so nothing was stopped and no trash was made unreachable. The database-and-settings-only path exists as a separately worded second step. Red-proof: disabling the guard fails `TestUnitRestore_RefusesWhenTheUnitCannotHoldTheFiles`. | **CLOSED 2026-09-16 — controller v0.244.0 (proven live on demo-hp)** | +| **R-537** | **[P1-HIGH] The app-backup page labels the tier-1 backup „DB + Konfig + Adatok" and prints the app's data-drive size next to it — but the tier-1 unit contains NO drive-side app data at all.** MEASURED 2026-09-16 on the drill box (fresh install, controller 0.243.0, one drive, tier 2 and tier 3 both „Nincs beállítva"): five photos (3 000 000 B) were uploaded into Nextcloud through its own WebDAV interface, then the customer-visible „Mentés most" was pressed (`POST /api/backup/run` → 200, the unit grew 25 337 B → 978 MB). The resulting unit's `manifest.json` lists `db-dumps` + three **docker volume** dumps and nothing else; listing the 781 MB `nextcloud_nextcloud_html.tar` (29 346 entries, positive control `version.php` = 3 hits) gives **`Fotok` = 0 and `nyaralas` = 0**, and `./data/` is the empty bind-mount point. A `find` over the whole `backups/` tree for `*appdata*` / `*Fotok*` returns nothing. The page nevertheless renders „1. mentés … DB + Konfig + Adatok" and „Nextcloud Adatlemez 65.1 MB" — a size measured on exactly the data it does not copy (`internal/web/handlers.go:1176-1178`, `BackupContents`). **This is a truth defect, not a design defect:** `07-backup-architecture.md` §6.2 places nextcloud's file leg at **Tier 2 and Tier 3 only**, and its „[FACT] What the whole-guest tiers do NOT carry" says `mp8 /mnt/felhom-drives` is out of vzdump scope (confirmed live: „excluding bind mount point mp8 … (not a volume)"). So on a one-drive box with no off-site tier — the state every fresh install starts in — the household's files are in **no backup**, while the page says „Adatok". Same family as R-517/R-518. **Fix shape:** render tier-1 contents from the capture set actually written (`ComputeCaptureSet`), so a unit with no file leg reads „DB + Konfig" and the drive size is not shown beside it; and say on the page that the app's files need tier 2 or tier 3. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-f10.txt`. **CLOSED 2026-09-16 — controller v0.244.0, proven live.** The contents label is computed PER TIER from what that tier captures: Tier 1 says „Adatok" only when the app's data really is in the volumes the unit captured, and a class-A app carries one sentence saying where its files ARE protected. Proven on demo-hp through the page the customer opens: Paperless-ngx reads „1. mentés … DB + Konfig" with „Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi …", while its „2. mentés" row still reads „DB + Konfig + Adatok". Red-proof: restoring the old app-shaped label fails `TestAppBackupRows_Tier1LabelDoesNotClaimFilesItCannotHold`. **RE-PROVEN 2026-09-16 on a FRESH box** (installed from the built ISO 1.28.0, controller 0.244.0, off-site on by default): the Nextcloud row read „1. mentés … DB + Konfig" with the new sentence, „2. mentés … Nincs 2. (off-drive) másolat", „3. mentés Sikeres restic → …your-storagebox.de"; „DB + Konfig + Adatok" appeared ZERO times while the local unit held no file leg. | **CLOSED 2026-09-16 — controller v0.244.0 (proven live on demo-hp)** | +| **R-538** | **[P1-HIGH] A tier-1 app restore reports plain success and leaves Nextcloud listing files whose bytes were never in the backup — and it destroys the app's own trash, the customer's last copy.** MEASURED 2026-09-16 on the drill box, F10 („a child deletes the photo folder"): the five photos were deleted through Nextcloud (DELETE 204, PROPFIND 404), then restored through the page exactly as a customer would (`POST /backup/restore` `stack_name=nextcloud` `snapshot_id=helyi` → 302, finished in **35 s**, „A(z) nextcloud: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult."). Afterwards the folder is back and **lists all five photos**, and **none of them opens**: `GET nyaralas-1..5` = 404 / 503×4 with `Sabre\DAV\Exception\NotFound`, while the positive controls at the same moment pass (`status.php` 200, WebDAV PUT 201, GET 200). Cause: the replayed MariaDB dump (11:01:45Z) knows the photos, the bytes live on `mp8` and were never captured (R-537). **Worse:** the bytes were still on the drive in Nextcloud's own trash (`appdata/nextcloud/admin/files_trashbin/files/Fotok.d1789556707/nyaralas-1..5.jpg`, all five present) and the restored database no longer references them — the trash listing comes back **empty**, so „restore from trash", the one route that would have worked, is gone. The customer is left with five unopenable photos, a success message, and no warning. **Fix shape:** before replaying a database whose app has an uncaptured file leg, refuse or warn („ennek az alkalmazásnak a fájljai nincsenek ebben a mentésben — a visszaállítás után a fájlok hiányozni fognak"); and never present a DB-only restore of a class-A app as a complete one. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-f10.txt`. **CLOSED 2026-09-16 — controller v0.244.0, proven live.** A unit restore refuses before anything is touched when the unit cannot return the app's drive-side files, and names the route that can. Fired live on demo-hp: `POST /backup/restore` for paperless-ngx → 302 with „Ez a mentés nem tartalmazza az alkalmazás fájljait, ezért nem állítjuk vissza az adatbázist föléjük — a fájlok így a helyükön maradnak. A fájlok a távoli másolatból állíthatók vissza …", and the app read `running` before AND after, so nothing was stopped and no trash was made unreachable. The database-and-settings-only path exists as a separately worded second step. Red-proof: disabling the guard fails `TestUnitRestore_RefusesWhenTheUnitCannotHoldTheFiles`. **RE-PROVEN 2026-09-16 on a FRESH box, and this time the refusal had somewhere to point:** after five photos were deleted, `POST /backup/restore` was refused with „…a fájlok így a helyükön maradnak. A fájlok a távoli másolatból állíthatók vissza: … „Teljes visszaállítás (fájlok + adatbázis)"", the app read `running` before AND after, and the wastebasket was untouched. The off-site route then returned all five photos — 200 with the exact uploaded sizes and sha256 IDENTICAL to the originals, 5/5, with a negative control. Evidence: `audits/evidence-backup-promise-2026-09-16/phaseE-photos.txt`. | **CLOSED 2026-09-16 — controller v0.244.0 (proven live on demo-hp)** | | **R-525** | **[P3-LOW] FileBrowser has its own login; putting it behind the dashboard session (traefik forwardAuth or Quantum proxy auth) is a new mechanism nobody has measured.** Filed 2026-09-15 by the P1-fixes task (B.5). R-513 closed the default-password hole with a generated password; a household still has two logins. **What it needs:** a spike on a scratch guest — forwardAuth to the controller session, and what FileBrowser Quantum does with a trusted header. | **READY — rank P3-LOW; owner: CC (spike)** | | **R-526** | **[P3-LOW] A host delete cannot release only the customer's ep0 PBS token: the endpoint's one removal op destroys every backup group too.** MEASURED 2026-09-15 from source: `tenantsync.Deprovision` „DESTROYS the customer's PBS namespace, all its backup groups, and its token". The task asked for „PBS token elengedése" on host delete; building it needs a new token-only op in the ep0 tenantsync script — a new operation on a protected box. Not built. R-511's adopt path makes the kept token usable instead. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator (new ep0 op yes/no), CC (build)** | | **R-527** | **[P3-LOW] The catalog flag `locked_after_deploy` is read by no controller code — every setting is read-only after install whatever the catalog says.** FOUND 2026-09-15: `stacks/metadata.go` parses it; `grep -rn LockedAfterDeploy` finds no reader; `deploy.html` renders „Az alábbi beállítások csak olvashatók" for every field. Recorded as the design in `02-controller-module-map.md`; the flag is a seam never wired. **Fix shape:** remove the flag from the catalog, or wire an editable-after-install allow-list (a bigger change). | **READY — rank P3-LOW; owner: CC** |