Dokploy

Quant-UX

Quant-UX is an open-source UX design and prototyping tool that allows you to create interactive prototypes, conduct user research, and analyze user behavior.

Quant-UX logo

Configuration

version: '3'

services:
  mongo:
    restart: always
    image: mongo
    volumes:
      - mongo_data:/data/db
  qux-fe:
    restart: always
    image: klausenschaefersinho/quant-ux
    environment:
      - QUX_PROXY_URL=http://quant-ux-backend:8080
      - QUX_AUTH=${QUX_AUTH}
      - QUX_KEYCLOAK_REALM=${QUX_KEYCLOAK_REALM}
      - QUX_KEYCLOAK_CLIENT=${QUX_KEYCLOAK_CLIENT}
      - QUX_KEYCLOAK_URL=${QUX_KEYCLOAK_URL}
      - QUX_WS_URL=${QUX_WS_URL}
    links:
      - mongo
      - qux-be
    ports:
      - 8082
    depends_on:
      - qux-be

  qux-be:
    restart: always
    image: klausenschaefersinho/quant-ux-backend
    volumes:
      - quant_ux_data:/app-data
    environment:
      - QUX_HTTP_HOST=${QUX_HTTP_HOST}
      - QUX_HTTP_PORT=8080
      - QUX_MONGO_DB_NAME=${QUX_MONGO_DB_NAME}
      - QUX_MONGO_TABLE_PREFIX=${QUX_MONGO_TABLE_PREFIX}
      - QUX_MONGO_CONNECTION_STRING=mongodb://quant-ux-mongo:27017
      - QUX_MAIL_USER=${QUX_MAIL_USER}
      - QUX_MAIL_PASSWORD=${QUX_MAIL_PASSWORD}
      - QUX_MAIL_HOST=${QUX_MAIL_HOST}
      - QUX_JWT_PASSWORD=${QUX_JWT_PASSWORD}
      - QUX_IMAGE_FOLDER_USER=/app-data/qux-images
      - QUX_IMAGE_FOLDER_APPS=/app-data/qux-image-apps
      - TZ=${TZ}
      - QUX_AUTH_SERVICE=${QUX_AUTH_SERVICE}
      - QUX_KEYCLOAK_SERVER=${QUX_KEYCLOAK_SERVER}
      - QUX_KEYCLOAK_REALM=${QUX_KEYCLOAK_REALM}
      - QUX_USER_ALLOW_SIGNUP=${QUX_USER_ALLOW_SIGNUP}
      - QUX_USER_ALLOWED_DOMAINS=${QUX_USER_ALLOWED_DOMAINS}
    depends_on:
      - mongo

  qux-ws:
    restart: always
    image: klausenschaefersinho/quant-ux-websocket
    environment:
      - QUX_SERVER=http://quant-ux-backend:8080/
      - QUX_SERVER_PORT=8086
    ports:
      - 8086
    links:
      - qux-be
    depends_on:
      - qux-be

volumes:
  mongo_data:
  quant_ux_data:
[variables]
main_domain = "${domain}"
ws_domain = "${domain}"
qux_auth = "qux"
qux_jwt_password = "${password:64}"
qux_mongo_db_name = "quantux"
qux_mongo_table_prefix = "quantux"
qux_mail_user = "${email}"
qux_mail_password = "${password:32}"
qux_mail_host = "mail.example.com"
qux_timezone = "America/Chicago"
qux_auth_service = "qux"
qux_user_allow_signup = "true"
qux_user_allowed_domains = "*"
qux_keycloak_realm = ""
qux_keycloak_client = ""
qux_keycloak_url = ""
qux_keycloak_server = ""

[config]
env = [
  "QUX_HTTP_HOST=https://${main_domain}",
  "QUX_AUTH=${qux_auth}",
  "QUX_JWT_PASSWORD=${qux_jwt_password}",
  "QUX_MONGO_DB_NAME=${qux_mongo_db_name}",
  "QUX_MONGO_TABLE_PREFIX=${qux_mongo_table_prefix}",
  "QUX_MAIL_USER=${qux_mail_user}",
  "QUX_MAIL_PASSWORD=${qux_mail_password}",
  "QUX_MAIL_HOST=${qux_mail_host}",
  "TZ=${qux_timezone}",
  "QUX_AUTH_SERVICE=${qux_auth_service}",
  "QUX_KEYCLOAK_SERVER=${qux_keycloak_server}",
  "QUX_KEYCLOAK_REALM=${qux_keycloak_realm}",
  "QUX_KEYCLOAK_CLIENT=${qux_keycloak_client}",
  "QUX_KEYCLOAK_URL=${qux_keycloak_url}",
  "QUX_USER_ALLOW_SIGNUP=${qux_user_allow_signup}",
  "QUX_USER_ALLOWED_DOMAINS=${qux_user_allowed_domains}",
  "QUX_WS_URL=wss://${ws_domain}"
]

