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" ] }, {