From b5585534eb7cc644b0895e36c45fdf044734bde0 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 19 Mar 2026 15:30:08 +0000 Subject: [PATCH] feat: initial app template catalog with 16 apps Populate the appstore-apptemplates repo with catalog.json and per-app config files for all 16 curated Docker apps, each at v1.0.0. --- apps/adminer/app.json | 10 ++ apps/adminer/versions/1.0.0/config.json | 4 + apps/ghost/app.json | 10 ++ apps/ghost/versions/1.0.0/config.json | 18 +++ apps/gitea/app.json | 10 ++ apps/gitea/versions/1.0.0/config.json | 4 + apps/grafana/app.json | 10 ++ apps/grafana/versions/1.0.0/config.json | 10 ++ apps/mariadb/app.json | 10 ++ apps/mariadb/versions/1.0.0/config.json | 10 ++ apps/mattermost/app.json | 10 ++ apps/mattermost/versions/1.0.0/config.json | 4 + apps/n8n/app.json | 10 ++ apps/n8n/versions/1.0.0/config.json | 4 + apps/nextcloud/app.json | 10 ++ apps/nextcloud/versions/1.0.0/config.json | 4 + apps/nginx/app.json | 10 ++ apps/nginx/versions/1.0.0/config.json | 4 + apps/plausible/app.json | 10 ++ apps/plausible/versions/1.0.0/config.json | 7 + apps/portainer/app.json | 10 ++ apps/portainer/versions/1.0.0/config.json | 4 + apps/postgres/app.json | 10 ++ apps/postgres/versions/1.0.0/config.json | 18 +++ apps/redis/app.json | 10 ++ apps/redis/versions/1.0.0/config.json | 4 + apps/uptime-kuma/app.json | 10 ++ apps/uptime-kuma/versions/1.0.0/config.json | 4 + apps/vaultwarden/app.json | 10 ++ apps/vaultwarden/versions/1.0.0/config.json | 4 + apps/wordpress/app.json | 10 ++ apps/wordpress/versions/1.0.0/config.json | 22 +++ catalog.json | 150 ++++++++++++++++++++ 33 files changed, 435 insertions(+) create mode 100644 apps/adminer/app.json create mode 100644 apps/adminer/versions/1.0.0/config.json create mode 100644 apps/ghost/app.json create mode 100644 apps/ghost/versions/1.0.0/config.json create mode 100644 apps/gitea/app.json create mode 100644 apps/gitea/versions/1.0.0/config.json create mode 100644 apps/grafana/app.json create mode 100644 apps/grafana/versions/1.0.0/config.json create mode 100644 apps/mariadb/app.json create mode 100644 apps/mariadb/versions/1.0.0/config.json create mode 100644 apps/mattermost/app.json create mode 100644 apps/mattermost/versions/1.0.0/config.json create mode 100644 apps/n8n/app.json create mode 100644 apps/n8n/versions/1.0.0/config.json create mode 100644 apps/nextcloud/app.json create mode 100644 apps/nextcloud/versions/1.0.0/config.json create mode 100644 apps/nginx/app.json create mode 100644 apps/nginx/versions/1.0.0/config.json create mode 100644 apps/plausible/app.json create mode 100644 apps/plausible/versions/1.0.0/config.json create mode 100644 apps/portainer/app.json create mode 100644 apps/portainer/versions/1.0.0/config.json create mode 100644 apps/postgres/app.json create mode 100644 apps/postgres/versions/1.0.0/config.json create mode 100644 apps/redis/app.json create mode 100644 apps/redis/versions/1.0.0/config.json create mode 100644 apps/uptime-kuma/app.json create mode 100644 apps/uptime-kuma/versions/1.0.0/config.json create mode 100644 apps/vaultwarden/app.json create mode 100644 apps/vaultwarden/versions/1.0.0/config.json create mode 100644 apps/wordpress/app.json create mode 100644 apps/wordpress/versions/1.0.0/config.json create mode 100644 catalog.json diff --git a/apps/adminer/app.json b/apps/adminer/app.json new file mode 100644 index 0000000..1cd3470 --- /dev/null +++ b/apps/adminer/app.json @@ -0,0 +1,10 @@ +{ + "id": "adminer", + "name": "Adminer", + "description": "Lightweight database management tool with web interface", + "category": "Databases", + "iconName": "adminer", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/adminer/versions/1.0.0/config.json b/apps/adminer/versions/1.0.0/config.json new file mode 100644 index 0000000..d4f2f9e --- /dev/null +++ b/apps/adminer/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "adminer:latest", + "port": 8080 +} diff --git a/apps/ghost/app.json b/apps/ghost/app.json new file mode 100644 index 0000000..560ece4 --- /dev/null +++ b/apps/ghost/app.json @@ -0,0 +1,10 @@ +{ + "id": "ghost", + "name": "Ghost", + "description": "Professional publishing platform for blogs and newsletters", + "category": "CMS", + "iconName": "ghost", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/ghost/versions/1.0.0/config.json b/apps/ghost/versions/1.0.0/config.json new file mode 100644 index 0000000..e19ba38 --- /dev/null +++ b/apps/ghost/versions/1.0.0/config.json @@ -0,0 +1,18 @@ +{ + "image": "ghost:latest", + "port": 2368, + "envVars": [ + { + "name": "database__client", + "default": "sqlite3" + }, + { + "name": "database__connection__filename", + "default": "/var/lib/ghost/content/data/ghost.db" + }, + { + "name": "url", + "default": "http://localhost:2368" + } + ] +} diff --git a/apps/gitea/app.json b/apps/gitea/app.json new file mode 100644 index 0000000..38728f5 --- /dev/null +++ b/apps/gitea/app.json @@ -0,0 +1,10 @@ +{ + "id": "gitea", + "name": "Gitea", + "description": "Lightweight self-hosted Git service", + "category": "Development", + "iconName": "gitea", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/gitea/versions/1.0.0/config.json b/apps/gitea/versions/1.0.0/config.json new file mode 100644 index 0000000..9e6a38f --- /dev/null +++ b/apps/gitea/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "gitea/gitea:latest", + "port": 3000 +} diff --git a/apps/grafana/app.json b/apps/grafana/app.json new file mode 100644 index 0000000..e6f1d3c --- /dev/null +++ b/apps/grafana/app.json @@ -0,0 +1,10 @@ +{ + "id": "grafana", + "name": "Grafana", + "description": "Open-source analytics and monitoring platform", + "category": "Monitoring", + "iconName": "grafana", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/grafana/versions/1.0.0/config.json b/apps/grafana/versions/1.0.0/config.json new file mode 100644 index 0000000..e09d2a5 --- /dev/null +++ b/apps/grafana/versions/1.0.0/config.json @@ -0,0 +1,10 @@ +{ + "image": "grafana/grafana:latest", + "port": 3000, + "envVars": [ + { + "name": "GF_SECURITY_ADMIN_PASSWORD", + "default": "admin" + } + ] +} diff --git a/apps/mariadb/app.json b/apps/mariadb/app.json new file mode 100644 index 0000000..d0a417c --- /dev/null +++ b/apps/mariadb/app.json @@ -0,0 +1,10 @@ +{ + "id": "mariadb", + "name": "MariaDB", + "description": "Community-developed relational database forked from MySQL", + "category": "Databases", + "iconName": "mariadb", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/mariadb/versions/1.0.0/config.json b/apps/mariadb/versions/1.0.0/config.json new file mode 100644 index 0000000..943da2b --- /dev/null +++ b/apps/mariadb/versions/1.0.0/config.json @@ -0,0 +1,10 @@ +{ + "image": "mariadb:latest", + "port": 3306, + "envVars": [ + { + "name": "MARIADB_ROOT_PASSWORD", + "required": true + } + ] +} diff --git a/apps/mattermost/app.json b/apps/mattermost/app.json new file mode 100644 index 0000000..d2f0352 --- /dev/null +++ b/apps/mattermost/app.json @@ -0,0 +1,10 @@ +{ + "id": "mattermost", + "name": "Mattermost", + "description": "Open-source team messaging and collaboration platform", + "category": "Communication", + "iconName": "mattermost", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/mattermost/versions/1.0.0/config.json b/apps/mattermost/versions/1.0.0/config.json new file mode 100644 index 0000000..b7f550c --- /dev/null +++ b/apps/mattermost/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "mattermost/mattermost-team-edition:latest", + "port": 8065 +} diff --git a/apps/n8n/app.json b/apps/n8n/app.json new file mode 100644 index 0000000..d70b36d --- /dev/null +++ b/apps/n8n/app.json @@ -0,0 +1,10 @@ +{ + "id": "n8n", + "name": "n8n", + "description": "Workflow automation platform with visual editor", + "category": "Automation", + "iconName": "n8n", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/n8n/versions/1.0.0/config.json b/apps/n8n/versions/1.0.0/config.json new file mode 100644 index 0000000..09b85d4 --- /dev/null +++ b/apps/n8n/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "n8nio/n8n:latest", + "port": 5678 +} diff --git a/apps/nextcloud/app.json b/apps/nextcloud/app.json new file mode 100644 index 0000000..0cce027 --- /dev/null +++ b/apps/nextcloud/app.json @@ -0,0 +1,10 @@ +{ + "id": "nextcloud", + "name": "Nextcloud", + "description": "Self-hosted productivity and file sharing platform", + "category": "Cloud Storage", + "iconName": "nextcloud", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/nextcloud/versions/1.0.0/config.json b/apps/nextcloud/versions/1.0.0/config.json new file mode 100644 index 0000000..f652939 --- /dev/null +++ b/apps/nextcloud/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "nextcloud:latest", + "port": 80 +} diff --git a/apps/nginx/app.json b/apps/nginx/app.json new file mode 100644 index 0000000..ae71b37 --- /dev/null +++ b/apps/nginx/app.json @@ -0,0 +1,10 @@ +{ + "id": "nginx", + "name": "Nginx", + "description": "High-performance web server and reverse proxy", + "category": "Web Servers", + "iconName": "nginx", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/nginx/versions/1.0.0/config.json b/apps/nginx/versions/1.0.0/config.json new file mode 100644 index 0000000..cf57bd2 --- /dev/null +++ b/apps/nginx/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "nginx:alpine", + "port": 80 +} diff --git a/apps/plausible/app.json b/apps/plausible/app.json new file mode 100644 index 0000000..10a8a65 --- /dev/null +++ b/apps/plausible/app.json @@ -0,0 +1,10 @@ +{ + "id": "plausible", + "name": "Plausible", + "description": "Privacy-friendly web analytics platform", + "category": "Analytics", + "iconName": "plausible", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/plausible/versions/1.0.0/config.json b/apps/plausible/versions/1.0.0/config.json new file mode 100644 index 0000000..8d3ba70 --- /dev/null +++ b/apps/plausible/versions/1.0.0/config.json @@ -0,0 +1,7 @@ +{ + "image": "plausible/analytics:latest", + "port": 8000, + "platformRequirements": { + "clickhouse": true + } +} diff --git a/apps/portainer/app.json b/apps/portainer/app.json new file mode 100644 index 0000000..312aacc --- /dev/null +++ b/apps/portainer/app.json @@ -0,0 +1,10 @@ +{ + "id": "portainer", + "name": "Portainer", + "description": "Container management UI for Docker environments", + "category": "Infrastructure", + "iconName": "portainer", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/portainer/versions/1.0.0/config.json b/apps/portainer/versions/1.0.0/config.json new file mode 100644 index 0000000..32cbc55 --- /dev/null +++ b/apps/portainer/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "portainer/portainer-ce:latest", + "port": 9000 +} diff --git a/apps/postgres/app.json b/apps/postgres/app.json new file mode 100644 index 0000000..64f3fcf --- /dev/null +++ b/apps/postgres/app.json @@ -0,0 +1,10 @@ +{ + "id": "postgres", + "name": "PostgreSQL", + "description": "Advanced open-source relational database", + "category": "Databases", + "iconName": "postgres", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/postgres/versions/1.0.0/config.json b/apps/postgres/versions/1.0.0/config.json new file mode 100644 index 0000000..44045e8 --- /dev/null +++ b/apps/postgres/versions/1.0.0/config.json @@ -0,0 +1,18 @@ +{ + "image": "postgres:16-alpine", + "port": 5432, + "envVars": [ + { + "name": "POSTGRES_PASSWORD", + "required": true + }, + { + "name": "POSTGRES_USER", + "default": "postgres" + }, + { + "name": "POSTGRES_DB", + "default": "postgres" + } + ] +} diff --git a/apps/redis/app.json b/apps/redis/app.json new file mode 100644 index 0000000..2b54210 --- /dev/null +++ b/apps/redis/app.json @@ -0,0 +1,10 @@ +{ + "id": "redis", + "name": "Redis", + "description": "In-memory data store for caching and message brokering", + "category": "Databases", + "iconName": "redis", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/redis/versions/1.0.0/config.json b/apps/redis/versions/1.0.0/config.json new file mode 100644 index 0000000..5ccde15 --- /dev/null +++ b/apps/redis/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "redis:alpine", + "port": 6379 +} diff --git a/apps/uptime-kuma/app.json b/apps/uptime-kuma/app.json new file mode 100644 index 0000000..837250d --- /dev/null +++ b/apps/uptime-kuma/app.json @@ -0,0 +1,10 @@ +{ + "id": "uptime-kuma", + "name": "Uptime Kuma", + "description": "Self-hosted uptime monitoring tool", + "category": "Monitoring", + "iconName": "uptime-kuma", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/uptime-kuma/versions/1.0.0/config.json b/apps/uptime-kuma/versions/1.0.0/config.json new file mode 100644 index 0000000..77d4f87 --- /dev/null +++ b/apps/uptime-kuma/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "louislam/uptime-kuma:latest", + "port": 3001 +} diff --git a/apps/vaultwarden/app.json b/apps/vaultwarden/app.json new file mode 100644 index 0000000..dce141f --- /dev/null +++ b/apps/vaultwarden/app.json @@ -0,0 +1,10 @@ +{ + "id": "vaultwarden", + "name": "Vaultwarden", + "description": "Lightweight Bitwarden-compatible password manager server", + "category": "Security", + "iconName": "vaultwarden", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/vaultwarden/versions/1.0.0/config.json b/apps/vaultwarden/versions/1.0.0/config.json new file mode 100644 index 0000000..d635d7f --- /dev/null +++ b/apps/vaultwarden/versions/1.0.0/config.json @@ -0,0 +1,4 @@ +{ + "image": "vaultwarden/server:latest", + "port": 80 +} diff --git a/apps/wordpress/app.json b/apps/wordpress/app.json new file mode 100644 index 0000000..14ea69f --- /dev/null +++ b/apps/wordpress/app.json @@ -0,0 +1,10 @@ +{ + "id": "wordpress", + "name": "WordPress", + "description": "Popular open-source content management system", + "category": "CMS", + "iconName": "wordpress", + "latestVersion": "1.0.0", + "versions": ["1.0.0"], + "maintainer": "serve.zone" +} diff --git a/apps/wordpress/versions/1.0.0/config.json b/apps/wordpress/versions/1.0.0/config.json new file mode 100644 index 0000000..de29578 --- /dev/null +++ b/apps/wordpress/versions/1.0.0/config.json @@ -0,0 +1,22 @@ +{ + "image": "wordpress:latest", + "port": 80, + "envVars": [ + { + "name": "WORDPRESS_DB_HOST", + "required": true + }, + { + "name": "WORDPRESS_DB_USER", + "default": "wordpress" + }, + { + "name": "WORDPRESS_DB_PASSWORD", + "required": true + }, + { + "name": "WORDPRESS_DB_NAME", + "default": "wordpress" + } + ] +} diff --git a/catalog.json b/catalog.json new file mode 100644 index 0000000..67611de --- /dev/null +++ b/catalog.json @@ -0,0 +1,150 @@ +{ + "schemaVersion": 1, + "updatedAt": "2026-03-19T00:00:00Z", + "apps": [ + { + "id": "nginx", + "name": "Nginx", + "description": "High-performance web server and reverse proxy. Lightweight, fast, and battle-tested.", + "category": "Web Server", + "iconName": "globe", + "latestVersion": "1.0.0", + "tags": ["web", "proxy"] + }, + { + "id": "wordpress", + "name": "WordPress", + "description": "The world's most popular content management system. Powers over 40% of the web.", + "category": "CMS", + "iconName": "file-text", + "latestVersion": "1.0.0", + "tags": ["cms", "blog"] + }, + { + "id": "ghost", + "name": "Ghost", + "description": "Modern publishing platform for creating professional blogs and newsletters.", + "category": "CMS", + "iconName": "book-open", + "latestVersion": "1.0.0", + "tags": ["cms", "blog", "newsletter"] + }, + { + "id": "gitea", + "name": "Gitea", + "description": "Lightweight self-hosted Git service. Easy to install and maintain.", + "category": "Dev Tools", + "iconName": "git-branch", + "latestVersion": "1.0.0", + "tags": ["git", "devtools"] + }, + { + "id": "nextcloud", + "name": "Nextcloud", + "description": "Self-hosted file sync and share platform. Your own private cloud.", + "category": "Storage", + "iconName": "package", + "latestVersion": "1.0.0", + "tags": ["storage", "cloud"] + }, + { + "id": "grafana", + "name": "Grafana", + "description": "Open-source observability platform for metrics, logs, and traces visualization.", + "category": "Monitoring", + "iconName": "monitor", + "latestVersion": "1.0.0", + "tags": ["monitoring", "observability"] + }, + { + "id": "uptime-kuma", + "name": "Uptime Kuma", + "description": "Self-hosted monitoring tool. Beautiful UI for tracking uptime of services.", + "category": "Monitoring", + "iconName": "monitor", + "latestVersion": "1.0.0", + "tags": ["monitoring", "uptime"] + }, + { + "id": "plausible", + "name": "Plausible Analytics", + "description": "Privacy-friendly web analytics. No cookies, GDPR compliant by design.", + "category": "Analytics", + "iconName": "monitor", + "latestVersion": "1.0.0", + "tags": ["analytics"] + }, + { + "id": "vaultwarden", + "name": "Vaultwarden", + "description": "Lightweight Bitwarden-compatible password manager server.", + "category": "Security", + "iconName": "shield", + "latestVersion": "1.0.0", + "tags": ["security", "passwords"] + }, + { + "id": "n8n", + "name": "N8N", + "description": "Workflow automation tool. Connect anything to everything with a visual editor.", + "category": "Automation", + "iconName": "server", + "latestVersion": "1.0.0", + "tags": ["automation", "workflow"] + }, + { + "id": "mattermost", + "name": "Mattermost", + "description": "Open-source Slack alternative for team communication and collaboration.", + "category": "Communication", + "iconName": "mail", + "latestVersion": "1.0.0", + "tags": ["communication", "chat"] + }, + { + "id": "portainer", + "name": "Portainer", + "description": "Docker management UI. Monitor and manage containers from a web interface.", + "category": "Dev Tools", + "iconName": "package", + "latestVersion": "1.0.0", + "tags": ["docker", "devtools"] + }, + { + "id": "redis", + "name": "Redis", + "description": "In-memory data store used as database, cache, and message broker.", + "category": "Database", + "iconName": "database", + "latestVersion": "1.0.0", + "tags": ["database", "cache"] + }, + { + "id": "postgres", + "name": "PostgreSQL", + "description": "Advanced open-source relational database. Reliable and feature-rich.", + "category": "Database", + "iconName": "database", + "latestVersion": "1.0.0", + "tags": ["database", "sql"] + }, + { + "id": "mariadb", + "name": "MariaDB", + "description": "Community-developed fork of MySQL. Drop-in replacement with enhanced features.", + "category": "Database", + "iconName": "database", + "latestVersion": "1.0.0", + "tags": ["database", "sql", "mysql"] + }, + { + "id": "adminer", + "name": "Adminer", + "description": "Database management tool in a single PHP file. Supports MySQL, PostgreSQL, SQLite.", + "category": "Dev Tools", + "iconName": "database", + "latestVersion": "1.0.0", + "tags": ["database", "devtools"] + } + ] +}