diff --git a/blueprints/mediafetch/meta.json b/blueprints/mediafetch/meta.json index bcd5adb0..2967b9de 100644 --- a/blueprints/mediafetch/meta.json +++ b/blueprints/mediafetch/meta.json @@ -1,7 +1,7 @@ { "id": "mediafetch", "name": "MediaFetch", - "version": "1.3.5", + "version": "1.1.1", "description": "A tiny, self-hosted web wrapper for yt-dlp to download video and audio. Optional basic auth.", "logo": "mediafetch.svg", "links": { diff --git a/blueprints/multica/docker-compose.yml b/blueprints/multica/docker-compose.yml new file mode 100644 index 00000000..cc3e799f --- /dev/null +++ b/blueprints/multica/docker-compose.yml @@ -0,0 +1,63 @@ +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 + 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_GOOGLE_CLIENT_ID: ${NEXT_PUBLIC_GOOGLE_CLIENT_ID} + restart: unless-stopped + depends_on: + - backend + environment: + HOSTNAME: "0.0.0.0" + +volumes: + pgdata: + backend_uploads: diff --git a/blueprints/multica/meta.json b/blueprints/multica/meta.json new file mode 100644 index 00000000..528c3c0b --- /dev/null +++ b/blueprints/multica/meta.json @@ -0,0 +1,21 @@ +{ + "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" + ] +} 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..04b6ceab --- /dev/null +++ b/blueprints/multica/template.toml @@ -0,0 +1,32 @@ +[variables] +app_domain = "${domain}" +jwt_secret = "${password:64}" +postgres_password = "${password:32}" + +[config] +[[config.domains]] +serviceName = "frontend" +port = 3000 +host = "${app_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}" +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 = ""