feat: 228 apps — added Fediverse, mail servers, asset management, CalDAV, DIUN, Jenkins, Metabase, NocoDB, and more

This commit is contained in:
2026-08-04 00:34:16 +01:00
parent ffc9ccd77e
commit f972ee49cc

View File

@@ -1190,4 +1190,48 @@ export const apps = [
{ id: 'nitter', name: 'Nitter', category: 'privacy', description: 'Privacy-focused Twitter/X frontend', image: 'zedeus/nitter:latest', ports: [{ container: 8080, host: 8143, protocol: 'tcp' }], volumes: [], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/zedeus/nitter' },
{ id: 'libreddit', name: 'Redlib', category: 'privacy', description: 'Privacy-focused Reddit frontend', image: 'quay.io/redlib/redlib:latest', ports: [{ container: 8080, host: 8144, protocol: 'tcp' }], volumes: [], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/redlib-org/redlib' },
{ id: 'wg-easy', name: 'WG-Easy', category: 'networking', description: 'WireGuard VPN with simple web UI', image: 'ghcr.io/wg-easy/wg-easy:latest', ports: [{ container: 51820, host: 51821, protocol: 'udp' }, { container: 51821, host: 51822, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/wg-easy', container: '/etc/wireguard' }], env: { WG_HOST: 'your-server-ip', PASSWORD_HASH: 'changeme' }, capAdd: ['NET_ADMIN', 'SYS_MODULE'], healthcheck: null, api: null, links: {}, url: 'https://github.com/wg-easy/wg-easy' },
// --- BATCH 10: NEW ADDITIONS ---
{ id: 'pinchflat', name: 'Pinchflat', category: 'media', description: 'YouTube subscription downloader for your media server', image: 'ghcr.io/kieraneglin/pinchflat:latest', ports: [{ container: 8945, host: 8945, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/pinchflat', container: '/config' }, { host: '${MEDIA_PATH}/youtube', container: '/downloads' }], env: {}, healthcheck: 'curl -f http://localhost:8945 || exit 1', api: null, links: { consumesMedia: true }, url: 'https://github.com/kieraneglin/pinchflat' },
{ id: 'tautulli', name: 'Tautulli', category: 'media', description: 'Plex activity monitor & viewing stats', image: 'lscr.io/linuxserver/tautulli:latest', ports: [{ container: 8181, host: 8181, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/tautulli', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:8181 || exit 1', api: { port: 8181 }, links: {}, url: 'https://github.com/Tautulli/Tautulli' },
{ id: 'wizarr', name: 'Wizarr', category: 'media', description: 'Invite users to your Jellyfin/Plex server', image: 'ghcr.io/wizarrrr/wizarr:latest', ports: [{ container: 5690, host: 5690, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/wizarr', container: '/data/database' }], env: {}, healthcheck: 'curl -f http://localhost:5690 || exit 1', api: null, links: {}, url: 'https://github.com/Wizarrrr/wizarr' },
{ id: 'threadfin', name: 'Threadfin', category: 'media', description: 'IPTV proxy for Jellyfin/Plex live TV', image: 'fyb3roptik/threadfin:latest', ports: [{ container: 34400, host: 34400, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/threadfin', container: '/home/threadfin/conf' }], env: {}, healthcheck: 'curl -f http://localhost:34400 || exit 1', api: null, links: {}, url: 'https://github.com/Threadfin/Threadfin' },
{ id: 'onlyoffice', name: 'OnlyOffice', category: 'utilities', description: 'Self-hosted Google Docs/Sheets/Slides', image: 'onlyoffice/documentserver:latest', ports: [{ container: 80, host: 8145, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/onlyoffice', container: '/var/www/onlyoffice/Data' }], env: {}, healthcheck: 'curl -f http://localhost:80/healthcheck || exit 1', api: null, links: {}, url: 'https://github.com/ONLYOFFICE/DocumentServer' },
{ id: 'collabora', name: 'Collabora Online', category: 'utilities', description: 'LibreOffice in the browser (pairs with Nextcloud)', image: 'collabora/code:latest', ports: [{ container: 9980, host: 9980, protocol: 'tcp' }], volumes: [], env: { extra_params: '--o:ssl.enable=false' }, healthcheck: null, capAdd: ['MKNOD'], api: null, links: {}, url: 'https://github.com/CollaboraOnline/online' },
{ id: 'wekan', name: 'WeKan', category: 'utilities', description: 'Open-source Kanban board (lightweight Trello alternative)', image: 'ghcr.io/wekan/wekan:latest', ports: [{ container: 8080, host: 8146, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/wekan', container: '/data' }], env: { MONGO_URL: 'mongodb://mongodb:27017/wekan', ROOT_URL: 'http://localhost:8146' }, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/wekan/wekan' },
{ id: 'leantime', name: 'Leantime', category: 'utilities', description: 'Project management for non-project-managers', image: 'leantime/leantime:latest', ports: [{ container: 80, host: 8147, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/leantime', container: '/var/www/html/userfiles' }], env: { LEAN_DB_HOST: 'mariadb', LEAN_DB_DATABASE: 'leantime', LEAN_DB_USER: 'lean', LEAN_DB_PASSWORD: 'changeme' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/Leantime/leantime' },
{ id: 'mastodon', name: 'Mastodon', category: 'communication', description: 'Federated microblogging (Twitter/X alternative)', image: 'tootsuite/mastodon:latest', ports: [{ container: 3000, host: 3025, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/mastodon', container: '/mastodon/public/system' }], env: { LOCAL_DOMAIN: 'localhost', SECRET_KEY_BASE: 'changeme', OTP_SECRET: 'changeme' }, healthcheck: 'curl -f http://localhost:3000/health || exit 1', api: { port: 3025 }, links: {}, url: 'https://github.com/mastodon/mastodon' },
{ id: 'lemmy', name: 'Lemmy', category: 'communication', description: 'Federated Reddit alternative', image: 'dessalines/lemmy:latest', ports: [{ container: 8536, host: 8536, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/lemmy', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:8536 || exit 1', api: { port: 8536 }, links: {}, url: 'https://github.com/LemmyNet/lemmy' },
{ id: 'peertube', name: 'PeerTube', category: 'media', description: 'Federated video hosting (YouTube alternative)', image: 'chocobozzz/peertube:latest', ports: [{ container: 9000, host: 9009, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/peertube/data', container: '/data' }, { host: '${CONFIG_PATH}/peertube/config', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:9000 || exit 1', api: { port: 9009 }, links: {}, url: 'https://github.com/Chocobozzz/PeerTube' },
{ id: 'pixelfed', name: 'Pixelfed', category: 'communication', description: 'Federated Instagram alternative', image: 'zknt/pixelfed:latest', ports: [{ container: 80, host: 8148, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/pixelfed', container: '/var/www/storage' }], env: { APP_DOMAIN: 'localhost', DB_CONNECTION: 'sqlite' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/pixelfed/pixelfed' },
{ id: 'ghost', name: 'Ghost', category: 'communication', description: 'Newsletter & blog publishing platform', image: 'ghost:latest', ports: [{ container: 2368, host: 2368, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/ghost', container: '/var/lib/ghost/content' }], env: { url: 'http://localhost:2368' }, healthcheck: 'curl -f http://localhost:2368 || exit 1', api: { port: 2368 }, links: {}, url: 'https://github.com/TryGhost/Ghost' },
{ id: 'mailu', name: 'Mailu', category: 'communication', description: 'Full mail server (SMTP, IMAP, webmail, antispam)', image: 'ghcr.io/mailu/admin:latest', ports: [{ container: 80, host: 8149, protocol: 'tcp' }, { container: 25, host: 25, protocol: 'tcp' }, { container: 993, host: 993, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/mailu', container: '/mailu' }], env: { DOMAIN: 'example.com', SECRET_KEY: 'changeme' }, healthcheck: null, api: null, links: {}, url: 'https://github.com/Mailu/Mailu' },
{ id: 'stalwart', name: 'Stalwart Mail', category: 'communication', description: 'Modern all-in-one mail server (Rust)', image: 'stalwartlabs/mail-server:latest', ports: [{ container: 8080, host: 8150, protocol: 'tcp' }, { container: 25, host: 25, protocol: 'tcp' }, { container: 993, host: 993, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/stalwart', container: '/opt/stalwart-mail' }], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: { port: 8150 }, links: {}, url: 'https://github.com/stalwartlabs/mail-server' },
{ id: 'roundcube', name: 'Roundcube', category: 'communication', description: 'Webmail client', image: 'roundcube/roundcubemail:latest', ports: [{ container: 80, host: 8151, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/roundcube', container: '/var/roundcube/config' }], env: { ROUNDCUBEMAIL_DEFAULT_HOST: 'ssl://mail' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/roundcube/roundcubemail' },
{ id: 'kitchenowl', name: 'KitchenOwl', category: 'utilities', description: 'Grocery list & recipe manager with household sharing', image: 'tombursch/kitchenowl:latest', ports: [{ container: 8080, host: 8152, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/kitchenowl', container: '/data' }], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/TomBurworsch/kitchenowl' },
{ id: 'headscale', name: 'Headscale', category: 'networking', description: 'Self-hosted Tailscale coordination server', image: 'headscale/headscale:latest', ports: [{ container: 8080, host: 8153, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/headscale', container: '/etc/headscale' }], env: {}, healthcheck: 'curl -f http://localhost:8080/health || exit 1', api: { port: 8153 }, links: {}, url: 'https://github.com/juanfont/headscale' },
{ id: 'authentik', name: 'Authentik', category: 'security', description: 'Modern identity provider & SSO (Keycloak alternative)', image: 'ghcr.io/goauthentik/server:latest', ports: [{ container: 9000, host: 9010, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/authentik/media', container: '/media' }, { host: '${CONFIG_PATH}/authentik/templates', container: '/templates' }], env: { AUTHENTIK_SECRET_KEY: 'changeme', AUTHENTIK_REDIS__HOST: 'redis', AUTHENTIK_POSTGRESQL__HOST: 'postgres', AUTHENTIK_POSTGRESQL__PASSWORD: 'changeme' }, healthcheck: 'curl -f http://localhost:9000/-/health/ready/ || exit 1', api: { port: 9010 }, links: {}, url: 'https://github.com/goauthentik/authentik' },
{ id: 'nocodb', name: 'NocoDB', category: 'utilities', description: 'Airtable alternative — spreadsheet to database', image: 'nocodb/nocodb:latest', ports: [{ container: 8080, host: 8154, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/nocodb', container: '/usr/app/data' }], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: { port: 8154 }, links: {}, url: 'https://github.com/nocodb/nocodb' },
{ id: 'baserow', name: 'Baserow', category: 'utilities', description: 'No-code database platform (Airtable alternative)', image: 'baserow/baserow:latest', ports: [{ container: 80, host: 8155, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/baserow', container: '/baserow/data' }], env: { BASEROW_PUBLIC_URL: 'http://localhost:8155' }, healthcheck: 'curl -f http://localhost:80/api/_health/ || exit 1', api: { port: 8155 }, links: {}, url: 'https://github.com/bram2w/baserow' },
{ id: 'metabase', name: 'Metabase', category: 'utilities', description: 'Business intelligence & data dashboards', image: 'metabase/metabase:latest', ports: [{ container: 3000, host: 3026, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/metabase', container: '/metabase-data' }], env: { MB_DB_TYPE: 'h2' }, healthcheck: 'curl -f http://localhost:3000/api/health || exit 1', api: { port: 3026 }, links: {}, url: 'https://github.com/metabase/metabase' },
{ id: 'gramps-web', name: 'Gramps Web', category: 'utilities', description: 'Family tree & genealogy', image: 'ghcr.io/gramps-project/grampsweb:latest', ports: [{ container: 5000, host: 5008, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/gramps', container: '/app/data' }], env: { TREE: 'Family' }, healthcheck: 'curl -f http://localhost:5000 || exit 1', api: null, links: {}, url: 'https://github.com/gramps-project/gramps-web' },
{ id: 'wger', name: 'wger', category: 'utilities', description: 'Workout & fitness tracker', image: 'wger/server:latest', ports: [{ container: 80, host: 8156, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/wger', container: '/home/wger/data' }], env: {}, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/wger-project/wger' },
{ id: 'owntracks', name: 'OwnTracks Recorder', category: 'utilities', description: 'Self-hosted location tracking', image: 'owntracks/recorder:latest', ports: [{ container: 8083, host: 8157, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/owntracks', container: '/store' }], env: {}, healthcheck: 'curl -f http://localhost:8083 || exit 1', api: null, links: {}, url: 'https://github.com/owntracks/recorder' },
{ id: 'dawarich', name: 'Dawarich', category: 'utilities', description: 'Google Timeline alternative — self-hosted location history', image: 'freikin/dawarich:latest', ports: [{ container: 3000, host: 3027, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/dawarich', container: '/app/storage' }], env: { SECRET_KEY_BASE: 'changeme' }, healthcheck: 'curl -f http://localhost:3000 || exit 1', api: null, links: {}, url: 'https://github.com/Freika/dawarich' },
{ id: 'pangolin', name: 'Pangolin', category: 'networking', description: 'Self-hosted tunnel (Cloudflare Tunnel alternative)', image: 'fosrl/pangolin:latest', ports: [{ container: 8080, host: 8158, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/pangolin', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/fosrl/pangolin' },
{ id: 'cosmos', name: 'Cosmos Server', category: 'utilities', description: 'Self-hosted app platform with reverse proxy & auth', image: 'azukaar/cosmos-server:latest', ports: [{ container: 443, host: 4443, protocol: 'tcp' }, { container: 80, host: 8159, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/cosmos', container: '/config' }, { host: '/var/run/docker.sock', container: '/var/run/docker.sock' }], env: {}, healthcheck: null, api: null, links: {}, url: 'https://github.com/azukaar/Cosmos-Server' },
// --- BATCH 11: TOP 100 GAPS ---
{ id: 'wordpress', name: 'WordPress', category: 'communication', description: 'The world\'s most popular CMS & blogging platform', image: 'wordpress:latest', ports: [{ container: 80, host: 8160, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/wordpress', container: '/var/www/html' }], env: { WORDPRESS_DB_HOST: 'mariadb', WORDPRESS_DB_NAME: 'wordpress', WORDPRESS_DB_USER: 'wordpress', WORDPRESS_DB_PASSWORD: 'changeme' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/WordPress/WordPress' },
{ id: 'matomo', name: 'Matomo', category: 'monitoring', description: 'Privacy-focused web analytics (Google Analytics alternative)', image: 'matomo:latest', ports: [{ container: 80, host: 8161, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/matomo', container: '/var/www/html' }], env: { MATOMO_DATABASE_HOST: 'mariadb' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/matomo-org/matomo' },
{ id: 'docker-mailserver', name: 'Docker Mailserver', category: 'communication', description: 'Full-featured mail server (Postfix, Dovecot, antispam)', image: 'ghcr.io/docker-mailserver/docker-mailserver:latest', ports: [{ container: 25, host: 25, protocol: 'tcp' }, { container: 143, host: 143, protocol: 'tcp' }, { container: 993, host: 993, protocol: 'tcp' }, { container: 587, host: 587, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/mailserver/data', container: '/var/mail' }, { host: '${CONFIG_PATH}/mailserver/state', container: '/var/mail-state' }, { host: '${CONFIG_PATH}/mailserver/config', container: '/tmp/docker-mailserver' }], env: {}, capAdd: ['NET_ADMIN'], healthcheck: null, api: null, links: {}, url: 'https://github.com/docker-mailserver/docker-mailserver' },
{ id: 'seafile', name: 'Seafile', category: 'backups', description: 'File sync & share with versioning (Dropbox alternative)', image: 'seafileltd/seafile-mc:latest', ports: [{ container: 80, host: 8162, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/seafile', container: '/shared' }], env: { DB_HOST: 'mariadb', SEAFILE_ADMIN_EMAIL: 'admin@example.com', SEAFILE_ADMIN_PASSWORD: 'changeme' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/haiwen/seafile' },
{ id: 'meshcentral', name: 'MeshCentral', category: 'utilities', description: 'Remote device management (TeamViewer/AnyDesk alternative)', image: 'ghcr.io/ylianst/meshcentral:latest', ports: [{ container: 443, host: 4444, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/meshcentral/data', container: '/opt/meshcentral/meshcentral-data' }, { host: '${CONFIG_PATH}/meshcentral/files', container: '/opt/meshcentral/meshcentral-files' }], env: {}, healthcheck: null, api: null, links: {}, url: 'https://github.com/Ylianst/MeshCentral' },
{ id: 'snipe-it', name: 'Snipe-IT', category: 'utilities', description: 'IT asset management & tracking', image: 'snipe/snipe-it:latest', ports: [{ container: 80, host: 8163, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/snipeit', container: '/var/lib/snipeit' }], env: { APP_KEY: 'changeme', DB_HOST: 'mariadb', DB_DATABASE: 'snipeit', DB_USERNAME: 'snipeit', DB_PASSWORD: 'changeme' }, healthcheck: 'curl -f http://localhost:80 || exit 1', api: { port: 8163 }, links: {}, url: 'https://github.com/snipe/snipe-it' },
{ id: 'homebox', name: 'Homebox', category: 'utilities', description: 'Home inventory & organisation', image: 'ghcr.io/sysadminsmedia/homebox:latest', ports: [{ container: 7745, host: 7745, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/homebox', container: '/data' }], env: {}, healthcheck: 'curl -f http://localhost:7745 || exit 1', api: null, links: {}, url: 'https://github.com/sysadminsmedia/homebox' },
{ id: 'baikal', name: 'Baïkal', category: 'utilities', description: 'CalDAV/CardDAV server (calendar & contacts sync)', image: 'ckulka/baikal:latest', ports: [{ container: 80, host: 8164, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/baikal/config', container: '/var/www/baikal/config' }, { host: '${CONFIG_PATH}/baikal/data', container: '/var/www/baikal/Specific' }], env: {}, healthcheck: 'curl -f http://localhost:80 || exit 1', api: null, links: {}, url: 'https://github.com/sabre-io/Baikal' },
{ id: 'radicale', name: 'Radicale', category: 'utilities', description: 'Lightweight CalDAV/CardDAV server', image: 'tomsquest/docker-radicale:latest', ports: [{ container: 5232, host: 5232, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/radicale/data', container: '/data' }, { host: '${CONFIG_PATH}/radicale/config', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:5232 || exit 1', api: null, links: {}, url: 'https://github.com/Kozea/Radicale' },
{ id: 'diun', name: 'DIUN', category: 'monitoring', description: 'Docker Image Update Notifier — alerts when images have updates', image: 'crazymax/diun:latest', ports: [], volumes: [{ host: '${CONFIG_PATH}/diun', container: '/data' }, { host: '/var/run/docker.sock', container: '/var/run/docker.sock', readonly: true }], env: { DIUN_WATCH_SCHEDULE: '0 */6 * * *', DIUN_PROVIDERS_DOCKER: 'true' }, healthcheck: null, api: null, links: {}, url: 'https://github.com/crazy-max/diun' },
{ id: 'telegraf', name: 'Telegraf', category: 'monitoring', description: 'Metrics collection agent (feeds Grafana/InfluxDB)', image: 'telegraf:latest', ports: [], volumes: [{ host: '${CONFIG_PATH}/telegraf', container: '/etc/telegraf' }, { host: '/var/run/docker.sock', container: '/var/run/docker.sock', readonly: true }], env: {}, healthcheck: null, api: null, links: {}, url: 'https://github.com/influxdata/telegraf' },
{ id: 'jenkins', name: 'Jenkins', category: 'development', description: 'Automation server for CI/CD pipelines', image: 'jenkins/jenkins:lts', ports: [{ container: 8080, host: 8165, protocol: 'tcp' }, { container: 50000, host: 50000, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/jenkins', container: '/var/jenkins_home' }], env: {}, healthcheck: 'curl -f http://localhost:8080/login || exit 1', api: { port: 8165 }, links: {}, url: 'https://github.com/jenkinsci/jenkins' },
{ id: 'apprise', name: 'Apprise', category: 'notifications', description: 'Universal notification API — supports 100+ services', image: 'caronc/apprise:latest', ports: [{ container: 8000, host: 8166, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/apprise', container: '/config' }], env: {}, healthcheck: 'curl -f http://localhost:8000/status || exit 1', api: { port: 8166 }, links: { providesNotifications: true }, url: 'https://github.com/caronc/apprise-api' },
{ id: 'homer', name: 'Homer', category: 'dashboards', description: 'Dead-simple static start page from YAML config', image: 'b4bz/homer:latest', ports: [{ container: 8080, host: 8167, protocol: 'tcp' }], volumes: [{ host: '${CONFIG_PATH}/homer', container: '/www/assets' }], env: {}, healthcheck: 'curl -f http://localhost:8080 || exit 1', api: null, links: {}, url: 'https://github.com/bastienwirtz/homer' },
];