From c8f1df53ac11250da817aa9f353422c8fcb75c4b Mon Sep 17 00:00:00 2001 From: Rakshith Suvarna Date: Sun, 9 Aug 2026 17:16:35 +0530 Subject: [PATCH] feat(apps): add Shoutrrr to one-click app catalog --- apps/dashboard/public/app-logos/shoutrrr.png | Bin 0 -> 18141 bytes apps/dashboard/src/components/AppLogo.tsx | 1 + packages/core/src/apps/catalog.json | 124 +++++++++++++++++++ packages/core/src/apps/catalog/shoutrrr.json | 124 +++++++++++++++++++ 4 files changed, 249 insertions(+) create mode 100644 apps/dashboard/public/app-logos/shoutrrr.png create mode 100644 packages/core/src/apps/catalog/shoutrrr.json diff --git a/apps/dashboard/public/app-logos/shoutrrr.png b/apps/dashboard/public/app-logos/shoutrrr.png new file mode 100644 index 0000000000000000000000000000000000000000..8e423321caab3a2879d62b9bd48faa4b21dffc1d GIT binary patch literal 18141 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/src/components/AppLogo.tsx b/apps/dashboard/src/components/AppLogo.tsx index 13ed76eba..538053c58 100644 --- a/apps/dashboard/src/components/AppLogo.tsx +++ b/apps/dashboard/src/components/AppLogo.tsx @@ -45,6 +45,7 @@ export const APP_LOGO: Record< // Buzz (block/buzz) — vendored bee mark (its own favicon, OS-recolor stripped). // Monochrome near-black, so darkInvert flips it to light on the dark themes. buzz: { slug: undefined, src: "/app-logos/buzz.svg", darkInvert: true }, + shoutrrr: { src: "/app-logos/shoutrrr.png" }, // code-server / IT-Tools / Stirling-PDF have no reliable simpleicons mark → // they fall back to the monochrome Boxes glyph. // openship-native mail stack — its own brand mark, a full-bleed square icon. diff --git a/packages/core/src/apps/catalog.json b/packages/core/src/apps/catalog.json index f71348b63..4d7149283 100644 --- a/packages/core/src/apps/catalog.json +++ b/packages/core/src/apps/catalog.json @@ -1829,6 +1829,130 @@ } ] } + }, + { + "$schema": "https://openship.io/app.schema.json", + "available": false, + "id": "shoutrrr", + "name": "Shoutrrr", + "description": "Open-source social media scheduling and publishing platform (Buffer & Hootsuite alternative).", + "kind": "template", + "logo": "shoutrrr", + "category": "automation", + "tags": [ + "social-media", + "scheduling", + "publishing", + "marketing", + "automation" + ], + "framework": "docker-compose", + "repository": "https://github.com/coollabsio/shoutrrr", + "services": [ + { + "name": "shoutrrr", + "image": "ghcr.io/coollabsio/shoutrrr:latest", + "ports": [ + "8080:8080" + ], + "exposedPort": 8080, + "exposed": true, + "environment": { + "APP_ENV": "production", + "APP_DEBUG": "false", + "APP_URL": "{{publicUrl:shoutrrr}}", + "OCTANE_SERVER": "frankenphp", + "OCTANE_HTTPS": "true", + "TRUSTED_PROXIES": "*", + "SESSION_SECURE_COOKIE": "true", + "DB_CONNECTION": "sqlite", + "DB_DATABASE": "/var/www/html/database/sqlite/database.sqlite", + "CACHE_STORE": "database", + "QUEUE_CONNECTION": "database", + "SESSION_DRIVER": "database", + "QUEUE_WORKER_ENABLED": "true", + "QUEUE_WORKER_COUNT": "1", + "SCHEDULER_ENABLED": "true", + "SOCIALITE_ENABLED": "false" + }, + "secretEnv": [ + "APP_KEY" + ], + "volumes": [ + "shoutrrr_storage:/var/www/html/storage", + "shoutrrr_sqlite:/var/www/html/database/sqlite" + ], + "restart": "unless-stopped" + } + ], + "configFields": [ + { + "key": "APP_KEY", + "service": "shoutrrr", + "label": "Application key", + "help": "Auto-generated encryption key for sessions, tokens, and encrypted credentials.", + "generate": "secret", + "secret": true + } + ], + "management": { + "kind": "schema" + }, + "settings": [ + { + "id": "general", + "label": "General", + "fields": [ + { + "key": "APP_NAME", + "service": "shoutrrr", + "label": "Application Name", + "type": "text", + "default": "Shoutrrr", + "placeholder": "Shoutrrr" + }, + { + "key": "QUEUE_WORKER_COUNT", + "service": "shoutrrr", + "label": "Queue Workers", + "type": "number", + "default": "1", + "integer": true, + "min": 1, + "advanced": true + }, + { + "key": "INERTIA_SSR_ENABLED", + "service": "shoutrrr", + "label": "Enable SSR (Server-Side Rendering)", + "type": "boolean", + "default": "false", + "advanced": true + }, + { + "key": "SOCIALITE_ENABLED", + "service": "shoutrrr", + "label": "Enable OAuth Social Login", + "type": "boolean", + "default": "false", + "advanced": true + } + ] + } + ], + "connection": { + "title": "Connect to Shoutrrr", + "description": "Open the web interface to complete onboarding and manage social channels.", + "outputs": [ + { + "id": "url", + "label": "Application URL", + "source": "publicUrl:shoutrrr", + "kind": "url", + "help": "Open the Shoutrrr web dashboard in your browser." + } + ] + } } ] } diff --git a/packages/core/src/apps/catalog/shoutrrr.json b/packages/core/src/apps/catalog/shoutrrr.json new file mode 100644 index 000000000..09d3535a8 --- /dev/null +++ b/packages/core/src/apps/catalog/shoutrrr.json @@ -0,0 +1,124 @@ +{ + "$schema": "https://openship.io/app.schema.json", + "available": false, + "id": "shoutrrr", + "name": "Shoutrrr", + "description": "Open-source social media scheduling and publishing platform (Buffer & Hootsuite alternative).", + "kind": "template", + "logo": "shoutrrr", + "category": "automation", + "tags": [ + "social-media", + "scheduling", + "publishing", + "marketing", + "automation" + ], + "framework": "docker-compose", + "repository": "https://github.com/coollabsio/shoutrrr", + "services": [ + { + "name": "shoutrrr", + "image": "ghcr.io/coollabsio/shoutrrr:latest", + "ports": [ + "8080:8080" + ], + "exposedPort": 8080, + "exposed": true, + "environment": { + "APP_ENV": "production", + "APP_DEBUG": "false", + "APP_URL": "{{publicUrl:shoutrrr}}", + "OCTANE_SERVER": "frankenphp", + "OCTANE_HTTPS": "true", + "TRUSTED_PROXIES": "*", + "SESSION_SECURE_COOKIE": "true", + "DB_CONNECTION": "sqlite", + "DB_DATABASE": "/var/www/html/database/sqlite/database.sqlite", + "CACHE_STORE": "database", + "QUEUE_CONNECTION": "database", + "SESSION_DRIVER": "database", + "QUEUE_WORKER_ENABLED": "true", + "QUEUE_WORKER_COUNT": "1", + "SCHEDULER_ENABLED": "true", + "SOCIALITE_ENABLED": "false" + }, + "secretEnv": [ + "APP_KEY" + ], + "volumes": [ + "shoutrrr_storage:/var/www/html/storage", + "shoutrrr_sqlite:/var/www/html/database/sqlite" + ], + "restart": "unless-stopped" + } + ], + "configFields": [ + { + "key": "APP_KEY", + "service": "shoutrrr", + "label": "Application key", + "help": "Auto-generated encryption key for sessions, tokens, and encrypted credentials.", + "generate": "secret", + "secret": true + } + ], + "management": { + "kind": "schema" + }, + "settings": [ + { + "id": "general", + "label": "General", + "fields": [ + { + "key": "APP_NAME", + "service": "shoutrrr", + "label": "Application Name", + "type": "text", + "default": "Shoutrrr", + "placeholder": "Shoutrrr" + }, + { + "key": "QUEUE_WORKER_COUNT", + "service": "shoutrrr", + "label": "Queue Workers", + "type": "number", + "default": "1", + "integer": true, + "min": 1, + "advanced": true + }, + { + "key": "INERTIA_SSR_ENABLED", + "service": "shoutrrr", + "label": "Enable SSR (Server-Side Rendering)", + "type": "boolean", + "default": "false", + "advanced": true + }, + { + "key": "SOCIALITE_ENABLED", + "service": "shoutrrr", + "label": "Enable OAuth Social Login", + "type": "boolean", + "default": "false", + "advanced": true + } + ] + } + ], + "connection": { + "title": "Connect to Shoutrrr", + "description": "Open the web interface to complete onboarding and manage social channels.", + "outputs": [ + { + "id": "url", + "label": "Application URL", + "source": "publicUrl:shoutrrr", + "kind": "url", + "help": "Open the Shoutrrr web dashboard in your browser." + } + ] + } +}