From 911dff3fe0fcded055568729419f298299e64c48 Mon Sep 17 00:00:00 2001 From: peskyadmin Date: Sun, 2 Aug 2026 19:26:16 -0400 Subject: [PATCH] feat: initial ts-CATALOG with deployment characteristics for 38 apps - Schema covers db type, architecture, port, first-run mode, test status - Vikunja marked verified (Aug 2, 2026) - 37 other apps categorized as untested with educated guesses - Notes field captures gotchas (e.g. Vikunja PUBLICURL, Immich multi-service) - Designed to be consumed by skill:ts-app-deploy --- README.md | 49 +++++- catalog.yaml | 487 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 535 insertions(+), 1 deletion(-) create mode 100644 catalog.yaml diff --git a/README.md b/README.md index 44713b5..415161a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,50 @@ # ts-CATALOG -DAM ts-* service catalog: deployment characteristics, port, database type, and test status for all 50+ self-hosted apps \ No newline at end of file +Canonical deployment catalog for all DAM `ts-*` self-hosted services. + +## Purpose + +The `ts-app-deploy` skill reads this catalog to make smart, per-app decisions +about Docker Compose configuration (which DB service to include, what port to +use, what env vars to set, etc.). + +## Files + +- `catalog.yaml` — structured catalog of every `ts-*` app +- `README.md` — this file + +## Schema + +Each app entry in `catalog.yaml` has: + +| Field | Purpose | +|------------------|-------------------------------------------------------------| +| `service` | lowercase repo name (e.g. `vikunja`) | +| `display_name` | human-readable name (e.g. `Vikunja`) | +| `image` | Docker image name | +| `image_tag` | pinned version (or `latest`) | +| `port` | primary web UI port | +| `db` | database type (none/sqlite/postgres/mysql/mariadb) | +| `architecture` | single/app_db/app_db_cache/multi_service | +| `first_run` | setup_wizard/auto/seeded/none | +| `test_status` | untested/in_progress/verified/broken | +| `test_date` | ISO date of last successful test (if any) | +| `repo` | Gitea URL | +| `notes` | deployment gotchas, quirks, workarounds | + +## Updating + +When you test a new service: + +1. Update the `test_status` field to `verified` +2. Update the `test_date` +3. Add any new gotchas to `notes` +4. Commit + push + +When a service breaks: + +1. Update the `test_status` field to `broken` +2. Document the issue in `notes` +3. Commit + push + +The skill will pick up these changes automatically. diff --git a/catalog.yaml b/catalog.yaml new file mode 100644 index 0000000..8941cd2 --- /dev/null +++ b/catalog.yaml @@ -0,0 +1,487 @@ +--- +# ts-CATALOG: canonical deployment characteristics for all DAM ts-* services. +# Read by skill:ts-app-deploy to make smart, per-app decisions about +# compose configuration (which DB service to include, what port to use, +# what env vars to set, etc.). + +schema_version: 1 + +# Allowed enum values for each categorization field. +# Keep these in sync if you add new categories. +enums: + db: + - none + - sqlite + - postgres + - mysql + - mariadb + architecture: + - single + - app_db + - app_db_cache + - multi_service + first_run: + - setup_wizard + - auto + - seeded + - none + test_status: + - untested + - in_progress + - verified + - broken + +apps: + # ============================================================ + # VERIFIED (end-to-end tested on the Mac mini) + # ============================================================ + + - service: vikunja + display_name: Vikunja + image: vikunja/vikunja + image_tag: "0.24" + port: 3456 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: verified + test_date: 2026-08-02 + repo: https://gitea.damconsulting.llc/dam/ts-vikunja + notes: | + - PUBLICURL/FRONTENDURL must match access URL or 404 on root. + - DB host must be 127.0.0.1 (not "db") due to network_mode namespace sharing. + - DB password and JWT secret required. + - When using Headscale, hardcode the hostname in serve.headscale.json. + + # ============================================================ + # CATEGORIZED (educated guess from known docs/patterns). + # Marked "untested" until verified on the Mac mini. + # ============================================================ + + - service: adguard + display_name: AdGuard Home + image: adguard/adguardhome + image_tag: latest + port: 3000 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-adguard + + - service: appflowy + display_name: AppFlowy + image: appflowyio/appflowy_cloud + image_tag: latest + port: 8000 + db: postgres + architecture: multi_service + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-appflowy + notes: | + Has its own appflowy_server + gotrue components. Consider single postgres. + + - service: authentik + display_name: Authentik + image: ghcr.io/goauthentik/server + image_tag: latest + port: 9000 + db: postgres + architecture: app_db_cache + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-authentik + notes: | + Needs Redis in addition to Postgres. Check for worker/redis services. + + - service: babybuddy + display_name: Baby Buddy + image: linuxserver/babybuddy + image_tag: latest + port: 8000 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-babybuddy + + - service: bookstack + display_name: BookStack + image: linuxserver/bookstack + image_tag: latest + port: 80 + db: mariadb + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-bookstack + + - service: calibre-web + display_name: Calibre-Web + image: linuxserver/calibre-web + image_tag: latest + port: 8083 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-calibre-web + notes: | + Expects an existing Calibre library mounted as a volume. + + - service: focalboard + display_name: Focalboard + image: mattermost/focalboard + image_tag: latest + port: 8000 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-focalboard + + - service: freshrss + display_name: FreshRSS + image: linuxserver/freshrss + image_tag: latest + port: 80 + db: sqlite + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-freshrss + + - service: gitea + display_name: Gitea + image: gitea/gitea + image_tag: latest + port: 3000 + db: postgres + architecture: app_db + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-gitea + + - service: grafana + display_name: Grafana + image: grafana/grafana + image_tag: latest + port: 3000 + db: sqlite + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-grafana + + - service: harbor + display_name: Harbor + image: goharbor/harbor-core + image_tag: latest + port: 8080 + db: postgres + architecture: app_db_cache + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-harbor + notes: | + Complex multi-service app. Likely needs separate chart or compose fragment. + + - service: home-assistant + display_name: Home Assistant + image: homeassistant/home-assistant + image_tag: latest + port: 8123 + db: none + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-home-assistant + + - service: homepage + display_name: Homepage + image: ghcr.io/gethomepage/homepage + image_tag: latest + port: 3000 + db: none + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-homepage + + - service: immich + display_name: Immich + image: ghcr.io/immich-app/immich-server + image_tag: release + port: 2283 + db: postgres + architecture: multi_service + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-immich + notes: | + Heavy: needs postgres + redis + machine-learning service + large media volume. + + - service: invoiceplane + display_name: InvoicePlane + image: invoiceplane/invoiceplane + image_tag: latest + port: 80 + db: mysql + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-invoiceplane + + - service: jellyfin + display_name: Jellyfin + image: jellyfin/jellyfin + image_tag: latest + port: 8096 + db: none + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-jellyfin + notes: | + Optionally benefits from GPU passthrough for hardware transcoding. + + - service: kavita + display_name: Kavita + image: kiza19/kavita + image_tag: latest + port: 5000 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-kavita + + - service: lidarr + display_name: Lidarr + image: hotio/lidarr + image_tag: latest + port: 8686 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-lidarr + + - service: linkwarden + display_name: Linkwarden + image: ghcr.io/linkwarden/linkwarden + image_tag: latest + port: 3000 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-linkwarden + + - service: mealie + display_name: Mealie + image: ghcr.io/mealie-recipes/mealie + image_tag: latest + port: 9000 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-mealie + + - service: netdata + display_name: Netdata + image: netdata/netdata + image_tag: latest + port: 19999 + db: none + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-netdata + + - service: nextcloud-all-in-one + display_name: Nextcloud AIO + image: nextcloud/all-in-one + image_tag: latest + port: 11000 + db: mariadb + architecture: multi_service + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-nextcloud-all-in-one + notes: | + AIO manages its own DB internally. Be careful exposing ports. + + - service: node-red + display_name: Node-RED + image: nodered/node-red + image_tag: latest + port: 1880 + db: sqlite + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-node-red + + - service: overseerr + display_name: Overseerr + image: hotio/overseerr + image_tag: latest + port: 5055 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-overseerr + + - service: paperless-ngx + display_name: Paperless-ngx + image: ghcr.io/paperless-ngx/paperless-ngx + image_tag: latest + port: 8000 + db: postgres + architecture: multi_service + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-paperless-ngx + notes: | + Needs Postgres + Redis broker (Celery). Heavy document storage. + + - service: photoprism + display_name: Photoprism + image: photoprism/photoprism + image_tag: latest + port: 2342 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-photoprism + + - service: prowlarr + display_name: Prowlarr + image: hotio/prowlarr + image_tag: latest + port: 9696 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-prowlarr + + - service: radarr + display_name: Radarr + image: hotio/radarr + image_tag: latest + port: 7878 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-radarr + + - service: searchxng + display_name: SearXNG + image: searxng/searxng + image_tag: latest + port: 8080 + db: none + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-searchxng + + - service: shiori + display_name: Shiori + image: ghcr.io/go-shiori/shiori + image_tag: latest + port: 8080 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-shiori + + - service: sonarr + display_name: Sonarr + image: hotio/sonarr + image_tag: latest + port: 8989 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-sonarr + + - service: stirling-pdf + display_name: Stirling PDF + image: stirlingtools/stirling-pdf + image_tag: latest + port: 8080 + db: none + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-stirling-pdf + + - service: tautulli + display_name: Tautulli + image: hotio/tautulli + image_tag: latest + port: 8181 + db: sqlite + architecture: single + first_run: auto + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-tautulli + + - service: trilium-notes + display_name: Trilium Notes + image: zadam/trilium + image_tag: latest + port: 8080 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-trilium-notes + + - service: uptime-kuma + display_name: Uptime Kuma + image: louislam/uptime-kuma + image_tag: "1" + port: 3001 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-uptime-kuma + notes: | + Single container, SQLite-backed. No external DB needed. + Drop the db service entirely. + + - service: vaultwarden + display_name: Vaultwarden + image: vaultwarden/server + image_tag: latest + port: 80 + db: sqlite + architecture: single + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-vaultwarden + notes: | + WebSocket support required for live notifications. Use a single container. + + - service: woodpecker + display_name: Woodpecker CI + image: woodpeckerci/woodpecker-server + image_tag: latest + port: 8000 + db: postgres + architecture: app_db + first_run: setup_wizard + test_status: untested + repo: https://gitea.damconsulting.llc/dam/ts-woodpecker