[[config.domains]]
serviceName = "qux-fe"
port = 8082
host = "${main_domain}"

[[config.domains]]
serviceName = "qux-ws"
port = 8086
host = "${ws_domain}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246ICczJ1xuXG5zZXJ2aWNlczpcbiAgbW9uZ286XG4gICAgcmVzdGFydDogYWx3YXlzXG4gICAgaW1hZ2U6IG1vbmdvXG4gICAgdm9sdW1lczpcbiAgICAgIC0gbW9uZ29fZGF0YTovZGF0YS9kYlxuICBxdXgtZmU6XG4gICAgcmVzdGFydDogYWx3YXlzXG4gICAgaW1hZ2U6IGtsYXVzZW5zY2hhZWZlcnNpbmhvL3F1YW50LXV4XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFFVWF9QUk9YWV9VUkw9aHR0cDovL3F1YW50LXV4LWJhY2tlbmQ6ODA4MFxuICAgICAgLSBRVVhfQVVUSD0ke1FVWF9BVVRIfVxuICAgICAgLSBRVVhfS0VZQ0xPQUtfUkVBTE09JHtRVVhfS0VZQ0xPQUtfUkVBTE19XG4gICAgICAtIFFVWF9LRVlDTE9BS19DTElFTlQ9JHtRVVhfS0VZQ0xPQUtfQ0xJRU5UfVxuICAgICAgLSBRVVhfS0VZQ0xPQUtfVVJMPSR7UVVYX0tFWUNMT0FLX1VSTH1cbiAgICAgIC0gUVVYX1dTX1VSTD0ke1FVWF9XU19VUkx9XG4gICAgbGlua3M6XG4gICAgICAtIG1vbmdvXG4gICAgICAtIHF1eC1iZVxuICAgIHBvcnRzOlxuICAgICAgLSA4MDgyXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gcXV4LWJlXG5cbiAgcXV4LWJlOlxuICAgIHJlc3RhcnQ6IGFsd2F5c1xuICAgIGltYWdlOiBrbGF1c2Vuc2NoYWVmZXJzaW5oby9xdWFudC11eC1iYWNrZW5kXG4gICAgdm9sdW1lczpcbiAgICAgIC0gcXVhbnRfdXhfZGF0YTovYXBwLWRhdGFcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gUVVYX0hUVFBfSE9TVD0ke1FVWF9IVFRQX0hPU1R9XG4gICAgICAtIFFVWF9IVFRQX1BPUlQ9ODA4MFxuICAgICAgLSBRVVhfTU9OR09fREJfTkFNRT0ke1FVWF9NT05HT19EQl9OQU1FfVxuICAgICAgLSBRVVhfTU9OR09fVEFCTEVfUFJFRklYPSR7UVVYX01PTkdPX1RBQkxFX1BSRUZJWH1cbiAgICAgIC0gUVVYX01PTkdPX0NPTk5FQ1RJT05fU1RSSU5HPW1vbmdvZGI6Ly9xdWFudC11eC1tb25nbzoyNzAxN1xuICAgICAgLSBRVVhfTUFJTF9VU0VSPSR7UVVYX01BSUxfVVNFUn1cbiAgICAgIC0gUVVYX01BSUxfUEFTU1dPUkQ9JHtRVVhfTUFJTF9QQVNTV09SRH1cbiAgICAgIC0gUVVYX01BSUxfSE9TVD0ke1FVWF9NQUlMX0hPU1R9XG4gICAgICAtIFFVWF9KV1RfUEFTU1dPUkQ9JHtRVVhfSldUX1BBU1NXT1JEfVxuICAgICAgLSBRVVhfSU1BR0VfRk9MREVSX1VTRVI9L2FwcC1kYXRhL3F1eC1pbWFnZXNcbiAgICAgIC0gUVVYX0lNQUdFX0ZPTERFUl9BUFBTPS9hcHAtZGF0YS9xdXgtaW1hZ2UtYXBwc1xuICAgICAgLSBUWj0ke1RafVxuICAgICAgLSBRVVhfQVVUSF9TRVJWSUNFPSR7UVVYX0FVVEhfU0VSVklDRX1cbiAgICAgIC0gUVVYX0tFWUNMT0FLX1NFUlZFUj0ke1FVWF9LRVlDTE9BS19TRVJWRVJ9XG4gICAgICAtIFFVWF9LRVlDTE9BS19SRUFMTT0ke1FVWF9LRVlDTE9BS19SRUFMTX1cbiAgICAgIC0gUVVYX1VTRVJfQUxMT1dfU0lHTlVQPSR7UVVYX1VTRVJfQUxMT1dfU0lHTlVQfVxuICAgICAgLSBRVVhfVVNFUl9BTExPV0VEX0RPTUFJTlM9JHtRVVhfVVNFUl9BTExPV0VEX0RPTUFJTlN9XG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gbW9uZ29cblxuICBxdXgtd3M6XG4gICAgcmVzdGFydDogYWx3YXlzXG4gICAgaW1hZ2U6IGtsYXVzZW5zY2hhZWZlcnNpbmhvL3F1YW50LXV4LXdlYnNvY2tldFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBRVVhfU0VSVkVSPWh0dHA6Ly9xdWFudC11eC1iYWNrZW5kOjgwODAvXG4gICAgICAtIFFVWF9TRVJWRVJfUE9SVD04MDg2XG4gICAgcG9ydHM6XG4gICAgICAtIDgwODZcbiAgICBsaW5rczpcbiAgICAgIC0gcXV4LWJlXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gcXV4LWJlXG5cbnZvbHVtZXM6XG4gIG1vbmdvX2RhdGE6XG4gIHF1YW50X3V4X2RhdGE6XG5cbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG53c19kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5xdXhfYXV0aCA9IFwicXV4XCJcbnF1eF9qd3RfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnF1eF9tb25nb19kYl9uYW1lID0gXCJxdWFudHV4XCJcbnF1eF9tb25nb190YWJsZV9wcmVmaXggPSBcInF1YW50dXhcIlxucXV4X21haWxfdXNlciA9IFwiJHtlbWFpbH1cIlxucXV4X21haWxfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbnF1eF9tYWlsX2hvc3QgPSBcIm1haWwuZXhhbXBsZS5jb21cIlxucXV4X3RpbWV6b25lID0gXCJBbWVyaWNhL0NoaWNhZ29cIlxucXV4X2F1dGhfc2VydmljZSA9IFwicXV4XCJcbnF1eF91c2VyX2FsbG93X3NpZ251cCA9IFwidHJ1ZVwiXG5xdXhfdXNlcl9hbGxvd2VkX2RvbWFpbnMgPSBcIipcIlxucXV4X2tleWNsb2FrX3JlYWxtID0gXCJcIlxucXV4X2tleWNsb2FrX2NsaWVudCA9IFwiXCJcbnF1eF9rZXljbG9ha191cmwgPSBcIlwiXG5xdXhfa2V5Y2xvYWtfc2VydmVyID0gXCJcIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuICBcIlFVWF9IVFRQX0hPU1Q9aHR0cHM6Ly8ke21haW5fZG9tYWlufVwiLFxuICBcIlFVWF9BVVRIPSR7cXV4X2F1dGh9XCIsXG4gIFwiUVVYX0pXVF9QQVNTV09SRD0ke3F1eF9qd3RfcGFzc3dvcmR9XCIsXG4gIFwiUVVYX01PTkdPX0RCX05BTUU9JHtxdXhfbW9uZ29fZGJfbmFtZX1cIixcbiAgXCJRVVhfTU9OR09fVEFCTEVfUFJFRklYPSR7cXV4X21vbmdvX3RhYmxlX3ByZWZpeH1cIixcbiAgXCJRVVhfTUFJTF9VU0VSPSR7cXV4X21haWxfdXNlcn1cIixcbiAgXCJRVVhfTUFJTF9QQVNTV09SRD0ke3F1eF9tYWlsX3Bhc3N3b3JkfVwiLFxuICBcIlFVWF9NQUlMX0hPU1Q9JHtxdXhfbWFpbF9ob3N0fVwiLFxuICBcIlRaPSR7cXV4X3RpbWV6b25lfVwiLFxuICBcIlFVWF9BVVRIX1NFUlZJQ0U9JHtxdXhfYXV0aF9zZXJ2aWNlfVwiLFxuICBcIlFVWF9LRVlDTE9BS19TRVJWRVI9JHtxdXhfa2V5Y2xvYWtfc2VydmVyfVwiLFxuICBcIlFVWF9LRVlDTE9BS19SRUFMTT0ke3F1eF9rZXljbG9ha19yZWFsbX1cIixcbiAgXCJRVVhfS0VZQ0xPQUtfQ0xJRU5UPSR7cXV4X2tleWNsb2FrX2NsaWVudH1cIixcbiAgXCJRVVhfS0VZQ0xPQUtfVVJMPSR7cXV4X2tleWNsb2FrX3VybH1cIixcbiAgXCJRVVhfVVNFUl9BTExPV19TSUdOVVA9JHtxdXhfdXNlcl9hbGxvd19zaWdudXB9XCIsXG4gIFwiUVVYX1VTRVJfQUxMT1dFRF9ET01BSU5TPSR7cXV4X3VzZXJfYWxsb3dlZF9kb21haW5zfVwiLFxuICBcIlFVWF9XU19VUkw9d3NzOi8vJHt3c19kb21haW59XCJcbl1cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicXV4LWZlXCJcbnBvcnQgPSA4MDgyXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInF1eC13c1wiXG5wb3J0ID0gODA4NlxuaG9zdCA9IFwiJHt3c19kb21haW59XCJcblxuIgp9

Tags

design, ux, prototyping, user-research, analytics


Version: latest

On this page