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
|
||||
|
||||
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