{
  "manifest_version": "1.0.0",
  "template": {
    "id": "eda86304-acd4-46ed-b91a-342193a00a9e",
    "slug": "huly-v07-all-in-one-team-workspace",
    "name": "Huly v0.7 All-in-One Team Workspace",
    "description": "Projects, chat and docs in one app. Open-source Linear + Slack alternative.",
    "url": "https://railway.com/deploy/huly-v07-all-in-one-team-workspace",
    "upstream": {
      "repo_url": "https://github.com/baranberkay96/huly-railway"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "front",
      "source": {
        "image": "hardcoreeng/front:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "collaborator",
      "source": {
        "image": "hardcoreeng/collaborator:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "account",
      "source": {
        "image": "hardcoreeng/account:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "redpanda",
      "source": {
        "image": "redpandadata/redpanda:v24.3.18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/redpanda/data",
      "http": false
    },
    {
      "name": "fulltext",
      "source": {
        "image": "hardcoreeng/fulltext:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "rekoni",
      "source": {
        "image": "hardcoreeng/rekoni-service:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "proxy",
      "source": {
        "repo": "https://github.com/baranberkay96/huly-railway"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "cockroach",
      "source": {
        "repo": "https://github.com/baranberkay96/huly-railway"
      },
      "needs_volume": true,
      "volume_mount_path": "/cockroach/persist",
      "http": false
    },
    {
      "name": "workspace",
      "source": {
        "image": "hardcoreeng/workspace:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "init",
      "source": {
        "repo": "https://github.com/baranberkay96/huly-railway"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "hulypulse",
      "source": {
        "image": "hardcoreeng/service_hulypulse:0.1.29"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "stats",
      "source": {
        "image": "hardcoreeng/stats:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "kvs",
      "source": {
        "image": "hardcoreeng/hulykvs:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "elastic",
      "source": {
        "repo": "https://github.com/baranberkay96/huly-railway"
      },
      "needs_volume": true,
      "volume_mount_path": "/usr/share/elasticsearch/data",
      "http": false
    },
    {
      "name": "transactor",
      "source": {
        "image": "hardcoreeng/transactor:v0.7.426"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "front",
      "description": "Port the front server listens on; Railway's healthcheck probes it.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "TITLE",
      "service": "front",
      "description": "Browser title of your instance.",
      "secret": false,
      "strategy": "default",
      "default": "Huly"
    },
    {
      "key": "GMAIL_URL",
      "service": "front",
      "description": "Gmail integration URL (service not included; as upstream).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PULSE_URL",
      "service": "front",
      "description": "Public HulyPulse URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "S3_BUCKET",
      "service": "front",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "front",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "front",
      "description": "Public stats URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "REKONI_URL",
      "service": "front",
      "description": "Public Rekoni URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "UPLOAD_URL",
      "service": "front",
      "description": "Upload path served by front.",
      "secret": false,
      "strategy": "default",
      "default": "/files"
    },
    {
      "key": "ELASTIC_URL",
      "service": "front",
      "description": "Elasticsearch (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "front",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_PORT",
      "service": "front",
      "description": "Front server port.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "front",
      "description": "Public account service URL (used by browsers).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "CALENDAR_URL",
      "service": "front",
      "description": "Calendar integration URL (service not included; as upstream).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "TELEGRAM_URL",
      "service": "front",
      "description": "Telegram integration URL (service not included; as upstream).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "front",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "front",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_SECRET",
      "service": "front",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DISABLE_SIGNUP",
      "service": "front",
      "description": "Hide the sign-up form (follows the account service).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LAST_NAME_FIRST",
      "service": "front",
      "description": "Show people as 'Last First' (upstream default).",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "COLLABORATOR_URL",
      "service": "front",
      "description": "Public collaborator websocket URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DEFAULT_LANGUAGE",
      "service": "front",
      "description": "Default UI language.",
      "secret": false,
      "strategy": "default",
      "default": "en"
    },
    {
      "key": "DISABLED_FEATURES",
      "service": "front",
      "description": "Features that need services not included (as upstream).",
      "secret": false,
      "strategy": "default",
      "default": "auto-translate,mailboxes"
    },
    {
      "key": "ACCOUNTS_URL_INTERNAL",
      "service": "front",
      "description": "Account service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DESKTOP_UPDATES_CHANNEL",
      "service": "front",
      "description": "Desktop app update channel; keep equal to the server version without 'v'.",
      "secret": false,
      "strategy": "default",
      "default": "0.7.426"
    },
    {
      "key": "SECRET",
      "service": "collaborator",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET",
      "service": "collaborator",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "collaborator",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "collaborator",
      "description": "Stats service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "collaborator",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "collaborator",
      "description": "Account service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "collaborator",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "collaborator",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "COLLABORATOR_PORT",
      "service": "collaborator",
      "description": "Collaborator port (websocket, Y.js documents).",
      "secret": false,
      "strategy": "default",
      "default": "3078"
    },
    {
      "key": "DB_URL",
      "service": "account",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FRONT_URL",
      "service": "account",
      "description": "Public URL of Huly.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "S3_BUCKET",
      "service": "account",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "account",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "account",
      "description": "Public stats URL (as upstream).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "account",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_PORT",
      "service": "account",
      "description": "Account service port.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "account",
      "description": "Public account service URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "ACCOUNT_PORT",
      "service": "account",
      "description": "Account service port (same as SERVER_PORT).",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "QUEUE_CONFIG",
      "service": "account",
      "description": "Redpanda (Kafka API) broker.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MODEL_ENABLED",
      "service": "account",
      "description": "Enable all Huly modules.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "account",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "account",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_SECRET",
      "service": "account",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DISABLE_SIGNUP",
      "service": "account",
      "description": "Public sign-up off: the owner account is created by the init service; others join through invite links. Set false (here and on front) to allow open sign-up.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "TRANSACTOR_URL",
      "service": "account",
      "description": "Transactor endpoints: internal for services, public for browsers.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "redpanda",
      "description": "Run as root so Redpanda can write to the volume (mounted root-owned).",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "REDPANDA_MEMORY",
      "service": "redpanda",
      "description": "Memory Redpanda allocates (Seastar would otherwise size itself to the host).",
      "secret": false,
      "strategy": "default",
      "default": "1G"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "redpanda",
      "description": "Allow a clean shutdown on redeploy.",
      "secret": false,
      "strategy": "default",
      "default": "30"
    },
    {
      "key": "DB_URL",
      "service": "fulltext",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET",
      "service": "fulltext",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "fulltext",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "fulltext",
      "description": "Stats service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REKONI_URL",
      "service": "fulltext",
      "description": "Rekoni text extraction (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "fulltext",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "fulltext",
      "description": "Account service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "QUEUE_CONFIG",
      "service": "fulltext",
      "description": "Redpanda (Kafka API) broker.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "fulltext",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "fulltext",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_SECRET",
      "service": "fulltext",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FULLTEXT_DB_URL",
      "service": "fulltext",
      "description": "Elasticsearch with credentials (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ELASTIC_INDEX_NAME",
      "service": "fulltext",
      "description": "Search index name (upstream).",
      "secret": false,
      "strategy": "default",
      "default": "huly_storage_index"
    },
    {
      "key": "PORT",
      "service": "rekoni",
      "description": "Rekoni port.",
      "secret": false,
      "strategy": "default",
      "default": "4004"
    },
    {
      "key": "SECRET",
      "service": "rekoni",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "proxy",
      "description": "Port Caddy listens on; Railway routes the public domain and its healthcheck here.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "FRONT_HOST",
      "service": "proxy",
      "description": "Front server.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PULSE_HOST",
      "service": "proxy",
      "description": "HulyPulse (/_pulse -> /ws).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STATS_HOST",
      "service": "proxy",
      "description": "Stats (/_stats).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REKONI_HOST",
      "service": "proxy",
      "description": "Rekoni (/_rekoni).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ACCOUNT_HOST",
      "service": "proxy",
      "description": "Account service (/_accounts).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MAX_UPLOAD_SIZE",
      "service": "proxy",
      "description": "Maximum request body (upstream nginx: 100M).",
      "secret": false,
      "strategy": "default",
      "default": "100MB"
    },
    {
      "key": "TRANSACTOR_HOST",
      "service": "proxy",
      "description": "Transactor (/_transactor and /eyJ… websockets).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "COLLABORATOR_HOST",
      "service": "proxy",
      "description": "Collaborator (/_collaborator).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_URL",
      "service": "cockroach",
      "description": "Connection URL the Huly services use (password auth over the private network, as upstream).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "COCKROACH_USER",
      "service": "cockroach",
      "description": "SQL user created on first start (huly-selfhost default).",
      "secret": false,
      "strategy": "default",
      "default": "selfhost"
    },
    {
      "key": "COCKROACH_CACHE",
      "service": "cockroach",
      "description": "CockroachDB cache size (default would be 25% of the host's memory).",
      "secret": false,
      "strategy": "default",
      "default": "256MiB"
    },
    {
      "key": "COCKROACH_DATABASE",
      "service": "cockroach",
      "description": "Database created on first start (huly-selfhost default).",
      "secret": false,
      "strategy": "default",
      "default": "defaultdb"
    },
    {
      "key": "COCKROACH_PASSWORD",
      "service": "cockroach",
      "description": "Password of the SQL user (generated).",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "COCKROACH_MAX_SQL_MEMORY",
      "service": "cockroach",
      "description": "Memory for SQL query processing (default would be 25% of the host's memory).",
      "secret": false,
      "strategy": "default",
      "default": "256MiB"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "cockroach",
      "description": "Allow a clean shutdown on redeploy.",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "DB_URL",
      "service": "workspace",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET",
      "service": "workspace",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "workspace",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "workspace",
      "description": "Stats service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "workspace",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "workspace",
      "description": "Account service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FULLTEXT_URL",
      "service": "workspace",
      "description": "Fulltext service, used to clean a workspace's search index when it is deleted.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "QUEUE_CONFIG",
      "service": "workspace",
      "description": "Redpanda (Kafka API) broker.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MODEL_ENABLED",
      "service": "workspace",
      "description": "Enable all Huly modules.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "workspace",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "workspace",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_SECRET",
      "service": "workspace",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TRANSACTOR_URL",
      "service": "workspace",
      "description": "Transactor endpoints: internal for services, public for browsers.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "ACCOUNTS_DB_URL",
      "service": "workspace",
      "description": "Account database (same CockroachDB).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_URL",
      "service": "init",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "init",
      "description": "Account service (private network); the init waits for it.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SERVER_SECRET",
      "service": "init",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ACCOUNT_DB_URL",
      "service": "init",
      "description": "Account database (same CockroachDB).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "HULY_OWNER_EMAIL",
      "service": "init",
      "description": "E-mail (login) of the owner account created on first deploy.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "HULY_OWNER_PASSWORD",
      "service": "init",
      "description": "Password of the owner account (generated; used once). Change it in Huly afterwards.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "HULY_OWNER_LAST_NAME",
      "service": "init",
      "description": "Last name of the owner account.",
      "secret": false,
      "strategy": "default",
      "default": "Admin"
    },
    {
      "key": "HULY_OWNER_FIRST_NAME",
      "service": "init",
      "description": "First name of the owner account.",
      "secret": false,
      "strategy": "default",
      "default": "Owner"
    },
    {
      "key": "HULY_LOG",
      "service": "hulypulse",
      "description": "Log level.",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "HULY_BACKEND",
      "service": "hulypulse",
      "description": "In-memory backend (upstream default for single-node installs; no Redis needed).",
      "secret": false,
      "strategy": "default",
      "default": "memory"
    },
    {
      "key": "HULY_BIND_HOST",
      "service": "hulypulse",
      "description": "Listen on IPv4 and IPv6.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "HULY_BIND_PORT",
      "service": "hulypulse",
      "description": "HulyPulse port.",
      "secret": false,
      "strategy": "default",
      "default": "8099"
    },
    {
      "key": "HULY_TOKEN_SECRET",
      "service": "hulypulse",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "HULY_HEARTBEAT_TIMEOUT",
      "service": "hulypulse",
      "description": "Seconds before a silent websocket client is dropped.",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "PORT",
      "service": "stats",
      "description": "Stats port.",
      "secret": false,
      "strategy": "default",
      "default": "4900"
    },
    {
      "key": "SERVER_SECRET",
      "service": "stats",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "HULY_BIND_HOST",
      "service": "kvs",
      "description": "Listen on IPv4 and IPv6 (upstream default 0.0.0.0 is IPv4 only).",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "HULY_BIND_PORT",
      "service": "kvs",
      "description": "KVS port.",
      "secret": false,
      "strategy": "default",
      "default": "8094"
    },
    {
      "key": "HULY_TOKEN_SECRET",
      "service": "kvs",
      "description": "Shared Huly server secret (signs tokens between services).",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "HULY_DB_CONNECTION",
      "service": "kvs",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ES_JAVA_OPTS",
      "service": "elastic",
      "description": "JVM heap (upstream: 1 GB).",
      "secret": false,
      "strategy": "default",
      "default": "-Xms1g -Xmx1g"
    },
    {
      "key": "network.host",
      "service": "elastic",
      "description": "Bind address (Java listens dual-stack). 0.0.0.0, not '::': the image writes these settings to YAML unquoted and '::' breaks the parse.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "discovery.type",
      "service": "elastic",
      "description": "Single-node cluster (also skips production bootstrap checks).",
      "secret": false,
      "strategy": "default",
      "default": "single-node"
    },
    {
      "key": "ELASTIC_PASSWORD",
      "service": "elastic",
      "description": "Password of the elastic user (generated).",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "xpack.ml.enabled",
      "service": "elastic",
      "description": "Machine learning off (unused, saves memory).",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "bootstrap.memory_lock",
      "service": "elastic",
      "description": "memlock ulimits cannot be raised on Railway.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "node.store.allow_mmap",
      "service": "elastic",
      "description": "Do not depend on the host's vm.max_map_count, which containers cannot change.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "xpack.security.enabled",
      "service": "elastic",
      "description": "Require the elastic user's password (upstream runs without).",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ingest.geoip.downloader.enabled",
      "service": "elastic",
      "description": "Skip GeoIP database downloads.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "elastic",
      "description": "Allow a clean shutdown on redeploy.",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "DB_URL",
      "service": "transactor",
      "description": "CockroachDB connection URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FRONT_URL",
      "service": "transactor",
      "description": "Public URL of Huly.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PULSE_URL",
      "service": "transactor",
      "description": "HulyPulse (presence, typing indicators).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_BUCKET",
      "service": "transactor",
      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "transactor",
      "description": "Bucket region.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STATS_URL",
      "service": "transactor",
      "description": "Stats service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "transactor",
      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_PORT",
      "service": "transactor",
      "description": "Transactor port (websocket).",
      "secret": false,
      "strategy": "default",
      "default": "3333"
    },
    {
      "key": "ACCOUNTS_URL",
      "service": "transactor",
      "description": "Account service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FULLTEXT_URL",
      "service": "transactor",
      "description": "Fulltext service (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "QUEUE_CONFIG",
      "service": "transactor",
      "description": "Redpanda (Kafka API) broker.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_ACCESS_KEY",
      "service": "transactor",
      "description": "Bucket access key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_KEY",
      "service": "transactor",
      "description": "Bucket secret key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_SECRET",
      "service": "transactor",
      "description": "Shared Huly server secret (generated, like setup.sh's `openssl rand -hex 32`). The other services reference it.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LAST_NAME_FIRST",
      "service": "transactor",
      "description": "Show people as 'Last First' (upstream default).",
      "secret": false,
      "strategy": "default",
      "default": "true"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "huly-v07-all-in-one-team-workspace"
      }
    },
    "cli": "railway deploy --template huly-v07-all-in-one-team-workspace",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "eda86304-acd4-46ed-b91a-342193a00a9e",
            "serializedConfig": {
              "buckets": {
                "d00a1d83-344c-5bfc-b03c-ab65bfc2fde2": {
                  "name": "Bucket"
                }
              },
              "services": {
                "15e6cbf5-2dcb-5438-86a7-5bc480e53062": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "front",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node ./bundle.js'",
                    "healthcheckPath": "/",
                    "restartPolicyType": "ALWAYS",
                    "healthcheckTimeout": 900
                  },
                  "source": {
                    "image": "hardcoreeng/front:v0.7.426"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "Port the front server listens on; Railway's healthcheck probes it.",
                      "defaultValue": "8080"
                    },
                    "TITLE": {
                      "isOptional": true,
                      "description": "Browser title of your instance.",
                      "defaultValue": "Huly"
                    },
                    "GMAIL_URL": {
                      "isOptional": true,
                      "description": "Gmail integration URL (service not included; as upstream).",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_gmail"
                    },
                    "PULSE_URL": {
                      "isOptional": true,
                      "description": "Public HulyPulse URL.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_pulse"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Public stats URL.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_stats"
                    },
                    "REKONI_URL": {
                      "isOptional": true,
                      "description": "Public Rekoni URL.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_rekoni"
                    },
                    "UPLOAD_URL": {
                      "isOptional": true,
                      "description": "Upload path served by front.",
                      "defaultValue": "/files"
                    },
                    "ELASTIC_URL": {
                      "isOptional": true,
                      "description": "Elasticsearch (private network).",
                      "defaultValue": "http://elastic:${{elastic.ELASTIC_PASSWORD}}@${{elastic.RAILWAY_PRIVATE_DOMAIN}}:9200"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "SERVER_PORT": {
                      "isOptional": true,
                      "description": "Front server port.",
                      "defaultValue": "8080"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Public account service URL (used by browsers).",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_accounts"
                    },
                    "CALENDAR_URL": {
                      "isOptional": true,
                      "description": "Calendar integration URL (service not included; as upstream).",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_calendar"
                    },
                    "TELEGRAM_URL": {
                      "isOptional": true,
                      "description": "Telegram integration URL (service not included; as upstream).",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_telegram"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "DISABLE_SIGNUP": {
                      "isOptional": true,
                      "description": "Hide the sign-up form (follows the account service).",
                      "defaultValue": "${{account.DISABLE_SIGNUP}}"
                    },
                    "LAST_NAME_FIRST": {
                      "isOptional": true,
                      "description": "Show people as 'Last First' (upstream default).",
                      "defaultValue": "true"
                    },
                    "COLLABORATOR_URL": {
                      "isOptional": true,
                      "description": "Public collaborator websocket URL.",
                      "defaultValue": "wss://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_collaborator"
                    },
                    "DEFAULT_LANGUAGE": {
                      "isOptional": true,
                      "description": "Default UI language.",
                      "defaultValue": "en"
                    },
                    "DISABLED_FEATURES": {
                      "isOptional": true,
                      "description": "Features that need services not included (as upstream).",
                      "defaultValue": "auto-translate,mailboxes"
                    },
                    "ACCOUNTS_URL_INTERNAL": {
                      "isOptional": true,
                      "description": "Account service (private network).",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "DESKTOP_UPDATES_CHANNEL": {
                      "isOptional": true,
                      "description": "Desktop app update channel; keep equal to the server version without 'v'.",
                      "defaultValue": "0.7.426"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "1e0db8a5-f40c-5544-b600-345a473d0284": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "collaborator",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node bundle.js'",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/collaborator:v0.7.426"
                  },
                  "variables": {
                    "SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Stats service (private network).",
                      "defaultValue": "http://${{stats.RAILWAY_PRIVATE_DOMAIN}}:4900"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Account service (private network).",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "COLLABORATOR_PORT": {
                      "isOptional": true,
                      "description": "Collaborator port (websocket, Y.js documents).",
                      "defaultValue": "3078"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "208b11a1-d79b-5556-8e77-21652342d476": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "account",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node bundle.js'",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/account:v0.7.426"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "FRONT_URL": {
                      "isOptional": true,
                      "description": "Public URL of Huly.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Public stats URL (as upstream).",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_stats"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "SERVER_PORT": {
                      "isOptional": true,
                      "description": "Account service port.",
                      "defaultValue": "3000"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Public account service URL.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_accounts"
                    },
                    "ACCOUNT_PORT": {
                      "isOptional": true,
                      "description": "Account service port (same as SERVER_PORT).",
                      "defaultValue": "3000"
                    },
                    "QUEUE_CONFIG": {
                      "isOptional": true,
                      "description": "Redpanda (Kafka API) broker.",
                      "defaultValue": "${{redpanda.RAILWAY_PRIVATE_DOMAIN}}:9092"
                    },
                    "MODEL_ENABLED": {
                      "isOptional": true,
                      "description": "Enable all Huly modules.",
                      "defaultValue": "*"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "DISABLE_SIGNUP": {
                      "isOptional": true,
                      "description": "Public sign-up off: the owner account is created by the init service; others join through invite links. Set false (here and on front) to allow open sign-up.",
                      "defaultValue": "true"
                    },
                    "TRANSACTOR_URL": {
                      "isOptional": true,
                      "description": "Transactor endpoints: internal for services, public for browsers.",
                      "defaultValue": "ws://${{transactor.RAILWAY_PRIVATE_DOMAIN}}:3333;wss://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_transactor"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "2bcce003-178d-580b-8c1d-877f5ff2647c": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/kafka-light.svg",
                  "name": "redpanda",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"rm -rf /var/lib/redpanda/data/lost+found && exec rpk redpanda start --kafka-addr internal://[::]:9092 --advertise-kafka-addr internal://$RAILWAY_PRIVATE_DOMAIN:9092 --pandaproxy-addr internal://[::]:8082 --advertise-pandaproxy-addr internal://$RAILWAY_PRIVATE_DOMAIN:8082 --schema-registry-addr internal://[::]:8081 --rpc-addr 0.0.0.0:33145 --advertise-rpc-addr $RAILWAY_PRIVATE_DOMAIN:33145 --mode dev-container --smp 1 --memory $REDPANDA_MEMORY --reserve-memory 0M --default-log-level=info\"",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redpandadata/redpanda:v24.3.18"
                  },
                  "variables": {
                    "RAILWAY_RUN_UID": {
                      "isOptional": true,
                      "description": "Run as root so Redpanda can write to the volume (mounted root-owned).",
                      "defaultValue": "0"
                    },
                    "REDPANDA_MEMORY": {
                      "isOptional": true,
                      "description": "Memory Redpanda allocates (Seastar would otherwise size itself to the host).",
                      "defaultValue": "1G"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": true,
                      "description": "Allow a clean shutdown on redeploy.",
                      "defaultValue": "30"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "3aa028ee-b0f3-5958-a32c-3ed5132fb034": {
                      "mountPath": "/var/lib/redpanda/data"
                    }
                  }
                },
                "4e9a3a63-9ced-50d2-bdbd-b8a1add13c02": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "fulltext",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node --expose-gc bundle.js'",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/fulltext:v0.7.426"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Stats service (private network).",
                      "defaultValue": "http://${{stats.RAILWAY_PRIVATE_DOMAIN}}:4900"
                    },
                    "REKONI_URL": {
                      "isOptional": true,
                      "description": "Rekoni text extraction (private network).",
                      "defaultValue": "http://${{rekoni.RAILWAY_PRIVATE_DOMAIN}}:4004"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Account service (private network).",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "QUEUE_CONFIG": {
                      "isOptional": true,
                      "description": "Redpanda (Kafka API) broker.",
                      "defaultValue": "${{redpanda.RAILWAY_PRIVATE_DOMAIN}}:9092"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "FULLTEXT_DB_URL": {
                      "isOptional": true,
                      "description": "Elasticsearch with credentials (private network).",
                      "defaultValue": "http://elastic:${{elastic.ELASTIC_PASSWORD}}@${{elastic.RAILWAY_PRIVATE_DOMAIN}}:9200"
                    },
                    "ELASTIC_INDEX_NAME": {
                      "isOptional": true,
                      "description": "Search index name (upstream).",
                      "defaultValue": "huly_storage_index"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "614240c8-f7ff-579e-951b-20bb17b51e17": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "rekoni",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/rekoni-service:v0.7.426"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "Rekoni port.",
                      "defaultValue": "4004"
                    },
                    "SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "6c1a54e1-13dd-5c02-b350-abe5c2da63a4": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/caddy.svg",
                  "name": "proxy",
                  "build": {
                    "builder": "DOCKERFILE"
                  },
                  "deploy": {
                    "healthcheckPath": "/_healthz",
                    "restartPolicyType": "ALWAYS",
                    "healthcheckTimeout": 300
                  },
                  "source": {
                    "repo": "baranberkay96/huly-railway",
                    "branch": "main",
                    "rootDirectory": "/services/proxy"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "Port Caddy listens on; Railway routes the public domain and its healthcheck here.",
                      "defaultValue": "8080"
                    },
                    "FRONT_HOST": {
                      "isOptional": true,
                      "description": "Front server.",
                      "defaultValue": "${{front.RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "PULSE_HOST": {
                      "isOptional": true,
                      "description": "HulyPulse (/_pulse -> /ws).",
                      "defaultValue": "${{hulypulse.RAILWAY_PRIVATE_DOMAIN}}:8099"
                    },
                    "STATS_HOST": {
                      "isOptional": true,
                      "description": "Stats (/_stats).",
                      "defaultValue": "${{stats.RAILWAY_PRIVATE_DOMAIN}}:4900"
                    },
                    "REKONI_HOST": {
                      "isOptional": true,
                      "description": "Rekoni (/_rekoni).",
                      "defaultValue": "${{rekoni.RAILWAY_PRIVATE_DOMAIN}}:4004"
                    },
                    "ACCOUNT_HOST": {
                      "isOptional": true,
                      "description": "Account service (/_accounts).",
                      "defaultValue": "${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "MAX_UPLOAD_SIZE": {
                      "isOptional": true,
                      "description": "Maximum request body (upstream nginx: 100M).",
                      "defaultValue": "100MB"
                    },
                    "TRANSACTOR_HOST": {
                      "isOptional": true,
                      "description": "Transactor (/_transactor and /eyJ… websockets).",
                      "defaultValue": "${{transactor.RAILWAY_PRIVATE_DOMAIN}}:3333"
                    },
                    "COLLABORATOR_HOST": {
                      "isOptional": true,
                      "description": "Collaborator (/_collaborator).",
                      "defaultValue": "${{collaborator.RAILWAY_PRIVATE_DOMAIN}}:3078"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                },
                "75e3c9df-e836-54b7-8a17-9ed5b7a08cf8": {
                  "icon": "https://cdn.jsdelivr.net/npm/simple-icons@13.21.0/icons/cockroachlabs.svg",
                  "name": "cockroach",
                  "build": {
                    "builder": "DOCKERFILE"
                  },
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "baranberkay96/huly-railway",
                    "branch": "main",
                    "rootDirectory": "/services/cockroach"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "Connection URL the Huly services use (password auth over the private network, as upstream).",
                      "defaultValue": "postgres://${{COCKROACH_USER}}:${{COCKROACH_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:26257/${{COCKROACH_DATABASE}}"
                    },
                    "COCKROACH_USER": {
                      "isOptional": true,
                      "description": "SQL user created on first start (huly-selfhost default).",
                      "defaultValue": "selfhost"
                    },
                    "COCKROACH_CACHE": {
                      "isOptional": true,
                      "description": "CockroachDB cache size (default would be 25% of the host's memory).",
                      "defaultValue": "256MiB"
                    },
                    "COCKROACH_DATABASE": {
                      "isOptional": true,
                      "description": "Database created on first start (huly-selfhost default).",
                      "defaultValue": "defaultdb"
                    },
                    "COCKROACH_PASSWORD": {
                      "isOptional": true,
                      "description": "Password of the SQL user (generated).",
                      "defaultValue": "{{COCKROACH_PASSWORD}}"
                    },
                    "COCKROACH_LICENSE_KEY": {
                      "isOptional": true,
                      "description": "Optional CockroachDB license key (the CockroachDB Software License requires one for production use; Cockroach Labs offers a free tier for qualifying companies). Applied as a cluster setting on start.",
                      "defaultValue": ""
                    },
                    "COCKROACH_ORGANIZATION": {
                      "isOptional": true,
                      "description": "Organization name the license key was issued to (cluster.organization).",
                      "defaultValue": ""
                    },
                    "COCKROACH_MAX_SQL_MEMORY": {
                      "isOptional": true,
                      "description": "Memory for SQL query processing (default would be 25% of the host's memory).",
                      "defaultValue": "256MiB"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": true,
                      "description": "Allow a clean shutdown on redeploy.",
                      "defaultValue": "60"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "86c3144c-c952-5f84-81e8-4c316088fb86": {
                      "mountPath": "/cockroach/persist"
                    }
                  }
                },
                "9f23ccc1-8961-577a-9b6d-5c8e3fa7791b": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "workspace",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node bundle.js'",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/workspace:v0.7.426"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Stats service (private network).",
                      "defaultValue": "http://${{stats.RAILWAY_PRIVATE_DOMAIN}}:4900"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Account service (private network).",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "FULLTEXT_URL": {
                      "isOptional": true,
                      "description": "Fulltext service, used to clean a workspace's search index when it is deleted.",
                      "defaultValue": "http://${{fulltext.RAILWAY_PRIVATE_DOMAIN}}:4700"
                    },
                    "QUEUE_CONFIG": {
                      "isOptional": true,
                      "description": "Redpanda (Kafka API) broker.",
                      "defaultValue": "${{redpanda.RAILWAY_PRIVATE_DOMAIN}}:9092"
                    },
                    "MODEL_ENABLED": {
                      "isOptional": true,
                      "description": "Enable all Huly modules.",
                      "defaultValue": "*"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "TRANSACTOR_URL": {
                      "isOptional": true,
                      "description": "Transactor endpoints: internal for services, public for browsers.",
                      "defaultValue": "ws://${{transactor.RAILWAY_PRIVATE_DOMAIN}}:3333;wss://${{proxy.RAILWAY_PUBLIC_DOMAIN}}/_transactor"
                    },
                    "ACCOUNTS_DB_URL": {
                      "isOptional": true,
                      "description": "Account database (same CockroachDB).",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "ad0099f2-3acd-5f7a-b089-a678e233270c": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "init",
                  "build": {
                    "builder": "DOCKERFILE"
                  },
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "baranberkay96/huly-railway",
                    "branch": "main",
                    "rootDirectory": "/services/init"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Account service (private network); the init waits for it.",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "ACCOUNT_DB_URL": {
                      "isOptional": true,
                      "description": "Account database (same CockroachDB).",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "HULY_OWNER_EMAIL": {
                      "isOptional": false,
                      "description": "E-mail (login) of the owner account created on first deploy.",
                      "defaultValue": "{{HULY_OWNER_EMAIL}}"
                    },
                    "HULY_OWNER_PASSWORD": {
                      "isOptional": true,
                      "description": "Password of the owner account (generated; used once). Change it in Huly afterwards.",
                      "defaultValue": "{{HULY_OWNER_PASSWORD}}"
                    },
                    "HULY_OWNER_LAST_NAME": {
                      "isOptional": true,
                      "description": "Last name of the owner account.",
                      "defaultValue": "Admin"
                    },
                    "HULY_OWNER_FIRST_NAME": {
                      "isOptional": true,
                      "description": "First name of the owner account.",
                      "defaultValue": "Owner"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "ae28ece9-3080-5dba-acc7-330b9ff68db1": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "hulypulse",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/service_hulypulse:0.1.29"
                  },
                  "variables": {
                    "HULY_LOG": {
                      "isOptional": true,
                      "description": "Log level.",
                      "defaultValue": "info"
                    },
                    "HULY_BACKEND": {
                      "isOptional": true,
                      "description": "In-memory backend (upstream default for single-node installs; no Redis needed).",
                      "defaultValue": "memory"
                    },
                    "HULY_BIND_HOST": {
                      "isOptional": true,
                      "description": "Listen on IPv4 and IPv6.",
                      "defaultValue": "::"
                    },
                    "HULY_BIND_PORT": {
                      "isOptional": true,
                      "description": "HulyPulse port.",
                      "defaultValue": "8099"
                    },
                    "HULY_TOKEN_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "HULY_HEARTBEAT_TIMEOUT": {
                      "isOptional": true,
                      "description": "Seconds before a silent websocket client is dropped.",
                      "defaultValue": "60"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "ceae44d0-4505-59f7-b19c-9ad7da94448c": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "stats",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/stats:v0.7.426"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "Stats port.",
                      "defaultValue": "4900"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "f1b16460-238b-5a3d-b931-22753bd03329": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "kvs",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/hulykvs:v0.7.426"
                  },
                  "variables": {
                    "HULY_BIND_HOST": {
                      "isOptional": true,
                      "description": "Listen on IPv4 and IPv6 (upstream default 0.0.0.0 is IPv4 only).",
                      "defaultValue": "::"
                    },
                    "HULY_BIND_PORT": {
                      "isOptional": true,
                      "description": "KVS port.",
                      "defaultValue": "8094"
                    },
                    "HULY_TOKEN_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (signs tokens between services).",
                      "defaultValue": "${{transactor.SERVER_SECRET}}"
                    },
                    "HULY_DB_CONNECTION": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                },
                "f5d1fd2d-4bf7-57d4-bc60-de27db0156fb": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/elasticsearch.svg",
                  "name": "elastic",
                  "build": {
                    "builder": "DOCKERFILE"
                  },
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "baranberkay96/huly-railway",
                    "branch": "main",
                    "rootDirectory": "/services/elasticsearch"
                  },
                  "variables": {
                    "ES_JAVA_OPTS": {
                      "isOptional": true,
                      "description": "JVM heap (upstream: 1 GB).",
                      "defaultValue": "-Xms1g -Xmx1g"
                    },
                    "network.host": {
                      "isOptional": true,
                      "description": "Bind address (Java listens dual-stack). 0.0.0.0, not '::': the image writes these settings to YAML unquoted and '::' breaks the parse.",
                      "defaultValue": "0.0.0.0"
                    },
                    "discovery.type": {
                      "isOptional": true,
                      "description": "Single-node cluster (also skips production bootstrap checks).",
                      "defaultValue": "single-node"
                    },
                    "ELASTIC_PASSWORD": {
                      "isOptional": true,
                      "description": "Password of the elastic user (generated).",
                      "defaultValue": "{{ELASTIC_PASSWORD}}"
                    },
                    "xpack.ml.enabled": {
                      "isOptional": true,
                      "description": "Machine learning off (unused, saves memory).",
                      "defaultValue": "false"
                    },
                    "bootstrap.memory_lock": {
                      "isOptional": true,
                      "description": "memlock ulimits cannot be raised on Railway.",
                      "defaultValue": "false"
                    },
                    "node.store.allow_mmap": {
                      "isOptional": true,
                      "description": "Do not depend on the host's vm.max_map_count, which containers cannot change.",
                      "defaultValue": "false"
                    },
                    "xpack.security.enabled": {
                      "isOptional": true,
                      "description": "Require the elastic user's password (upstream runs without).",
                      "defaultValue": "true"
                    },
                    "ingest.geoip.downloader.enabled": {
                      "isOptional": true,
                      "description": "Skip GeoIP database downloads.",
                      "defaultValue": "false"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": true,
                      "description": "Allow a clean shutdown on redeploy.",
                      "defaultValue": "60"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "848f481e-164f-5b6a-93cd-c75312ccfd27": {
                      "mountPath": "/usr/share/elasticsearch/data"
                    }
                  }
                },
                "f7388fa9-1202-5a0d-9730-9ee404e71f5b": {
                  "icon": "https://cdn.jsdelivr.net/gh/hcengineering/platform@v0.7.426/dev/prod/public/huly/icon-256.png",
                  "name": "transactor",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'q() { node -p \"encodeURIComponent(process.argv[1])\" \"$1\"; }; export STORAGE_CONFIG=\"s3|$S3_ENDPOINT?accessKey=$(q \"$S3_ACCESS_KEY\")&secretKey=$(q \"$S3_SECRET_KEY\")&region=$(q \"$S3_REGION\")&rootBucket=$(q \"$S3_BUCKET\")&allowPresign=false\"; exec node ./bundle.js'",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "hardcoreeng/transactor:v0.7.426"
                  },
                  "variables": {
                    "DB_URL": {
                      "isOptional": true,
                      "description": "CockroachDB connection URL.",
                      "defaultValue": "${{cockroach.DB_URL}}"
                    },
                    "FRONT_URL": {
                      "isOptional": true,
                      "description": "Public URL of Huly.",
                      "defaultValue": "https://${{proxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "PULSE_URL": {
                      "isOptional": true,
                      "description": "HulyPulse (presence, typing indicators).",
                      "defaultValue": "http://${{hulypulse.RAILWAY_PRIVATE_DOMAIN}}:8099"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name; every workspace is a folder in it (rootBucket).",
                      "defaultValue": "${{Bucket.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Bucket region.",
                      "defaultValue": "${{Bucket.REGION}}"
                    },
                    "STATS_URL": {
                      "isOptional": true,
                      "description": "Stats service (private network).",
                      "defaultValue": "http://${{stats.RAILWAY_PRIVATE_DOMAIN}}:4900"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "Railway Bucket S3 endpoint; the start command builds Huly's STORAGE_CONFIG from the S3_* variables (URL-encoded).",
                      "defaultValue": "${{Bucket.ENDPOINT}}"
                    },
                    "SERVER_PORT": {
                      "isOptional": true,
                      "description": "Transactor port (websocket).",
                      "defaultValue": "3333"
                    },
                    "ACCOUNTS_URL": {
                      "isOptional": true,
                      "description": "Account service (private network).",
                      "defaultValue": "http://${{account.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "FULLTEXT_URL": {
                      "isOptional": true,
                      "description": "Fulltext service (private network).",
                      "defaultValue": "http://${{fulltext.RAILWAY_PRIVATE_DOMAIN}}:4700"
                    },
                    "QUEUE_CONFIG": {
                      "isOptional": true,
                      "description": "Redpanda (Kafka API) broker.",
                      "defaultValue": "${{redpanda.RAILWAY_PRIVATE_DOMAIN}}:9092"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "Bucket access key.",
                      "defaultValue": "${{Bucket.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "Bucket secret key.",
                      "defaultValue": "${{Bucket.SECRET_ACCESS_KEY}}"
                    },
                    "SERVER_SECRET": {
                      "isOptional": true,
                      "description": "Shared Huly server secret (generated, like setup.sh's `openssl rand -hex 32`). The other services reference it.",
                      "defaultValue": "{{SERVER_SECRET}}"
                    },
                    "LAST_NAME_FIRST": {
                      "isOptional": true,
                      "description": "Show people as 'Last First' (upstream default).",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "tcpProxies": {},
                    "serviceDomains": {}
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "proxy",
      "method": "GET",
      "path": "/_healthz",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 15,
    "needs_volume": true
  },
  "generated_at": "2026-10-11T22:14:38.939Z",
  "generator_version": "0.1.0"
}
