From 30d789cb452848191b2a8ac073494cfeb40eba58 Mon Sep 17 00:00:00 2001 From: Andreas Enemyr Date: Fri, 17 Apr 2026 13:35:34 +0200 Subject: [PATCH] Add Multica template Open-source managed agents platform (Next.js + Go + pgvector). Builds from source via remote git context since no pre-built images are published. Exposes two Traefik domains: frontend (3000) and backend (8080) for the CLI/daemon. Co-Authored-By: Claude Opus 4.7 (1M context) --- blueprints/multica/docker-compose.yml | 68 +++++++++++++++++++++++++++ blueprints/multica/multica.svg | 7 +++ blueprints/multica/template.toml | 40 ++++++++++++++++ meta.json | 21 +++++++++ 4 files changed, 136 insertions(+) create mode 100644 blueprints/multica/docker-compose.yml create mode 100644 blueprints/multica/multica.svg create mode 100644 blueprints/multica/template.toml diff --git a/blueprints/multica/docker-compose.yml b/blueprints/multica/docker-compose.yml new file mode 100644 index 00000000..d0ba06bb --- /dev/null +++ b/blueprints/multica/docker-compose.yml @@ -0,0 +1,68 @@ +name: multica + +services: + postgres: + image: pgvector/pgvector:pg17 + restart: unless-stopped + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 10 + + backend: + build: + context: "https://github.com/multica-ai/multica.git#main" + dockerfile: Dockerfile + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + ports: + - "8080" + volumes: + - backend_uploads:/app/data/uploads + environment: + DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable + PORT: "8080" + JWT_SECRET: ${JWT_SECRET} + FRONTEND_ORIGIN: ${FRONTEND_ORIGIN} + ALLOWED_ORIGINS: ${ALLOWED_ORIGINS} + MULTICA_APP_URL: ${MULTICA_APP_URL} + RESEND_API_KEY: ${RESEND_API_KEY} + RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL} + GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID} + GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET} + GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI} + COOKIE_DOMAIN: ${COOKIE_DOMAIN} + S3_BUCKET: ${S3_BUCKET} + S3_REGION: ${S3_REGION} + CLOUDFRONT_DOMAIN: ${CLOUDFRONT_DOMAIN} + CLOUDFRONT_KEY_PAIR_ID: ${CLOUDFRONT_KEY_PAIR_ID} + CLOUDFRONT_PRIVATE_KEY: ${CLOUDFRONT_PRIVATE_KEY} + + frontend: + build: + context: "https://github.com/multica-ai/multica.git#main" + dockerfile: Dockerfile.web + args: + REMOTE_API_URL: http://backend:8080 + NEXT_PUBLIC_WS_URL: ${NEXT_PUBLIC_WS_URL} + NEXT_PUBLIC_GOOGLE_CLIENT_ID: ${NEXT_PUBLIC_GOOGLE_CLIENT_ID} + restart: unless-stopped + depends_on: + - backend + ports: + - "3000" + environment: + HOSTNAME: "0.0.0.0" + +volumes: + pgdata: + backend_uploads: diff --git a/blueprints/multica/multica.svg b/blueprints/multica/multica.svg new file mode 100644 index 00000000..3aec18db --- /dev/null +++ b/blueprints/multica/multica.svg @@ -0,0 +1,7 @@ + + + diff --git a/blueprints/multica/template.toml b/blueprints/multica/template.toml new file mode 100644 index 00000000..9206c814 --- /dev/null +++ b/blueprints/multica/template.toml @@ -0,0 +1,40 @@ +[variables] +app_domain = "${domain}" +api_domain = "${domain}" +jwt_secret = "${password:64}" +postgres_password = "${password:32}" + +[config] +[[config.domains]] +serviceName = "frontend" +port = 3000 +host = "${app_domain}" +path = "/" + +[[config.domains]] +serviceName = "backend" +port = 8080 +host = "${api_domain}" +path = "/" + +[config.env] +POSTGRES_DB = "multica" +POSTGRES_USER = "multica" +POSTGRES_PASSWORD = "${postgres_password}" +JWT_SECRET = "${jwt_secret}" +FRONTEND_ORIGIN = "https://${app_domain}" +ALLOWED_ORIGINS = "https://${app_domain}" +MULTICA_APP_URL = "https://${app_domain}" +NEXT_PUBLIC_WS_URL = "wss://${api_domain}/ws" +RESEND_API_KEY = "" +RESEND_FROM_EMAIL = "noreply@multica.ai" +GOOGLE_CLIENT_ID = "" +GOOGLE_CLIENT_SECRET = "" +GOOGLE_REDIRECT_URI = "https://${app_domain}/auth/callback" +NEXT_PUBLIC_GOOGLE_CLIENT_ID = "" +COOKIE_DOMAIN = "" +S3_BUCKET = "" +S3_REGION = "us-west-2" +CLOUDFRONT_DOMAIN = "" +CLOUDFRONT_KEY_PAIR_ID = "" +CLOUDFRONT_PRIVATE_KEY = "" diff --git a/meta.json b/meta.json index 3ae0cb5e..042659c7 100644 --- a/meta.json +++ b/meta.json @@ -4182,6 +4182,27 @@ "java" ] }, + { + "id": "multica", + "name": "Multica", + "version": "latest", + "description": "Multica is an open-source managed agents platform for teams. Assign tasks to AI coding agents (Claude Code, Codex, OpenClaw and more) that execute autonomously, report progress, and build reusable skills over time.", + "logo": "multica.svg", + "links": { + "github": "https://github.com/multica-ai/multica", + "website": "https://multica.ai", + "docs": "https://github.com/multica-ai/multica/blob/main/SELF_HOSTING.md" + }, + "tags": [ + "ai", + "agents", + "automation", + "self-hosted", + "claude-code", + "codex", + "developer-tools" + ] + }, { "id": "mumble", "name": "Mumble",