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
This commit is contained in:
49
README.md
49
README.md
@@ -1,3 +1,50 @@
|
|||||||
# ts-CATALOG
|
# ts-CATALOG
|
||||||
|
|
||||||
DAM ts-* service catalog: deployment characteristics, port, database type, and test status for all 50+ self-hosted apps
|
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.
|
||||||
|
|||||||
487
catalog.yaml
Normal file
487
catalog.yaml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user