diff --git a/blueprints/commafeed/docker-compose.yml b/blueprints/commafeed/docker-compose.yml
new file mode 100644
index 00000000..3996e54c
--- /dev/null
+++ b/blueprints/commafeed/docker-compose.yml
@@ -0,0 +1,9 @@
+version: "3.8"
+services:
+ commafeed:
+ image: athou/commafeed:latest-h2
+ restart: unless-stopped
+ volumes:
+ - ../files/commafeed-data:/commafeed/data
+ ports:
+ - 8082
diff --git a/blueprints/commafeed/logo.svg b/blueprints/commafeed/logo.svg
new file mode 100644
index 00000000..b33ecc20
--- /dev/null
+++ b/blueprints/commafeed/logo.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/blueprints/commafeed/template.toml b/blueprints/commafeed/template.toml
new file mode 100644
index 00000000..d83f9e92
--- /dev/null
+++ b/blueprints/commafeed/template.toml
@@ -0,0 +1,17 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "commafeed"
+port = 8082
+host = "${main_domain}"
+
+[config.env]
+# No environment variables specified for CommaFeed; add if needed
+# Example: COMMAFEED_ADMIN_USER = "${username}"
+# Example: COMMAFEED_ADMIN_PASSWORD = "${password:32}"
+
+[[config.mounts]]
+filePath = "/files/commafeed-data"
+content = ""
\ No newline at end of file
diff --git a/blueprints/convertx/docker-compose.yml b/blueprints/convertx/docker-compose.yml
new file mode 100644
index 00000000..c372ce50
--- /dev/null
+++ b/blueprints/convertx/docker-compose.yml
@@ -0,0 +1,19 @@
+version: "3.8"
+services:
+ convertx:
+ image: ghcr.io/c4illin/convertx
+ restart: unless-stopped
+ ports:
+ - 3000
+ environment:
+ - JWT_SECRET=${JWT_SECRET}
+ - ACCOUNT_REGISTRATION=${ACCOUNT_REGISTRATION}
+ - HTTP_ALLOWED=${HTTP_ALLOWED}
+ - ALLOW_UNAUTHENTICATED=${ALLOW_UNAUTHENTICATED}
+ - AUTO_DELETE_EVERY_N_HOURS=${AUTO_DELETE_EVERY_N_HOURS}
+ - WEBROOT=${WEBROOT}
+ - FFMPEG_ARGS=${FFMPEG_ARGS}
+ - HIDE_HISTORY=${HIDE_HISTORY}
+ - LANGUAGE=${LANGUAGE}
+ volumes:
+ - ../files/data:/app/data
diff --git a/blueprints/convertx/logo.png b/blueprints/convertx/logo.png
new file mode 100644
index 00000000..7f4c41e2
Binary files /dev/null and b/blueprints/convertx/logo.png differ
diff --git a/blueprints/convertx/template.toml b/blueprints/convertx/template.toml
new file mode 100644
index 00000000..0851cc29
--- /dev/null
+++ b/blueprints/convertx/template.toml
@@ -0,0 +1,33 @@
+[variables]
+main_domain = "${domain}"
+jwt_secret = "${jwt:32}"
+account_registration = "false"
+http_allowed = "true"
+allow_unauthenticated = "false"
+auto_delete_every_n_hours = "24"
+webroot = ""
+ffmpeg_args = ""
+hide_history = "false"
+language = "en"
+
+[config]
+[[config.domains]]
+serviceName = "convertx"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+JWT_SECRET = "${jwt_secret}"
+ACCOUNT_REGISTRATION = "${account_registration}"
+HTTP_ALLOWED = "${http_allowed}"
+ALLOW_UNAUTHENTICATED = "${allow_unauthenticated}"
+AUTO_DELETE_EVERY_N_HOURS = "${auto_delete_every_n_hours}"
+WEBROOT = "${webroot}"
+FFMPEG_ARGS = "${ffmpeg_args}"
+HIDE_HISTORY = "${hide_history}"
+LANGUAGE = "${language}"
+
+[[config.mounts]]
+source = "../files/data"
+target = "/app/data"
+type = "bind"
\ No newline at end of file
diff --git a/blueprints/directory-lister/docker-compose.yml b/blueprints/directory-lister/docker-compose.yml
new file mode 100644
index 00000000..0e073c6e
--- /dev/null
+++ b/blueprints/directory-lister/docker-compose.yml
@@ -0,0 +1,14 @@
+services:
+ directory-lister:
+ image: directorylister/directorylister:latest
+ restart: unless-stopped
+ ports:
+ # The internal port of the application.
+ - 80
+ volumes:
+ # Mounts a persistent named volume to store directory data.
+ - directory-lister-data:/data
+
+volumes:
+ # Defines the Docker-managed volume for data persistence.
+ directory-lister-data: {}
diff --git a/blueprints/directory-lister/logo.png b/blueprints/directory-lister/logo.png
new file mode 100644
index 00000000..9edf9297
Binary files /dev/null and b/blueprints/directory-lister/logo.png differ
diff --git a/blueprints/directory-lister/template.toml b/blueprints/directory-lister/template.toml
new file mode 100644
index 00000000..e67deb80
--- /dev/null
+++ b/blueprints/directory-lister/template.toml
@@ -0,0 +1,19 @@
+[variables]
+app_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "directory-lister" # Must match the service name in docker-compose.yml
+port = 80
+host = "${app_domain}"
+
+[config.env]
+# See configuration docs for additional variables: https://www.directorylister.com/docs/configuration
+APP_LANGUAGE = "en"
+DISPLAY_READMES = "true"
+READMES_FIRST = "false"
+ZIP_DOWNLOADS = "true"
+TIMEZONE = "UTC"
+
+
+[[config.mounts]]
diff --git a/blueprints/dumbassets/docker-compose.yml b/blueprints/dumbassets/docker-compose.yml
new file mode 100644
index 00000000..eda4a3f7
--- /dev/null
+++ b/blueprints/dumbassets/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "3.8"
+services:
+ dumbassets:
+ image: dumbwareio/dumbassets:latest
+ restart: unless-stopped
+ ports:
+ - 3000
+ volumes:
+ - dumbassets-data:/app/data
+
+volumes:
+ dumbassets-data: {}
diff --git a/blueprints/dumbassets/logo.svg b/blueprints/dumbassets/logo.svg
new file mode 100644
index 00000000..17e2817e
--- /dev/null
+++ b/blueprints/dumbassets/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/blueprints/dumbassets/template.toml b/blueprints/dumbassets/template.toml
new file mode 100644
index 00000000..aafb87b4
--- /dev/null
+++ b/blueprints/dumbassets/template.toml
@@ -0,0 +1,27 @@
+[variables]
+main_domain = "${domain}"
+default_pin = "${password:4}"
+
+[config]
+[[config.domains]]
+serviceName = "dumbassets"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+NODE_ENV = "production"
+DEBUG = "false"
+SITE_TITLE = "DumbAssets"
+BASE_URL = "https://${main_domain}"
+DUMBASSETS_PIN = "${default_pin}"
+ALLOWED_ORIGINS = "*"
+DEMO_MODE = "false"
+APPRISE_URL = ""
+CURRENCY_CODE = "USD"
+CURRENCY_LOCALE = "en-US"
+
+[[config.mounts]]
+serviceName = "dumbassets"
+type = "volume"
+source = "dumbassets-data"
+target = "/app/data"
diff --git a/blueprints/dumbbudget/docker-compose.yml b/blueprints/dumbbudget/docker-compose.yml
new file mode 100644
index 00000000..1d760778
--- /dev/null
+++ b/blueprints/dumbbudget/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "3.8"
+services:
+ dumbbudget:
+ image: dumbwareio/dumbbudget:latest
+ restart: unless-stopped
+ ports:
+ - 3000
+ volumes:
+ - dumbbudget-data:/app/data
+
+volumes:
+ dumbbudget-data: {}
diff --git a/blueprints/dumbbudget/logo.svg b/blueprints/dumbbudget/logo.svg
new file mode 100644
index 00000000..92b8e284
--- /dev/null
+++ b/blueprints/dumbbudget/logo.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/blueprints/dumbbudget/template.toml b/blueprints/dumbbudget/template.toml
new file mode 100644
index 00000000..7f5abe24
--- /dev/null
+++ b/blueprints/dumbbudget/template.toml
@@ -0,0 +1,24 @@
+[variables]
+main_domain = "${domain}"
+# PIN used to access the site
+dumbbudget_pin = "${password:16}"
+
+[config]
+[[config.domains]]
+serviceName = "dumbbudget"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+DUMBBUDGET_PIN = "${dumbbudget_pin}"
+BASE_URL = "${main_domain}"
+CURRENCY = "USD"
+SITE_TITLE = "DumbBudget"
+INSTANCE_NAME = ""
+# (OPTIONAL) Restrict origins - ex: https://subdomain.domain.tld
+ALLOWED_ORIGINS = "${main_domain}"
+
+# The named volume 'dumbbudget-data' is defined in the docker-compose.yml.
+# According to Dokploy's template examples, volumes declared in the compose
+# file are automatically managed and do not require a separate entry here.
+[[config.mounts]]
diff --git a/blueprints/dumbdrop/docker-compose.yml b/blueprints/dumbdrop/docker-compose.yml
new file mode 100644
index 00000000..993e0b30
--- /dev/null
+++ b/blueprints/dumbdrop/docker-compose.yml
@@ -0,0 +1,10 @@
+services:
+ dumbdrop:
+ image: dumbwareio/dumbdrop:latest
+ restart: unless-stopped
+ ports:
+ - 3000
+ volumes:
+ - dumbdrop-uploads:/app/uploads
+volumes:
+ dumbdrop-uploads: {}
diff --git a/blueprints/dumbdrop/logo.svg b/blueprints/dumbdrop/logo.svg
new file mode 100644
index 00000000..93b1c6c1
--- /dev/null
+++ b/blueprints/dumbdrop/logo.svg
@@ -0,0 +1,20 @@
+
+
+
diff --git a/blueprints/dumbdrop/template.toml b/blueprints/dumbdrop/template.toml
new file mode 100644
index 00000000..fa05a324
--- /dev/null
+++ b/blueprints/dumbdrop/template.toml
@@ -0,0 +1,24 @@
+[variables]
+main_domain = "https://${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "dumbdrop"
+port = 3000
+host = "${domain}"
+
+[config.env]
+UPLOAD_DIR = "/app/uploads"
+DUMBDROP_TITLE = "DumbDrop"
+MAX_FILE_SIZE = "1024"
+DUMBDROP_PIN = "${password:6}"
+AUTO_UPLOAD = "true"
+BASE_URL = "${main_domain}"
+ALLOWED_ORIGINS = ""
+
+APPRISE_URL = ""
+APPRISE_MESSAGE = "New file uploaded {filename} ({size}), Storage used {storage}"
+APPRISE_SIZE_UNIT = "Auto"
+ALLOWED_EXTENSIONS = ""
+
+[[config.mounts]]
diff --git a/blueprints/dumbpad/docker-compose.yml b/blueprints/dumbpad/docker-compose.yml
new file mode 100644
index 00000000..ec9487c5
--- /dev/null
+++ b/blueprints/dumbpad/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "3.8"
+services:
+ dumbpad:
+ image: dumbwareio/dumbpad:latest
+ restart: unless-stopped
+ ports:
+ - 3000
+ volumes:
+ - dumbpad-data:/app/data
+
+volumes:
+ dumbpad-data: {}
diff --git a/blueprints/dumbpad/logo.svg b/blueprints/dumbpad/logo.svg
new file mode 100644
index 00000000..669a8aad
--- /dev/null
+++ b/blueprints/dumbpad/logo.svg
@@ -0,0 +1,27 @@
+
+
+
diff --git a/blueprints/dumbpad/template.toml b/blueprints/dumbpad/template.toml
new file mode 100644
index 00000000..9e130795
--- /dev/null
+++ b/blueprints/dumbpad/template.toml
@@ -0,0 +1,21 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "dumbpad"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+NODE_ENV = "production"
+SITE_TITLE = "DumbPad"
+BASE_URL = "https://${main_domain}"
+# Set a PIN (4-10 digits) for access protection. Leave empty to disable.
+DUMBPAD_PIN = ""
+LOCKOUT_TIME = "15"
+MAX_ATTEMPTS = "5"
+COOKIE_MAX_AGE = "24"
+PAGE_HISTORY_COOKIE_AGE = "365"
+
+[[config.mounts]]
diff --git a/blueprints/flaresolverr/docker-compose.yml b/blueprints/flaresolverr/docker-compose.yml
new file mode 100644
index 00000000..31814133
--- /dev/null
+++ b/blueprints/flaresolverr/docker-compose.yml
@@ -0,0 +1,7 @@
+version: "3.8"
+services:
+ flaresolverr:
+ image: ghcr.io/flaresolverr/flaresolverr:latest
+ ports:
+ - 8191
+ restart: unless-stopped
diff --git a/blueprints/flaresolverr/logo.png b/blueprints/flaresolverr/logo.png
new file mode 100644
index 00000000..1e1e8542
Binary files /dev/null and b/blueprints/flaresolverr/logo.png differ
diff --git a/blueprints/flaresolverr/template.toml b/blueprints/flaresolverr/template.toml
new file mode 100644
index 00000000..4b5f03d3
--- /dev/null
+++ b/blueprints/flaresolverr/template.toml
@@ -0,0 +1,16 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "flaresolverr"
+port = 8191
+host = "${main_domain}"
+
+[config.env]
+LOG_LEVEL = "info"
+LOG_HTML = "false"
+CAPTCHA_SOLVER = "none"
+TZ = "Europe/London"
+
+[[config.mounts]]
diff --git a/blueprints/grimoire/docker-compose.yml b/blueprints/grimoire/docker-compose.yml
new file mode 100644
index 00000000..d497f982
--- /dev/null
+++ b/blueprints/grimoire/docker-compose.yml
@@ -0,0 +1,10 @@
+services:
+ grimoire:
+ image: goniszewski/grimoire:latest
+ restart: unless-stopped
+ volumes:
+ - grimoire_data:/app/data
+ ports:
+ - "5173"
+volumes:
+ grimoire_data: {}
diff --git a/blueprints/grimoire/logo.webp b/blueprints/grimoire/logo.webp
new file mode 100644
index 00000000..e9abb7f1
Binary files /dev/null and b/blueprints/grimoire/logo.webp differ
diff --git a/blueprints/grimoire/template.toml b/blueprints/grimoire/template.toml
new file mode 100644
index 00000000..3f624fce
--- /dev/null
+++ b/blueprints/grimoire/template.toml
@@ -0,0 +1,16 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "grimoire"
+port = 5173
+host = "${main_domain}"
+
+[config.env]
+PORT = "5173"
+PUBLIC_ORIGIN = "https://${main_domain}"
+PUBLIC_HTTPS_ONLY = "true"
+PUBLIC_SIGNUP_DISABLED = "false"
+
+[[config.mounts]]
diff --git a/blueprints/linkstack/docker-compose.yml b/blueprints/linkstack/docker-compose.yml
new file mode 100644
index 00000000..d4622bfc
--- /dev/null
+++ b/blueprints/linkstack/docker-compose.yml
@@ -0,0 +1,30 @@
+version: "3.8"
+
+services:
+ linkstack:
+ image: linkstackorg/linkstack:latest
+ environment:
+ TZ: "Europe/Berlin"
+ SERVER_ADMIN: "${admin_email}"
+ HTTP_SERVER_NAME: "${main_domain}"
+ HTTPS_SERVER_NAME: "${main_domain}"
+ LOG_LEVEL: "info"
+ PHP_MEMORY_LIMIT: "256M"
+ UPLOAD_MAX_FILESIZE: "8M"
+ volumes:
+ - linkstack-data:/htdocs
+ restart: unless-stopped
+ depends_on:
+ - mysql
+
+ mysql:
+ image: mysql:8
+ environment:
+ MYSQL_ROOT_PASSWORD: ${mysql_root_password}
+ volumes:
+ - mysql-data:/var/lib/mysql
+ restart: unless-stopped
+
+volumes:
+ linkstack-data: {}
+ mysql-data: {}
diff --git a/blueprints/linkstack/logo.svg b/blueprints/linkstack/logo.svg
new file mode 100644
index 00000000..775632d2
--- /dev/null
+++ b/blueprints/linkstack/logo.svg
@@ -0,0 +1,105 @@
+
+
\ No newline at end of file
diff --git a/blueprints/linkstack/template.toml b/blueprints/linkstack/template.toml
new file mode 100644
index 00000000..e237251d
--- /dev/null
+++ b/blueprints/linkstack/template.toml
@@ -0,0 +1,28 @@
+[variables]
+main_domain = "${domain}"
+admin_email = "${email}"
+mysql_root_password = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "linkstack"
+port = 80
+host = "${main_domain}"
+
+[config.env]
+TZ = "Europe/Berlin"
+SERVER_ADMIN = "${admin_email}"
+HTTP_SERVER_NAME = "${main_domain}"
+HTTPS_SERVER_NAME = "${main_domain}"
+LOG_LEVEL = "info"
+PHP_MEMORY_LIMIT = "256M"
+UPLOAD_MAX_FILESIZE = "8M"
+MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
+
+[[config.mounts]]
+volume = "linkstack-data"
+target = "/htdocs"
+
+[[config.mounts]]
+volume = "mysql-data"
+target = "/var/lib/mysql"
diff --git a/blueprints/metube/docker-compose.yml b/blueprints/metube/docker-compose.yml
new file mode 100644
index 00000000..538351b3
--- /dev/null
+++ b/blueprints/metube/docker-compose.yml
@@ -0,0 +1,9 @@
+version: "3.8"
+services:
+ metube:
+ image: ghcr.io/alexta69/metube
+ restart: unless-stopped
+ ports:
+ - 8081
+ volumes:
+ - ../files/downloads:/downloads
diff --git a/blueprints/metube/logo.png b/blueprints/metube/logo.png
new file mode 100644
index 00000000..efb620a3
Binary files /dev/null and b/blueprints/metube/logo.png differ
diff --git a/blueprints/metube/template.toml b/blueprints/metube/template.toml
new file mode 100644
index 00000000..9e67b67c
--- /dev/null
+++ b/blueprints/metube/template.toml
@@ -0,0 +1,43 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "metube"
+port = 8081
+host = "${main_domain}"
+
+[config.env]
+UID = "1000"
+GID = "1000"
+UMASK = "022"
+DEFAULT_THEME = "auto"
+DOWNLOAD_DIR = "/downloads"
+AUDIO_DOWNLOAD_DIR = "/downloads"
+DOWNLOAD_DIRS_INDEXABLE = "false"
+CUSTOM_DIRS = "true"
+CREATE_CUSTOM_DIRS = "true"
+CUSTOM_DIRS_EXCLUDE_REGEX = "(^|/)[.@].*$" # Regex to exclude certain directories
+STATE_DIR = "/downloads/.metube"
+TEMP_DIR = "/downloads"
+DELETE_FILE_ON_TRASHCAN = "false" # Delete files when trashed from UI
+URL_PREFIX = "/"
+PUBLIC_HOST_URL = "" # Base URL for download links (optional)
+HTTPS = "false" # Use HTTPS (requires CERTFILE and KEYFILE)
+CERTFILE = ""
+KEYFILE = ""
+PUBLIC_HOST_AUDIO_URL = ""
+OUTPUT_TEMPLATE = "%(title)s.%(ext)s" # Filename template for videos
+OUTPUT_TEMPLATE_CHAPTER = "%(title)s - %(section_number)s %(section_title)s.%(ext)s"
+OUTPUT_TEMPLATE_PLAYLIST = "%(playlist_title)s/%(title)s.%(ext)s"
+DEFAULT_OPTION_PLAYLIST_STRICT_MODE = "false"
+DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT = "0"
+YTDL_OPTIONS = "{}" # Additional yt-dlp options in JSON format
+YTDL_OPTIONS_FILE = ""
+ROBOTS_TXT = ""
+DOWNLOAD_MODE = "limited"
+MAX_CONCURRENT_DOWNLOADS = "3"
+LOGLEVEL = "INFO"
+ENABLE_ACCESSLOG = "false"
+
+[[config.mounts]]
diff --git a/blueprints/movary/template.toml b/blueprints/movary/template.toml
index e2714d9e..7cb64837 100644
--- a/blueprints/movary/template.toml
+++ b/blueprints/movary/template.toml
@@ -19,4 +19,4 @@ mounts = []
[[config.domains]]
serviceName = "movary"
port = 8080
-host = "${main_domain}"
\ No newline at end of file
+host = "${main_domain}"
\ No newline at end of file
diff --git a/blueprints/neko/docker-compose.yml b/blueprints/neko/docker-compose.yml
new file mode 100644
index 00000000..048eba2e
--- /dev/null
+++ b/blueprints/neko/docker-compose.yml
@@ -0,0 +1,9 @@
+version: "3.8"
+services:
+ neko:
+ image: "ghcr.io/m1k1o/neko/firefox:latest"
+ restart: "unless-stopped"
+ shm_size: "2gb"
+ ports:
+ - "8080"
+ - "52000-52100:52000-52100/udp"
diff --git a/blueprints/neko/logo.png b/blueprints/neko/logo.png
new file mode 100644
index 00000000..a611a7ba
Binary files /dev/null and b/blueprints/neko/logo.png differ
diff --git a/blueprints/neko/template.toml b/blueprints/neko/template.toml
new file mode 100644
index 00000000..31060385
--- /dev/null
+++ b/blueprints/neko/template.toml
@@ -0,0 +1,22 @@
+[variables]
+main_domain = "${domain}"
+admin_password = "${password:16}"
+user_password = "${password:16}"
+
+[config]
+[[config.domains]]
+serviceName = "neko"
+port = 8080
+host = "${main_domain}"
+
+[config.env]
+NEKO_MEMBER_PROVIDER = "multiuser"
+NEKO_DESKTOP_SCREEN = "1920x1080@30"
+# API keys used for authentication
+NEKO_MEMBER_MULTIUSER_USER_PASSWORD = "${user_password}"
+# API keys used for authentication
+NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD = "${admin_password}"
+NEKO_WEBRTC_EPR = "52000-52100"
+NEKO_WEBRTC_ICELITE = "1"
+
+[[config.mounts]]
diff --git a/blueprints/omni-tools/docker-compose.yml b/blueprints/omni-tools/docker-compose.yml
new file mode 100644
index 00000000..166cc636
--- /dev/null
+++ b/blueprints/omni-tools/docker-compose.yml
@@ -0,0 +1,6 @@
+services:
+ omni-tools:
+ image: iib0011/omni-tools:latest
+ restart: unless-stopped
+ ports:
+ - 80
diff --git a/blueprints/omni-tools/logo.png b/blueprints/omni-tools/logo.png
new file mode 100644
index 00000000..95504b10
Binary files /dev/null and b/blueprints/omni-tools/logo.png differ
diff --git a/blueprints/omni-tools/template.toml b/blueprints/omni-tools/template.toml
new file mode 100644
index 00000000..0c34442e
--- /dev/null
+++ b/blueprints/omni-tools/template.toml
@@ -0,0 +1,14 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "omni-tools"
+port = 80
+host = "${main_domain}"
+
+[config.env]
+# API Key
+LOCIZE_API_KEY = ""
+
+[[config.mounts]]
diff --git a/blueprints/opengist/docker-compose.yml b/blueprints/opengist/docker-compose.yml
new file mode 100644
index 00000000..a321052a
--- /dev/null
+++ b/blueprints/opengist/docker-compose.yml
@@ -0,0 +1,17 @@
+# docker-compose.yml
+version: "3.8"
+services:
+ opengist:
+ image: ghcr.io/thomiceli/opengist:1
+ restart: unless-stopped
+ ports:
+ - 6157 # HTTP port
+ - 2222 # SSH port (optional)
+ volumes:
+ - opengist-data:/opengist
+ environment:
+ - UID=${UID}
+ - GID=${GID}
+ - OG_LOG_LEVEL=${OG_LOG_LEVEL}
+volumes:
+ opengist-data: {}
diff --git a/blueprints/opengist/logo.svg b/blueprints/opengist/logo.svg
new file mode 100644
index 00000000..90e07819
--- /dev/null
+++ b/blueprints/opengist/logo.svg
@@ -0,0 +1,29 @@
+
+
+
diff --git a/blueprints/opengist/template.toml b/blueprints/opengist/template.toml
new file mode 100644
index 00000000..a974ffc5
--- /dev/null
+++ b/blueprints/opengist/template.toml
@@ -0,0 +1,18 @@
+# template.toml
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "opengist"
+port = 6157
+host = "${main_domain}"
+
+[config.env]
+UID = "1001"
+GID = "1001"
+OG_LOG_LEVEL = "info"
+
+[[config.mounts]]
+# This template uses a named volume defined in the docker-compose.yml,
+# so no file mounts need to be configured here.
diff --git a/blueprints/openhands/docker-compose.yml b/blueprints/openhands/docker-compose.yml
new file mode 100644
index 00000000..03d5048a
--- /dev/null
+++ b/blueprints/openhands/docker-compose.yml
@@ -0,0 +1,36 @@
+# The 'version' attribute is obsolete and has been removed.
+services:
+ openhands:
+ # Corrected the Docker image to what appears to be the official registry path.
+ # This was the cause of the "pull access denied" error.
+ image: docker.all-hands.dev/all-hands-ai/openhands:latest
+ restart: unless-stopped
+
+ # The port is exposed without mapping. Dokploy handles the routing via the domain.
+ ports:
+ - "3000"
+
+ # Environment variables are sourced from the template.toml file.
+ environment:
+ - SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE}
+ - WORKSPACE_MOUNT_PATH=/opt/workspace_base
+
+ # Allows the container to communicate with the host's Docker daemon.
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
+
+ # Volumes for persistent data. Named volumes are used instead of host mounts.
+ # The docker socket is mounted to allow OpenHands to manage other containers.
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - openhands-config:/.openhands
+ - openhands-workspace:/opt/workspace_base
+
+ # These flags are necessary for the interactive shell functionality of OpenHands.
+ stdin_open: true
+ tty: true
+
+# Named volumes are defined here to persist configuration and workspace data.
+volumes:
+ openhands-config: {}
+ openhands-workspace: {}
diff --git a/blueprints/openhands/image.png b/blueprints/openhands/image.png
new file mode 100644
index 00000000..7cd83d02
Binary files /dev/null and b/blueprints/openhands/image.png differ
diff --git a/blueprints/openhands/template.toml b/blueprints/openhands/template.toml
new file mode 100644
index 00000000..ce56991d
--- /dev/null
+++ b/blueprints/openhands/template.toml
@@ -0,0 +1,153 @@
+[variables]
+main_domain = "${domain}"
+openhands_api_key = "${password:64}"
+
+[config]
+[[config.domains]]
+serviceName = "openhands"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+SANDBOX_RUNTIME_CONTAINER_IMAGE="docker.all-hands.dev/all-hands-ai/runtime:0.50-nikolaik"
+
+# Defines a file mount to create the OpenHands configuration file inside the container.
+# The file will be placed within the 'openhands-config' volume.
+[[config.mounts]]
+filePath = "/.openhands/config.toml"
+content = """
+###################### OpenHands Configuration Example ######################
+#
+# All settings have default values, so you only need to uncomment and
+# modify what you want to change
+# The fields within each section are sorted in alphabetical order.
+#
+##############################################################################
+
+#################################### Core ####################################
+# General core configurations
+##############################################################################
+[core]
+# workspace_base = "./workspace"
+# cache_dir = "/tmp/cache"
+# debug = false
+# disable_color = false
+# save_trajectory_path="./trajectories"
+# save_screenshots_in_trajectory = false
+# replay_trajectory_path = ""
+# file_store_path = "/tmp/file_store"
+# file_store = "memory"
+# file_uploads_max_file_size_mb = 0
+# enable_browser = true
+# max_budget_per_task = 0.0
+# max_iterations = 500
+# workspace_mount_path_in_sandbox = "/workspace"
+# workspace_mount_path = ""
+# workspace_mount_rewrite = ""
+# run_as_openhands = true
+# runtime = "docker"
+# default_agent = "CodeActAgent"
+# jwt_secret = ""
+# file_uploads_restrict_file_types = false
+# file_uploads_allowed_extensions = [".*"]
+# enable_default_condenser = true
+# max_concurrent_conversations = 3
+# conversation_max_age_seconds = 864000 # 10 days
+
+#################################### LLM #####################################
+# Configuration for LLM models (group name starts with 'llm')
+##############################################################################
+[llm]
+# API key to use. It is being sourced from the Dokploy template variables.
+api_key = "${openhands_api_key}" # API Key
+# base_url = ""
+# api_version = ""
+# reasoning_effort = "medium"
+# input_cost_per_token = 0.0
+# output_cost_per_token = 0.0
+# custom_llm_provider = ""
+# max_message_chars = 10000
+# max_input_tokens = 0
+# max_output_tokens = 0
+model = "gpt-4o"
+# num_retries = 8
+# retry_max_wait = 120
+# retry_min_wait = 15
+# retry_multiplier = 2.0
+# drop_params = false
+# modify_params = true
+# caching_prompt = true
+# ollama_base_url = ""
+# temperature = 0.0
+# timeout = 0
+# top_p = 1.0
+# disable_vision = true
+# custom_tokenizer = ""
+# native_tool_calling = None
+# safety_settings = []
+
+[llm.draft_editor]
+# correct_num = 5
+
+[llm.gpt4o-mini]
+api_key = "${openhands_api_key}" # API Key
+model = "gpt-4o"
+
+#################################### Agent ###################################
+# Configuration for agents
+##############################################################################
+[agent]
+enable_Browse = true
+# enable_llm_editor = false
+enable_editor = true
+enable_jupyter = true
+enable_cmd = true
+enable_think = true
+enable_finish = true
+# llm_config = 'your-llm-config-group'
+# enable_prompt_extensions = true
+# disabled_microagents = []
+enable_history_truncation = true
+# enable_condensation_request = false
+
+#################################### Sandbox ###################################
+# Configuration for the sandbox
+##############################################################################
+[sandbox]
+# timeout = 120
+# user_id = 1000
+# base_container_image = "nikolaik/python-nodejs:python3.12-nodejs22"
+# use_host_network = false
+# runtime_extra_build_args = ["--network=host", "--add-host=host.docker.internal:host-gateway"]
+# enable_auto_lint = false
+# initialize_plugins = true
+# runtime_extra_deps = ""
+# runtime_startup_env_vars = {}
+# browsergym_eval_env = ""
+# platform = ""
+# force_rebuild_runtime = false
+# runtime_container_image = ""
+# keep_runtime_alive = false
+# pause_closed_runtimes = false
+# close_delay = 300
+# rm_all_containers = false
+# enable_gpu = false
+# cuda_visible_devices = ''
+# docker_runtime_kwargs = {}
+# vscode_port = 41234
+# volumes = "/my/host/dir:/workspace:rw,/path2:/workspace/path2:ro"
+
+#################################### Security ###################################
+# Configuration for security features
+##############################################################################
+[security]
+# confirmation_mode = false
+# security_analyzer = ""
+# enable_security_analyzer = false
+
+#################################### Condenser #################################
+# Condensers control how conversation history is managed
+##############################################################################
+[condenser]
+type = "noop"
+"""
\ No newline at end of file
diff --git a/blueprints/pinchflat/docker-compose.yml b/blueprints/pinchflat/docker-compose.yml
new file mode 100644
index 00000000..78c4774c
--- /dev/null
+++ b/blueprints/pinchflat/docker-compose.yml
@@ -0,0 +1,7 @@
+version: "3"
+services:
+ pinchflat:
+ image: ghcr.io/kieraneglin/pinchflat:latest
+ volumes:
+ - ../files/config:/config
+ - ../files/downloads:/downloads
diff --git a/blueprints/pinchflat/logo.png b/blueprints/pinchflat/logo.png
new file mode 100644
index 00000000..549b9566
Binary files /dev/null and b/blueprints/pinchflat/logo.png differ
diff --git a/blueprints/pinchflat/template.toml b/blueprints/pinchflat/template.toml
new file mode 100644
index 00000000..5047907c
--- /dev/null
+++ b/blueprints/pinchflat/template.toml
@@ -0,0 +1,31 @@
+[variables]
+main_domain = "${domain}"
+basic_auth_password = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "pinchflat"
+port = 8945
+host = "${main_domain}"
+
+[config.env]
+TZ = "America/New_York"
+LOG_LEVEL = "debug"
+UMASK = "022"
+BASIC_AUTH_USERNAME = ""
+BASIC_AUTH_PASSWORD = "${basic_auth_password}"
+EXPOSE_FEED_ENDPOINTS = "false"
+ENABLE_IPV6 = "false"
+JOURNAL_MODE = "wal"
+TZ_DATA_DIR = "/etc/elixir_tzdata_data"
+BASE_ROUTE_PATH = "/"
+YT_DLP_WORKER_CONCURRENCY = "2"
+ENABLE_PROMETHEUS = "false"
+
+[[config.mounts]]
+filePath = "/files/config"
+content = ""
+
+[[config.mounts]]
+filePath = "/files/downloads"
+content = ""
\ No newline at end of file
diff --git a/blueprints/snapp/docker-compose.yml b/blueprints/snapp/docker-compose.yml
new file mode 100644
index 00000000..fec99b75
--- /dev/null
+++ b/blueprints/snapp/docker-compose.yml
@@ -0,0 +1,28 @@
+version: "3.8"
+services:
+ snapp:
+ image: uraniadev/snapp:0.9-rc-020
+ ports:
+ - 3000
+ environment:
+ - DATABASE_URL=${DATABASE_URL}
+ - DATABASE_PROVIDER=${DATABASE_PROVIDER}
+ - TOKEN_SECRET=${TOKEN_SECRET} # API Key for authentication token
+ - ORIGIN=${ORIGIN}
+ - DISABLED_EMAIL_AND_PASSWORD=${DISABLED_EMAIL_AND_PASSWORD}
+ - LOG_LEVEL=${LOG_LEVEL}
+ - PORT=${PORT}
+ - ADMIN_USERNAME=${ADMIN_USERNAME}
+ - ADMIN_EMAIL=${ADMIN_EMAIL}
+ - ADMIN_PASSWORD=${ADMIN_PASSWORD}
+ - ENABLE_SIGNUP=${ENABLE_SIGNUP}
+ - ENABLED_MFA=${ENABLED_MFA}
+ - PUBLIC_URL=${PUBLIC_URL}
+ - APPNAME=${APPNAME}
+ - PUBLIC_EXTRA_GROUPS_EDITABLE=${PUBLIC_EXTRA_GROUPS_EDITABLE}
+ - URLS_VIA_GROUPS_ONLY=${URLS_VIA_GROUPS_ONLY}
+ - HOST=${HOST}
+ volumes:
+ - ../files/snapp-db:/app/db.sqlite
+volumes:
+ snapp-db: {}
diff --git a/blueprints/snapp/logo.png b/blueprints/snapp/logo.png
new file mode 100644
index 00000000..4fd81122
Binary files /dev/null and b/blueprints/snapp/logo.png differ
diff --git a/blueprints/snapp/template.toml b/blueprints/snapp/template.toml
new file mode 100644
index 00000000..252150e8
--- /dev/null
+++ b/blueprints/snapp/template.toml
@@ -0,0 +1,34 @@
+[variables]
+main_domain = "${domain}"
+token_secret = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "snapp"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+DATABASE_URL = "file:./db.sqlite"
+DATABASE_PROVIDER = "sqlite" # Options: postgres | mysql | sqlite
+DISABLED_EMAIL_AND_PASSWORD = "false"
+LOG_LEVEL = "debug"
+ORIGIN = "http://${main_domain}"
+PORT = "3000"
+ADMIN_USERNAME = "admin"
+ADMIN_EMAIL = "info@example.org"
+ADMIN_PASSWORD = "${password:16}"
+TOKEN_SECRET = "${token_secret}" # API Key for authentication token
+ENABLE_SIGNUP = "true"
+ENABLED_MFA = "false"
+PUBLIC_URL = "${main_domain}"
+APPNAME = "Snapp"
+PUBLIC_EXTRA_GROUPS_EDITABLE = "true"
+URLS_VIA_GROUPS_ONLY = "false"
+HOST = "0.0.0.0"
+
+[[config.mounts]]
+filePath = "/files/snapp-db/db.sqlite"
+content = """
+# SQLite database file for Snapp
+"""
\ No newline at end of file
diff --git a/blueprints/tianji/docker-compose.yml b/blueprints/tianji/docker-compose.yml
new file mode 100644
index 00000000..a6d6c2e6
--- /dev/null
+++ b/blueprints/tianji/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ tianji:
+ image: moonrailgun/tianji
+ ports:
+ - "12345"
+ environment:
+ DATABASE_URL: postgresql://tianji:tianji@postgres:5432/tianji
+ # API Key
+ JWT_SECRET: ${jwt_secret}
+ ALLOW_REGISTER: "false"
+ ALLOW_OPENAPI: "true"
+ depends_on:
+ - postgres
+ postgres:
+ image: postgres:15.4-alpine
+ environment:
+ POSTGRES_DB: tianji
+ POSTGRES_USER: tianji
+ POSTGRES_PASSWORD: tianji
+ volumes:
+ - tianji-db-data:/var/lib/postgresql/data
+volumes:
+ tianji-db-data: {}
diff --git a/blueprints/tianji/logo.svg b/blueprints/tianji/logo.svg
new file mode 100644
index 00000000..6e2ebeae
--- /dev/null
+++ b/blueprints/tianji/logo.svg
@@ -0,0 +1,16 @@
+
diff --git a/blueprints/tianji/template.toml b/blueprints/tianji/template.toml
new file mode 100644
index 00000000..777023ec
--- /dev/null
+++ b/blueprints/tianji/template.toml
@@ -0,0 +1,16 @@
+[variables]
+main_domain = "${domain}"
+# API Key: Used for session security.
+jwt_secret = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "tianji"
+port = 12345
+host = "${main_domain}"
+
+[[config.mounts]]
+serviceName = "postgres"
+type = "volume"
+source = "tianji-db-data"
+target = "/var/lib/postgresql/data"
diff --git a/blueprints/web-check/docker-compose.yml b/blueprints/web-check/docker-compose.yml
new file mode 100644
index 00000000..d8ed1e06
--- /dev/null
+++ b/blueprints/web-check/docker-compose.yml
@@ -0,0 +1,7 @@
+version: '3.9'
+services:
+ web-check:
+ image: lissy93/web-check
+ ports:
+ - 3000
+ restart: unless-stopped
diff --git a/blueprints/web-check/logo.png b/blueprints/web-check/logo.png
new file mode 100644
index 00000000..5b138476
Binary files /dev/null and b/blueprints/web-check/logo.png differ
diff --git a/blueprints/web-check/template.toml b/blueprints/web-check/template.toml
new file mode 100644
index 00000000..e70d4baa
--- /dev/null
+++ b/blueprints/web-check/template.toml
@@ -0,0 +1,31 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "web-check"
+port = 3000
+host = "${main_domain}"
+
+[config.env]
+GOOGLE_CLOUD_API_KEY = ""
+TORRENT_IP_API_KEY = ""
+SECURITY_TRAILS_API_KEY = ""
+BUILT_WITH_API_KEY = ""
+URL_SCAN_API_KEY = ""
+TRANCO_USERNAME = ""
+TRANCO_API_KEY = ""
+CLOUDMERSIVE_API_KEY = ""
+
+REACT_APP_SHODAN_API_KEY = ""
+REACT_APP_WHO_API_KEY = ""
+
+# CHROME_PATH = "/usr/bin/chromium"
+PORT = "3000"
+DISABLE_GUI = "false"
+API_TIMEOUT_LIMIT = "10000"
+API_CORS_ORIGIN = "*"
+API_ENABLE_RATE_LIMIT = "true"
+ENABLE_ANALYTICS = "false"
+
+[[config.mounts]]
diff --git a/blueprints/yt-dlp-webui/docker-compose.yml b/blueprints/yt-dlp-webui/docker-compose.yml
new file mode 100644
index 00000000..0bde5e08
--- /dev/null
+++ b/blueprints/yt-dlp-webui/docker-compose.yml
@@ -0,0 +1,16 @@
+version: "3.8"
+services:
+ yt-dlp-webui:
+ image: marcobaobao/yt-dlp-webui
+ ports:
+ - 3033
+ volumes:
+ - downloads:/downloads
+ - config:/config
+ healthcheck:
+ test: curl -f http://localhost:3033 || exit 1
+ restart: unless-stopped
+
+volumes:
+ downloads: {}
+ config: {}
diff --git a/blueprints/yt-dlp-webui/logo.ico b/blueprints/yt-dlp-webui/logo.ico
new file mode 100644
index 00000000..1c1753bb
Binary files /dev/null and b/blueprints/yt-dlp-webui/logo.ico differ
diff --git a/blueprints/yt-dlp-webui/template.toml b/blueprints/yt-dlp-webui/template.toml
new file mode 100644
index 00000000..488aea4c
--- /dev/null
+++ b/blueprints/yt-dlp-webui/template.toml
@@ -0,0 +1,12 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "yt-dlp-webui"
+port = 3033
+host = "${main_domain}"
+
+[config.env]
+
+[[config.mounts]]
diff --git a/meta.json b/meta.json
index b4900376..63d9b770 100644
--- a/meta.json
+++ b/meta.json
@@ -28,13 +28,7 @@
"docs": "https://cap.so/docs/"
},
"logo": "capso.png",
- "tags": [
- "web",
- "s3",
- "mysql",
- "development",
- "self-hosted"
- ]
+ "tags": ["web", "s3", "mysql", "development", "self-hosted"]
},
{
"id": "authentik",
@@ -3322,16 +3316,16 @@
{
"id": "movary",
"name": "Movary",
- "version": "0.66.2",
- "description": "Self-hosted web app to track, rate and explore your movie watch history. Offers detailed statistics, third-party integrations for platforms like Trakt, Letterboxd, Netflix, and automated play tracking for Plex, Jellyfin, Emby or Kodi.",
+ "version": "latest",
+ "description": "Movary is a self-hosted platform for tracking and managing your watched movies using TMDB.",
"logo": "movary.png",
"links": {
"github": "https://github.com/leepeuker/movary",
"website": "https://movary.org/",
- "docs": "https://movary.org/docs/",
- "demo": "https://demo.movary.org/"
+ "docs": "https://docs.movary.org/"
},
"tags": [
+ "media",
"movies",
"movie-tracker",
"self-hosted",
@@ -3517,24 +3511,6 @@
"aggregator"
]
},
- {
- "id": "gitlab-ce",
- "name": "GitLab CE",
- "version": "latest",
- "description": "GitLab Community Edition is a free and open source platform for managing Git repositories, CI/CD pipelines, and project management.",
- "logo": "gitlab-ce.svg",
- "links": {
- "github": "https://gitlab.com/gitlab-org/gitlab-ce",
- "website": "https://gitlab.com/",
- "docs": "https://docs.gitlab.com/ee/"
- },
- "tags": [
- "git",
- "ci-cd",
- "version-control",
- "project-management"
- ]
- },
{
"id": "memos",
"name": "Memos",
@@ -3546,10 +3522,352 @@
"website": "https://www.usememos.com/",
"docs": "https://www.usememos.com/docs"
},
+ "tags": ["productivity", "notes", "bookmarks"]
+ },
+ {
+ "id": "linkstack",
+ "name": "LinkStack",
+ "version": "latest",
+ "description": "LinkStack is an open-source link-in-bio platform for sharing multiple links using a customizable landing page.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/linkstackorg/linkstack",
+ "website": "https://linkstack.org/",
+ "docs": "https://docs.linkstack.org/"
+ },
+ "tags": ["bio", "personal", "cms", "php"]
+ },
+ {
+ "id": "opengist",
+ "name": "OpenGist",
+ "version": "1",
+ "description": "OpenGist is a self-hosted pastebin alternative.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/thomiceli/opengist",
+ "website": "https://github.com/thomiceli/opengist",
+ "docs": "https://github.com/thomiceli/opengist"
+ },
"tags": [
- "productivity",
- "notes",
- "bookmarks"
+ "pastebin",
+ "code",
+ "snippets",
+ "self-hosted"
+ ]
+ },
+ {
+ "id": "snapp",
+ "name": "Snapp",
+ "version": "0.9-rc-020",
+ "description": "Snapp is a self-hosted screenshot sharing service with user management and authentication.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/UraniaDev/snapp",
+ "website": "https://github.com/UraniaDev/snapp",
+ "docs": "https://github.com/UraniaDev/snapp"
+ },
+ "tags": [
+ "screenshot",
+ "sharing",
+ "self-hosted",
+ "authentication"
+ ]
+ },
+ {
+ "id": "commafeed",
+ "name": "CommaFeed",
+ "version": "latest",
+ "description": "CommaFeed is an open-source feed reader and news aggregator, designed to be lightweight and extensible, with PostgreSQL as its database.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/Athou/commafeed",
+ "website": "https://www.commafeed.com/",
+ "docs": "https://github.com/Athou/commafeed/wiki"
+ },
+ "tags": [
+ "feed-reader",
+ "news-aggregator",
+ "rss"
+ ]
+ },
+ {
+ "id": "convertx",
+ "name": "ConvertX",
+ "version": "latest",
+ "description": "ConvertX is a service for converting media files, with optional user registration and file management features.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/c4illin/ConvertX",
+ "website": "https://github.com/c4illin/ConvertX",
+ "docs": "https://github.com/c4illin/ConvertX#environment-variables"
+ },
+ "tags": [
+ "media",
+ "converter",
+ "ffmpeg"
+ ]
+ },
+ {
+ "id": "metube",
+ "name": "MeTube",
+ "version": "latest",
+ "description": "MeTube is a web-based YouTube downloader that allows downloading videos and audio using yt-dlp.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/alexta69/metube",
+ "website": "https://github.com/alexta69/metube",
+ "docs": "https://github.com/alexta69/metube/wiki"
+ },
+ "tags": [
+ "downloader",
+ "youtube",
+ "media"
+ ]
+ },
+ {
+ "id": "pinchflat",
+ "name": "Pinchflat",
+ "version": "latest",
+ "description": "Pinchflat is a self-hosted YouTube downloader that allows you to download videos and playlists with a simple web interface.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/kieraneglin/pinchflat",
+ "website": "https://github.com/kieraneglin/pinchflat",
+ "docs": "https://github.com/kieraneglin/pinchflat"
+ },
+ "tags": [
+ "youtube",
+ "downloader",
+ "media"
+ ]
+ },
+ {
+ "id": "yt-dlp-webui",
+ "name": "yt-dlp-webui",
+ "version": "latest",
+ "description": "yt-dlp-webui is a web interface for yt-dlp, allowing you to download videos and audio from various platforms with a simple web UI.",
+ "logo": "logo.ico",
+ "links": {
+ "github": "https://github.com/marcopiovanello/yt-dlp-web-ui",
+ "website": "https://github.com/marcopiovanello/yt-dlp-web-ui",
+ "docs": "https://github.com/marcopiovanello/yt-dlp-web-ui"
+ },
+ "tags": [
+ "downloader",
+ "youtube",
+ "media",
+ "webui"
+ ]
+ },
+ {
+ "id": "flaresolverr",
+ "name": "FlareSolverr",
+ "version": "latest",
+ "description": "FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/FlareSolverr/FlareSolverr",
+ "website": "https://github.com/FlareSolverr/FlareSolverr",
+ "docs": "https://github.com/FlareSolverr/FlareSolverr"
+ },
+ "tags": [
+ "proxy",
+ "cloudflare",
+ "bypass",
+ "ddos-guard"
+ ]
+ },
+ {
+ "id": "neko",
+ "name": "Neko",
+ "version": "latest",
+ "description": "Neko is a self-hosted virtual browser that runs in Docker and allows you to share browser sessions with others.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/m1k1o/neko",
+ "website": "https://github.com/m1k1o/neko",
+ "docs": "https://github.com/m1k1o/neko"
+ },
+ "tags": [
+ "browser",
+ "virtual",
+ "sharing",
+ "remote"
+ ]
+ },
+ {
+ "id": "omni-tools",
+ "name": "Omni-Tools",
+ "version": "latest",
+ "description": "Omni-Tools is a collection of useful tools in a single self-hosted web application.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/iib0011/omni-tools",
+ "website": "https://github.com/iib0011/omni-tools",
+ "docs": "https://github.com/iib0011/omni-tools"
+ },
+ "tags": [
+ "tools",
+ "utilities",
+ "collection",
+ "self-hosted"
+ ]
+ },
+ {
+ "id": "openhands",
+ "name": "OpenHands",
+ "version": "0.1.1",
+ "description": "OpenHands is an open-source platform for running and managing AI agents.",
+ "logo": "image.png",
+ "links": {
+ "github": "https://github.com/all-hands-ai/OpenHands",
+ "website": "https://github.com/all-hands-ai/OpenHands",
+ "docs": "https://github.com/all-hands-ai/OpenHands"
+ },
+ "tags": [
+ "ai",
+ "agents",
+ "llm",
+ "openai"
+ ]
+ },
+ {
+ "id": "web-check",
+ "name": "Web-Check",
+ "version": "latest",
+ "description": "Web-Check is a powerful all-in-one website analyzer that provides detailed insights into any website's security, performance, and functionality.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/lissy93/web-check",
+ "website": "https://github.com/lissy93/web-check",
+ "docs": "https://github.com/lissy93/web-check"
+ },
+ "tags": [
+ "website-analyzer",
+ "security",
+ "performance",
+ "seo"
+ ]
+ },
+ {
+ "id": "dumbdrop",
+ "name": "DumbDrop",
+ "version": "latest",
+ "description": "DumbDrop is a simple, self-hosted file sharing service with no database or authentication required.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/dumbwareio/dumbdrop",
+ "website": "https://www.dumbware.io/software/DumbDrop/",
+ "docs": "https://github.com/dumbwareio/dumbdrop"
+ },
+ "tags": [
+ "file-sharing",
+ "self-hosted",
+ "simple"
+ ]
+ },
+ {
+ "id": "dumbassets",
+ "name": "DumbAssets",
+ "version": "latest",
+ "description": "DumbAssets is a simple, self-hosted asset tracking service with no database or authentication required.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/dumbwareio/dumbassets",
+ "website": "https://www.dumbware.io/software/DumbAssets/",
+ "docs": "https://github.com/dumbwareio/dumbassets"
+ },
+ "tags": [
+ "asset-tracking",
+ "self-hosted",
+ "simple"
+ ]
+ },
+ {
+ "id": "dumbpad",
+ "name": "DumbPad",
+ "version": "latest",
+ "description": "DumbPad is a simple, self-hosted notepad service with PIN protection and no database required.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/dumbwareio/dumbpad",
+ "website": "https://www.dumbware.io/software/DumbPad/",
+ "docs": "https://github.com/dumbwareio/dumbpad"
+ },
+ "tags": [
+ "notepad",
+ "self-hosted",
+ "simple"
+ ]
+ },
+ {
+ "id": "dumbbudget",
+ "name": "DumbBudget",
+ "version": "latest",
+ "description": "DumbBudget is a simple, self-hosted budget tracking service with PIN protection and no database required.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/dumbwareio/dumbbudget",
+ "website": "https://www.dumbware.io/software/DumbBudget/",
+ "docs": "https://github.com/dumbwareio/dumbbudget"
+ },
+ "tags": [
+ "budget",
+ "finance",
+ "self-hosted",
+ "simple"
+ ]
+ },
+ {
+ "id": "tianji",
+ "name": "Tianji",
+ "version": "latest",
+ "description": "Tianji is a lightweight web analytic service and uptime monitoring tool.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/msgbyte/tianji",
+ "website": "https://github.com/msgbyte/tianji",
+ "docs": "https://github.com/msgbyte/tianji"
+ },
+ "tags": [
+ "analytics",
+ "monitoring",
+ "web",
+ "uptime"
+ ]
+ },
+ {
+ "id": "directory-lister",
+ "name": "Directory Lister",
+ "version": "latest",
+ "description": "Directory Lister is a simple PHP application that lists the contents of any web-accessible directory and allows navigation there within.",
+ "logo": "logo.png",
+ "links": {
+ "github": "https://github.com/DirectoryLister/DirectoryLister",
+ "website": "https://www.directorylister.com/",
+ "docs": "https://docs.directorylister.com/"
+ },
+ "tags": [
+ "file-manager",
+ "directory-listing",
+ "php"
+ ]
+ },
+ {
+ "id": "grimoire",
+ "name": "Grimoire",
+ "version": "latest",
+ "description": "Grimoire is a self-hosted bookmarking app designed for speed and simplicity.",
+ "logo": "logo.webp",
+ "links": {
+ "github": "https://github.com/goniszewski/grimoire",
+ "website": "https://github.com/goniszewski/grimoire",
+ "docs": "https://github.com/goniszewski/grimoire"
+ },
+ "tags": [
+ "bookmarks",
+ "self-hosted",
+ "knowledge-management"
]
},
{