diff --git a/blueprints/sentroy/docker-compose.yml b/blueprints/sentroy/docker-compose.yml
new file mode 100644
index 000000000..46d08dc6e
--- /dev/null
+++ b/blueprints/sentroy/docker-compose.yml
@@ -0,0 +1,161 @@
+services:
+ mongo:
+ image: mongo:7
+ restart: unless-stopped
+ env_file:
+ - .env
+ volumes:
+ - sentroy-mongo:/data/db
+ healthcheck:
+ test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 30s
+
+ core:
+ image: ghcr.io/sentroy-co/sentroy-oss-core:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3000
+ - CDN_API_URL=http://cdn:4100
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ storage:
+ image: ghcr.io/sentroy-co/sentroy-oss-storage:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3002
+ - CDN_API_URL=http://cdn:4100
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ cdn:
+ image: ghcr.io/sentroy-co/sentroy-oss-cdn:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=4100
+
+ auth2:
+ image: ghcr.io/sentroy-co/sentroy-oss-auth2:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3003
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ status:
+ image: ghcr.io/sentroy-co/sentroy-oss-status:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3004
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ studio:
+ image: ghcr.io/sentroy-co/sentroy-oss-studio:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3006
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ whatsapp:
+ image: ghcr.io/sentroy-co/sentroy-oss-whatsapp:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3007
+ - WHATSAPP_GATEWAY_URL=http://whatsapp-gateway:4200
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ whatsapp-gateway:
+ image: ghcr.io/sentroy-co/sentroy-oss-whatsapp-gateway:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=4200
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ linear:
+ image: ghcr.io/sentroy-co/sentroy-oss-linear:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3009
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ downloader:
+ image: ghcr.io/sentroy-co/sentroy-oss-downloader:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3008
+ - DOWNLOADER_WORKER_URL=http://downloader-worker:4300
+
+ downloader-worker:
+ image: ghcr.io/sentroy-co/sentroy-oss-downloader-worker:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=4300
+ volumes:
+ - sentroy-downloads:/downloads
+
+ backup:
+ image: ghcr.io/sentroy-co/sentroy-oss-backup:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=3010
+ - BACKUP_WORKER_URL=http://backup-worker:4400
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+ backup-worker:
+ image: ghcr.io/sentroy-co/sentroy-oss-backup-worker:latest
+ restart: unless-stopped
+ env_file:
+ - .env
+ environment:
+ - PORT=4400
+ depends_on:
+ mongo:
+ condition: service_healthy
+
+volumes:
+ sentroy-mongo:
+ driver: local
+ sentroy-downloads:
+ driver: local
diff --git a/blueprints/sentroy/logo.svg b/blueprints/sentroy/logo.svg
new file mode 100644
index 000000000..bf6c5e901
--- /dev/null
+++ b/blueprints/sentroy/logo.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/blueprints/sentroy/meta.json b/blueprints/sentroy/meta.json
new file mode 100644
index 000000000..cd0cece87
--- /dev/null
+++ b/blueprints/sentroy/meta.json
@@ -0,0 +1,17 @@
+{
+ "id": "sentroy",
+ "name": "Sentroy",
+ "version": "1.64.226",
+ "description": "Self-hostable workspace suite — mail, storage, auth/OIDC, status, WhatsApp, issue tracker, audio studio, downloader and MongoDB backup — on MongoDB.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/Sentroy-Co/sentroy",
+ "website": "https://sentroy.com",
+ "docs": "https://sentroy.com/docs"
+ },
+ "tags": [
+ "workspace",
+ "productivity",
+ "platform"
+ ]
+}
diff --git a/blueprints/sentroy/template.toml b/blueprints/sentroy/template.toml
new file mode 100644
index 000000000..042572fe2
--- /dev/null
+++ b/blueprints/sentroy/template.toml
@@ -0,0 +1,99 @@
+[variables]
+# Edit root_domain to your domain, then point wildcard DNS (*. + )
+# at this server. Every app is served at a fixed subdomain of it.
+root_domain = "sentroy.example.com"
+mongo_password = "${password:32}"
+auth_secret = "${base64:64}"
+internal_secret = "${password:48}"
+env_master = "${base64:64}"
+cdn_secret = "${password:32}"
+whatsapp_key = "${base64:32}"
+downloader_secret = "${password:32}"
+backup_secret = "${password:32}"
+admin_api_key = "${base64:48}"
+admin_password = "${password:24}"
+
+[config]
+
+[[config.domains]]
+serviceName = "core"
+port = 3000
+host = "${root_domain}"
+
+[[config.domains]]
+serviceName = "storage"
+port = 3002
+host = "storage.${root_domain}"
+
+[[config.domains]]
+serviceName = "cdn"
+port = 4100
+host = "cdn.${root_domain}"
+
+[[config.domains]]
+serviceName = "auth2"
+port = 3003
+host = "auth.${root_domain}"
+
+[[config.domains]]
+serviceName = "status"
+port = 3004
+host = "status.${root_domain}"
+
+[[config.domains]]
+serviceName = "studio"
+port = 3006
+host = "studio.${root_domain}"
+
+[[config.domains]]
+serviceName = "whatsapp"
+port = 3007
+host = "whatsapp.${root_domain}"
+
+[[config.domains]]
+serviceName = "linear"
+port = 3009
+host = "linear.${root_domain}"
+
+[[config.domains]]
+serviceName = "downloader"
+port = 3008
+host = "youtube.${root_domain}"
+
+[[config.domains]]
+serviceName = "backup"
+port = 3010
+host = "backup.${root_domain}"
+
+[config.env]
+# One knob — server code + the client-bundle sentinel are both resolved from
+# SENTROY_ROOT_DOMAIN at container start, so a single prebuilt image serves any
+# domain. Other app URLs are derived from it; no per-app URL needed.
+SENTROY_ROOT_DOMAIN = "${root_domain}"
+DOMAIN = "${root_domain}"
+NODE_ENV = "production"
+MONGO_INITDB_ROOT_USERNAME = "sentroy"
+MONGO_INITDB_ROOT_PASSWORD = "${mongo_password}"
+MONGODB_URI = "mongodb://sentroy:${mongo_password}@mongo:27017/sentroy?authSource=admin"
+MONGODB_DATABASE = "sentroy"
+BETTER_AUTH_SECRET = "${auth_secret}"
+BETTER_AUTH_URL = "https://${root_domain}"
+AUTH_COOKIE_DOMAIN = ".${root_domain}"
+AUTH_TRUSTED_ORIGINS = "https://${root_domain}"
+INTERNAL_API_SECRET = "${internal_secret}"
+SENTROY_ENV_MASTER_KEY = "${env_master}"
+CDN_API_SECRET = "${cdn_secret}"
+SENTROY_ADMIN_API_KEY = "${admin_api_key}"
+ADMIN_EMAIL = "admin@${root_domain}"
+ADMIN_PASSWORD = "${admin_password}"
+WHATSAPP_ENC_KEY = "${whatsapp_key}"
+DOWNLOADER_API_SECRET = "${downloader_secret}"
+BACKUP_API_SECRET = "${backup_secret}"
+TURNSTILE_DISABLED = "true"
+NEXT_PUBLIC_TURNSTILE_DISABLED = "true"
+# Object storage (S3-compatible) — REQUIRED for Storage + Backup. Fill these in.
+IDRIVE_ENDPOINT = ""
+IDRIVE_REGION = ""
+IDRIVE_BUCKET = ""
+IDRIVE_ACCESS_KEY = ""
+IDRIVE_SECRET_KEY = ""