From d2f3a95d7ee3d221b8230b7d2bfdd3af2e794424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jainil=20Prajapati=20=F0=9F=AA=90?= <86187588+enough-jainil@users.noreply.github.com> Date: Mon, 21 Jul 2025 09:15:10 +0530 Subject: [PATCH] Add Kener entry to meta.json and improve JSON encoding in TemplateDialog (#229) * Add Kener entry to meta.json and improve JSON encoding in TemplateDialog - Introduced Kener, an open-source status page system, to meta.json with relevant links and tags. - Updated TemplateDialog to use encodeURIComponent for proper handling of Unicode characters in JSON encoding. - Removed unnecessary console log from TemplateGrid for cleaner code. * Update Kener logo in meta.json and remove old logo file - Changed the logo reference for Kener in meta.json from 'kener.png' to 'image.png'. - Deleted the outdated 'kener.png' file from the repository. * Add GitLab CE entry to meta.json - Introduced GitLab Community Edition with a detailed description, logo, and relevant links. - Updated tags for better categorization, including 'git', 'ci-cd', 'version-control', and 'project-management'. --- app/src/components/TemplateDialog.tsx | 4 ++- app/src/components/TemplateGrid.tsx | 1 - blueprints/kener/docker-compose.yml | 39 ++++++++++++++++++++++++++ blueprints/kener/image.png | Bin 0 -> 17321 bytes blueprints/kener/template.toml | 37 ++++++++++++++++++++++++ meta.json | 13 +++++++++ 6 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 blueprints/kener/docker-compose.yml create mode 100644 blueprints/kener/image.png create mode 100644 blueprints/kener/template.toml diff --git a/app/src/components/TemplateDialog.tsx b/app/src/components/TemplateDialog.tsx index 89e08933..b1e9b2f0 100644 --- a/app/src/components/TemplateDialog.tsx +++ b/app/src/components/TemplateDialog.tsx @@ -55,7 +55,9 @@ const TemplateDialog: React.FC = ({ config: templateFiles.config || "", }; - return btoa(JSON.stringify(configObj, null, 2)); + // Use encodeURIComponent to handle Unicode characters properly + const jsonString = JSON.stringify(configObj, null, 2); + return btoa(unescape(encodeURIComponent(jsonString))); }; return ( diff --git a/app/src/components/TemplateGrid.tsx b/app/src/components/TemplateGrid.tsx index 5269c6fb..8f51dd69 100644 --- a/app/src/components/TemplateGrid.tsx +++ b/app/src/components/TemplateGrid.tsx @@ -120,7 +120,6 @@ const TemplateGrid: React.FC = ({ view }) => { return matchesSearch && matchesTags; }); - console.log("ffiltered tem", filtered.length); setTemplatesCount(filtered.length); setFilteredTemplates(filtered); }, [searchQuery, selectedTags]); diff --git a/blueprints/kener/docker-compose.yml b/blueprints/kener/docker-compose.yml new file mode 100644 index 00000000..01f9a689 --- /dev/null +++ b/blueprints/kener/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.8" + +services: + kener: + image: rajnandan1/kener:latest + environment: + - TZ=${TZ} + - KENER_SECRET_KEY=${KENER_SECRET_KEY} # 🔐 API key / secret + - DATABASE_URL=${DATABASE_URL} + - KENER_BASE_PATH=${KENER_BASE_PATH} + - ORIGIN=${ORIGIN} + - RESEND_API_KEY=${RESEND_API_KEY} # 🔐 API key + - RESEND_SENDER_EMAIL=${RESEND_SENDER_EMAIL} + ports: + - 3000 + volumes: + - kener_db:/app/database + - ../files/uploads:/app/uploads + restart: unless-stopped + + postgres: + image: postgres:alpine + environment: + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # 🔐 DB password + - POSTGRES_DB=${POSTGRES_DB} + restart: unless-stopped + + mysql: + image: mariadb:11 + environment: + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} # 🔐 DB password + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_RANDOM_ROOT_PASSWORD=true + restart: unless-stopped + +volumes: + kener_db: {} diff --git a/blueprints/kener/image.png b/blueprints/kener/image.png new file mode 100644 index 0000000000000000000000000000000000000000..19b6230b6748f32594c5053e90f1424a1c19897f GIT binary patch literal 17321 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 literal 0 HcmV?d00001 diff --git a/blueprints/kener/template.toml b/blueprints/kener/template.toml new file mode 100644 index 00000000..916f987e --- /dev/null +++ b/blueprints/kener/template.toml @@ -0,0 +1,37 @@ +[variables] +main_domain = "${domain}" +KENER_SECRET_KEY = "${password:64}" +POSTGRES_PASSWORD = "${password:32}" +MYSQL_PASSWORD = "${password:32}" + +[config] +[[config.domains]] +serviceName = "kener" +port = 3000 +host = "${main_domain}" + +[config.env] +TZ = "Etc/UTC" +KENER_SECRET_KEY = "${KENER_SECRET_KEY}" # 🔐 API key / secret +DATABASE_URL = "sqlite://./database/kener.sqlite.db" +KENER_BASE_PATH = "" +ORIGIN = "http://localhost:3000" +RESEND_API_KEY = "" +RESEND_SENDER_EMAIL = "Accounts " +POSTGRES_USER = "user" +POSTGRES_DB = "kener_db" +MYSQL_USER = "user" +MYSQL_DATABASE = "kener_db" +MYSQL_RANDOM_ROOT_PASSWORD = "true" +MYSQL_PASSWORD = "${MYSQL_PASSWORD}" # 🔐 DB password +POSTGRES_PASSWORD = "${POSTGRES_PASSWORD}" # 🔐 DB password + +[[config.mounts]] +type = "volume" +source = "kener_db" +target = "/app/database" + +[[config.mounts]] +type = "bind" +source = "../files/uploads" +target = "/app/uploads" diff --git a/meta.json b/meta.json index adce1e24..b2da5a70 100644 --- a/meta.json +++ b/meta.json @@ -2571,6 +2571,19 @@ }, "tags": ["link-shortener", "link-sharing"] }, + { + "id": "kener", + "name": "Kener", + "version": "latest", + "description": "Kener is an open-source status page system for monitoring and alerting. It provides a modern interface for tracking service uptime and sending notifications.", + "logo": "image.png", + "links": { + "github": "https://github.com/rajnandan1/kener", + "website": "https://kener.ing/", + "docs": "https://kener.ing/docs/" + }, + "tags": ["monitoring", "status-page", "alerting", "self-hosted"] + }, { "id": "palmr", "name": "Palmr",