From 201e76a2d86b194aeada948179c574c1f7ca114d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ekrem=20S=C3=B6nmezer?= Date: Thu, 15 Jan 2026 15:06:53 +0300 Subject: [PATCH] feat: add LinknLink template with Docker Compose and metadata - Introduced LinknLink, a link management application, with a comprehensive Docker Compose setup for both backend and frontend services. - Added metadata in meta.json including description, logo, and relevant links. - Created template.toml for environment variable configuration and service deployment. --- blueprints/linknlink/docker-compose.yml | 42 +++++++++++++++++++++++++ blueprints/linknlink/linknlink.svg | 4 +++ blueprints/linknlink/template.toml | 24 ++++++++++++++ meta.json | 18 +++++++++++ 4 files changed, 88 insertions(+) create mode 100644 blueprints/linknlink/docker-compose.yml create mode 100644 blueprints/linknlink/linknlink.svg create mode 100644 blueprints/linknlink/template.toml diff --git a/blueprints/linknlink/docker-compose.yml b/blueprints/linknlink/docker-compose.yml new file mode 100644 index 00000000..052d9a5f --- /dev/null +++ b/blueprints/linknlink/docker-compose.yml @@ -0,0 +1,42 @@ +version: "3.8" + +services: + backend: + image: ghcr.io/sonmezerekrem/linknlink/backend:latest + restart: unless-stopped + volumes: + - backend_data:/app/pb_data + working_dir: /app + environment: + - POCKETBASE_DOMAIN=${POCKETBASE_DOMAIN} + - POCKETBASE_ADMIN_EMAIL=${POCKETBASE_ADMIN_EMAIL} + - POCKETBASE_ADMIN_PASSWORD=${POCKETBASE_ADMIN_PASSWORD} + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8090/api/health"] + interval: 10s + timeout: 5s + retries: 5 + expose: + - "8090" + + frontend: + image: ghcr.io/sonmezerekrem/linknlink/frontend:latest + restart: unless-stopped + environment: + - NODE_ENV=production + - NODE_OPTIONS=--max-old-space-size=256 + - POCKETBASE_URL=${POCKETBASE_URL} + - NEXT_PUBLIC_POCKETBASE_URL=${NEXT_PUBLIC_POCKETBASE_URL} + deploy: + resources: + limits: + memory: 512M + reservations: + memory: 256M + depends_on: + - backend + expose: + - "3000" + +volumes: + backend_data: diff --git a/blueprints/linknlink/linknlink.svg b/blueprints/linknlink/linknlink.svg new file mode 100644 index 00000000..9d68838e --- /dev/null +++ b/blueprints/linknlink/linknlink.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/blueprints/linknlink/template.toml b/blueprints/linknlink/template.toml new file mode 100644 index 00000000..957e3b59 --- /dev/null +++ b/blueprints/linknlink/template.toml @@ -0,0 +1,24 @@ +[variables] +main_domain = "${domain}" +frontend_domain = "${main_domain}" +pocketbase_domain = "http://${main_domain}" +pocketbase_admin_email = "${email}" +pocketbase_admin_password = "${password:32}" +pocketbase_url = "http://backend:8090" +next_public_pocketbase_url = "http://backend:8090" + +[config] +[[config.domains]] +serviceName = "frontend" +port = 3000 +host = "${frontend_domain}" + +env = [ + "POCKETBASE_DOMAIN=${pocketbase_domain}", + "POCKETBASE_ADMIN_EMAIL=${pocketbase_admin_email}", + "POCKETBASE_ADMIN_PASSWORD=${pocketbase_admin_password}", + "NODE_ENV=production", + "NODE_OPTIONS=--max-old-space-size=256", + "POCKETBASE_URL=${pocketbase_url}", + "NEXT_PUBLIC_POCKETBASE_URL=${next_public_pocketbase_url}" +] diff --git a/meta.json b/meta.json index ffff0e0b..65138f3c 100644 --- a/meta.json +++ b/meta.json @@ -3512,6 +3512,24 @@ "self-hosted" ] }, + { + "id": "linknlink", + "name": "LinknLink", + "version": "latest", + "description": "LinknLink is a link management application with PocketBase backend and Next.js frontend.", + "logo": "linknlink.svg", + "links": { + "github": "https://github.com/sonmezerekrem/linknlink", + "website": "https://github.com/sonmezerekrem/linknlink", + "docs": "https://github.com/sonmezerekrem/linknlink#readme" + }, + "tags": [ + "link-management", + "pocketbase", + "nextjs", + "self-hosted" + ] + }, { "id": "linkstack", "name": "LinkStack",