Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
350e44f
fix: search input icons and scrollbar shift from mode-toggle dropdown
zaaakher Aug 15, 2026
bf8ca3f
Merge pull request #1085 from zaaakher/ui-improvements-1
Siumauricio Aug 18, 2026
d5d374a
feat: add Kotonoba template
jmaxdev Aug 22, 2026
b7ca428
fix: update 20+ broken links in templates (#1084)
zaaakher Aug 25, 2026
39ce530
fix(kotonoba): pin image to 1.0.19, ADMIN_DOMAIN as hostname
xSiumauricio Aug 25, 2026
a307ed4
chore: update Windshift to v0.8.5 (#1090)
stefan-ernst Aug 25, 2026
9c784b7
feat: add postgres-pgadmin template (#1104)
iamtoricool Aug 25, 2026
7249178
fix(rustrak): point templates at the official images and current meta…
AbianS Aug 25, 2026
f343ceb
feat(blueprint): update trmnl-larapaper template (#1101)
bnussbau Aug 25, 2026
aa60cb6
fix(rustrak-full): bind UI to 0.0.0.0; chore(trmnl-larapaper): bump t…
Siumauricio Aug 25, 2026
fee40db
feat: add freellmapi template (#1099)
iamtoricool Aug 25, 2026
b456667
feat(Kanbn): add Kanbn template (#1098)
sadiqAlAboudi Aug 25, 2026
73d257e
feat(GoatCounter): Add GoatCounter template (#1096)
sadiqAlAboudi Aug 25, 2026
e4cd30c
Add MyLinks template (#1089)
Sonny93 Aug 25, 2026
6621a29
Autobase: bump to v2.10.0 (#1088)
vitabaks Aug 25, 2026
63635b1
feat(openanalytics): add Open Analytics blueprint (#1094)
Uaghazade1 Aug 25, 2026
0bb292d
feat: add Instatic template (#1093)
Tekipeps Aug 25, 2026
8deda67
update Calcom image version and add QOL Env Var for public signup and…
M4dhav Aug 25, 2026
c322999
Fix Appwrite Function API requests behind HTTPS redirects (#1087)
ChiragAgg5k Aug 25, 2026
bf83223
chore: sync main into canary (brings OpenSEO #1107, merged to main by…
Siumauricio Aug 25, 2026
b5b3726
Merge pull request #1109 from Dokploy/chore/sync-main-into-canary
Siumauricio Aug 25, 2026
f29a0b7
Merge pull request #1103 from jmaxdev/canary
Siumauricio Aug 25, 2026
b05ce42
chore(plausible): update to v3.2.1 (#1123)
Siumauricio Aug 30, 2026
c974384
feat: make Firecrawl template production-ready (#1118)
Manan-Santoki Aug 30, 2026
127b607
feat: add BlogFactory template (#1111)
BoraGkc Aug 30, 2026
b353499
feat(wupnext): add new env vars for mcp server (#1100)
javierlnmn Aug 30, 2026
1aa2d74
data permission right & Traefik configuration (#1110)
BacemJ Aug 30, 2026
7b1cf99
fix(postiz): pass all social provider env vars and fix Temporal healt…
Hugo0507 Aug 30, 2026
6284bbc
fix: Update outdated website URL (#1120)
egedemirkaran Aug 30, 2026
698ab85
feat(template): add Quire Ink (#1117)
joiha-steven Aug 30, 2026
c784f9b
feat: add Silo object storage service with Docker Compose setup (#1112)
frnikho Aug 30, 2026
614e4fe
fix(odoo_17, odoo_18): provide odoo.conf via config mount and enable …
Siumauricio Aug 30, 2026
8ac27a0
fix: update Pocket ID template to v2.14.0 (#1113)
GhaziBenDahmane Aug 30, 2026
a9aa64e
feat: add FalkorDB template (#1116)
GhaziBenDahmane Aug 30, 2026
b87d9a9
feat: add Rustrak SQLite full-stack template (#1115)
GhaziBenDahmane Aug 30, 2026
830d6bb
Add OpenStatus template (#1126)
Siumauricio Aug 31, 2026
8a95f2a
feat: add MC Controller template
Nargor Sep 22, 2026
0d15b50
feat: bump mc-controller template to 1.0.2
Nargor Sep 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions app/src/components/Search.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,20 +109,22 @@ const Search = () => {
</div>
</div>

<Input
type="text"
placeholder="Search templates..."
value={searchQuery}
onChange={handleSearchChange}
className="w-full p-6"
/>
{searchQuery.length > 0 ? (
<div className="cursor-pointer" onClick={handleClearSearch}>
<XIcon className="absolute end-3 translate-y-3.5 top-1/2 h-5 w-5 text-gray-400" />
</div>
) : (
<SearchIcon className="absolute end-3 translate-y-2 top-1/2 lg:size-5 size-4 text-gray-400" />
)}
<div className="relative">
<Input
type="text"
placeholder="Search templates..."
value={searchQuery}
onChange={handleSearchChange}
className="w-full"
/>
{searchQuery.length > 0 ? (
<div className="cursor-pointer" onClick={handleClearSearch}>
<XIcon className="absolute end-3 top-1/2 -translate-y-1/2 h-5 w-5 text-gray-400" />
</div>
) : (
<SearchIcon className="absolute end-3 top-1/2 -translate-y-1/2 lg:size-5 size-4 text-gray-400" />
)}
</div>
</div>

<div className="flex flex-row gap-2 justify-between">
Expand Down Expand Up @@ -154,7 +156,7 @@ const Search = () => {
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-[200px] p-0">
<PopoverContent className="w-50 p-0">
<Command shouldFilter={false}>
<CommandInput
placeholder="Search tags...."
Expand Down
4 changes: 2 additions & 2 deletions app/src/mode-toggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
DropdownMenuTrigger,
} from "./components/ui/dropdown-menu"
import { useTheme } from "./theme-provider"

export function ModeToggle() {
const { setTheme } = useTheme()

return (
<DropdownMenu>
<DropdownMenu modal={false}>
<DropdownMenuTrigger asChild>
<Button variant="outline" size="icon">
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
Expand Down
5 changes: 4 additions & 1 deletion blueprints/appwrite/template.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ env = [
"_APP_POOL_ADAPTER=stack",
"_APP_WORKER_PER_CORE=6",
"_APP_OPTIONS_ABUSE=enabled",
"_APP_OPTIONS_FORCE_HTTPS=disabled",
# Requires HTTPS to be enabled on the main domain in Dokploy (Domains tab).
# Makes Appwrite generate https:// URLs (e.g. APPWRITE_FUNCTION_API_ENDPOINT for
# Functions) and reject plain-HTTP API calls; over plain HTTP the console cannot log in.
"_APP_OPTIONS_FORCE_HTTPS=enabled",
"_APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
"_APP_OPENSSL_KEY_V1=${openssl_key}",
Expand Down
2 changes: 1 addition & 1 deletion blueprints/autobase/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
autobase-console:
image: autobase/console:2.7.2
image: autobase/console:2.10.0
restart: unless-stopped
expose:
- "80"
Expand Down
2 changes: 1 addition & 1 deletion blueprints/autobase/meta.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "autobase",
"name": "Autobase",
"version": "2.7.2",
"version": "2.10.0",
"description": "Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).",
"links": {
"github": "https://github.com/vitabaks/autobase",
Expand Down
12 changes: 12 additions & 0 deletions blueprints/blogfactory/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# BlogFactory on Dokploy

Dokploy creates independent database, storage, JWT, encryption, and scheduler secrets during import. Only the `web` service receives a public domain; the API, scheduler, PostgreSQL, and MinIO remain private.

## First administrator

1. Open the Compose service's environment settings and copy the generated `ADMIN_EMAILS` value.
2. Open the generated BlogFactory domain and register with that exact email address.
3. Return to the Compose environment settings, change `BLOGFACTORY_ALLOW_SIGNUP` to `false`, and redeploy.
4. Add OpenRouter, CMS, or Google Search Console credentials from BlogFactory only when you need those optional integrations.

BlogFactory sends reviewed content to connected CMS providers as drafts. The template does not grant live-publish or delete authority.
8 changes: 8 additions & 0 deletions blueprints/blogfactory/blogfactory.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
102 changes: 102 additions & 0 deletions blueprints/blogfactory/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
version: "3.8"

services:
postgres:
image: postgres:17.6-alpine3.22
restart: unless-stopped
environment:
POSTGRES_DB: blogfactory
POSTGRES_USER: blogfactory
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U blogfactory -d blogfactory"]
interval: 5s
timeout: 5s
retries: 20

minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
command: server /data --console-address :9001
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- minio-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 5s
timeout: 5s
retries: 20

api:
image: ghcr.io/blogfactoryhq/blogfactory-api:v0.1.0
restart: unless-stopped
command: >-
sh -c "bun run src/init-s3-bucket.ts && bun run src/db/migrate.ts && exec bun run src/index.ts"
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
expose:
- 3000
environment:
NODE_ENV: production
PORT: 3000
BLOGFACTORY_SELF_HOSTED: "true"
DATABASE_URL: postgresql://blogfactory:${POSTGRES_PASSWORD}@postgres:5432/blogfactory
JWT_SECRET: ${JWT_SECRET}
API_KEY_ENCRYPTION_SECRET: ${API_KEY_ENCRYPTION_SECRET}
ADMIN_EMAILS: ${ADMIN_EMAILS}
BLOGFACTORY_ALLOW_SIGNUP: ${BLOGFACTORY_ALLOW_SIGNUP}
CRON_SECRET: ${CRON_SECRET}
WEB_APP_URL: ${BLOGFACTORY_URL}
MCP_APP_URL: http://web/mcp-review.html
MCP_ALLOWED_ORIGINS: ${BLOGFACTORY_URL}
S3_ENDPOINT: http://minio:9000
S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER}
S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
S3_BUCKET: blogfactory
S3_REGION: us-east-1
healthcheck:
test: ["CMD", "bun", "-e", "fetch('http://localhost:3000/api/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
interval: 10s
timeout: 5s
retries: 20

web:
image: ghcr.io/blogfactoryhq/blogfactory-web:v0.1.0
restart: unless-stopped
depends_on:
api:
condition: service_healthy
expose:
- 80
environment:
API_UPSTREAM: http://api:3000
healthcheck:
test: ["CMD-SHELL", "nginx -t >/dev/null 2>&1 && wget -q -O /dev/null http://api:3000/api/ready"]
interval: 10s
timeout: 5s
retries: 20

scheduler:
image: curlimages/curl:8.15.0
restart: unless-stopped
depends_on:
api:
condition: service_healthy
environment:
CRON_SECRET: ${CRON_SECRET}
CRON_INTERVAL_SECONDS: 21600
entrypoint: ["/bin/sh", "-c"]
command:
- >-
while true; do curl --fail --silent --show-error --output /dev/null -H "Authorization: Bearer $${CRON_SECRET}" http://api:3000/api/cron/drain && echo "Scheduler drain completed"; sleep "$${CRON_INTERVAL_SECONDS}"; done

volumes:
postgres-data:
minio-data:
13 changes: 13 additions & 0 deletions blueprints/blogfactory/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"id": "blogfactory",
"name": "BlogFactory",
"version": "v0.1.0",
"description": "Self-hosted control plane for AI-assisted content operations and human-approved CMS draft delivery.",
"logo": "blogfactory.svg",
"links": {
"github": "https://github.com/BlogFactoryHQ/blogfactory",
"website": "https://blogfactory.io/",
"docs": "https://github.com/BlogFactoryHQ/blogfactory/blob/main/docs/self-hosting.md"
},
"tags": ["ai", "automation", "content-management"]
}
28 changes: 28 additions & 0 deletions blueprints/blogfactory/template.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:48}"
minio_root_user = "blogfactory"
minio_root_password = "${password:48}"
jwt_secret = "${base64:48}"
encryption_secret = "${base64:48}"
cron_secret = "${base64:48}"
admin_email = "${email}"

[config]
env = [
"POSTGRES_PASSWORD=${postgres_password}",
"MINIO_ROOT_USER=${minio_root_user}",
"MINIO_ROOT_PASSWORD=${minio_root_password}",
"JWT_SECRET=${jwt_secret}",
"API_KEY_ENCRYPTION_SECRET=${encryption_secret}",
"CRON_SECRET=${cron_secret}",
"ADMIN_EMAILS=${admin_email}",
"BLOGFACTORY_ALLOW_SIGNUP=true",
"BLOGFACTORY_URL=https://${main_domain}",
]
mounts = []

[[config.domains]]
serviceName = "web"
port = 80
host = "${main_domain}"
17 changes: 16 additions & 1 deletion blueprints/calcom/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# If you are on a machine with ARM architecture, please add a "-arm" suffix to the calcom image on line 19.
# For example, `calcom/cal.com:v6.2.0` will become `calcom/cal.com:v6.2.0-arm`

# If serving the instance on https, change `NEXT_PUBLIC_WEBAPP_URL` (Line 28) and `NEXTAUTH_URL` (Line 30) to https

services:
postgres:
image: postgres:16-alpine
Expand All @@ -11,15 +16,25 @@ services:
- DATABASE_URL=postgres://postgres:password@postgres:5432/db

calcom:
image: calcom/cal.com:v2.7.6
image: calcom/cal.com:v6.2.0
depends_on:
- postgres
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY}
- DATABASE_URL=postgres://postgres:password@postgres:5432/db
- DATABASE_DIRECT_URL=postgres://postgres:password@postgres:5432/db
- DATABASE_HOST=postgres:5432
- NEXT_PUBLIC_WEBAPP_URL=http://${CALCOM_HOST}
- ALLOWED_HOSTNAMES="${CALCOM_HOST}"
- NEXTAUTH_URL=http://${CALCOM_HOST}/api/auth
- NEXT_PUBLIC_DISABLE_SIGNUP=${DISABLE_SIGNUP}
- EMAIL_SERVER_HOST=${SMTP_SERVER}
- EMAIL_SERVER_PORT=${SMTP_PORT}
- EMAIL_SERVER_USER=${EMAIL_SERVER_USER}
- EMAIL_SERVER_PASSWORD=${SMTP_PASSWORD}
- EMAIL_FROM=${EMAIL_FROM}


volumes:
calcom-data:
2 changes: 1 addition & 1 deletion blueprints/calcom/meta.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "calcom",
"name": "Calcom",
"version": "v2.7.6",
"version": "v6.2.0",
"description": "Calcom is a open source alternative to Calendly that allows to create scheduling and booking services.",
"links": {
"github": "https://github.com/calcom/cal.com",
Expand Down
6 changes: 6 additions & 0 deletions blueprints/calcom/template.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ env = [
"CALCOM_HOST=${main_domain}",
"NEXTAUTH_SECRET=${nextauth_secret}",
"CALENDSO_ENCRYPTION_KEY=${calcom_encryption_key}",
"DISABLE_SIGNUP=true",
"SMTP_SERVER=",
"SMTP_PORT=",
"SMTP_PASSWORD=",
"EMAIL_SERVER_USER=",
"EMAIL_FROM=",
]
mounts = []

Expand Down
2 changes: 1 addition & 1 deletion blueprints/chiefonboarding/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"logo": "logo.png",
"links": {
"github": "https://github.com/chiefonboarding/chiefonboarding",
"website": "https://demo.chiefonboarding.com/",
"website": "https://chiefonboarding.com/",
"docs": "https://docs.chiefonboarding.com/"
},
"tags": [
Expand Down
2 changes: 1 addition & 1 deletion blueprints/convex/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"description": "Convex is an open-source reactive database designed to make life easy for web app developers.",
"logo": "convex.svg",
"links": {
"github": "https://github.com/get-convex/convex",
"github": "https://github.com/get-convex/convex-backend",
"website": "https://www.convex.dev/",
"docs": "https://www.convex.dev/docs"
},
Expand Down
4 changes: 2 additions & 2 deletions blueprints/creed/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
"description": "One personal context file every AI agent reads before answering and proposes updates to as it learns about you. Requires an external Supabase project (see instructions).",
"logo": "creed.svg",
"links": {
"github": "https://github.com/connorhpbrn/creed",
"github": "https://github.com/hpbrn/creed",
"website": "https://creed.md",
"docs": "https://creed.md/docs"
"docs": "https://docs.creed.md/"
},
"tags": [
"ai",
Expand Down
4 changes: 2 additions & 2 deletions blueprints/cup/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"logo": "image.png",
"links": {
"github": "https://github.com/sergi0g/cup",
"website": "https://cup.sh",
"docs": "https://github.com/sergi0g/cup"
"website": "https://cup.sergi0g.dev/",
"docs": "https://cup.sergi0g.dev/docs"
},
"tags": [
"docker",
Expand Down
4 changes: 2 additions & 2 deletions blueprints/docling-serve/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"logo": "docling-serve.png",
"links": {
"github": "https://github.com/docling-project/docling-serve",
"website": "https://docling-project.github.io/docling-serve/",
"docs": "https://docling-project.github.io/docling-serve/",
"website": "",
"docs": "https://github.com/docling-project/docling-serve/blob/main/docs/README.md",
"dockerhub": "https://quay.io/repository/docling-project/docling-serve"
},
"tags": [
Expand Down
2 changes: 1 addition & 1 deletion blueprints/doublezero/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"logo": "doublezero.svg",
"links": {
"github": "https://github.com/technomancy-dev/00",
"website": "https://www.double-zero.cloud/",
"website": "",
"docs": "https://github.com/technomancy-dev/00"
},
"tags": [
Expand Down
2 changes: 1 addition & 1 deletion blueprints/dozzle/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"links": {
"github": "https://github.com/amir20/dozzle",
"website": "https://dozzle.dev",
"docs": "https://dozzle.dev/docs"
"docs": "https://dozzle.dev/guide/what-is-dozzle"
},
"tags": [
"monitoring",
Expand Down
4 changes: 2 additions & 2 deletions blueprints/drawio/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"logo": "drawio.svg",
"links": {
"github": "https://github.com/jgraph/drawio",
"website": "https://draw.io/",
"docs": "https://www.drawio.com/doc/"
"website": "https://www.drawio.com/",
"docs": "https://www.drawio.com/docs/"
},
"tags": [
"drawing",
Expand Down
Loading
Loading