# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: WorkAdventure
spec:
    description: Create your own virtual office, online event space, or interactive world with WorkAdventure on Zeabur.
    coverImage: https://raw.githubusercontent.com/workadventure/workadventure/develop/README-MAP.png
    icon: https://workadventu.re/favicon.ico
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: WorkAdventure Domain
          description: The main domain used to access your WorkAdventure space.
    tags:
        - Collaboration
        - Virtual Office
        - Realtime
        - Metaverse
    readme: |
        # [WorkAdventure](https://github.com/workadventure/workadventure)

        Bring your team, community, or event into a shared virtual space with WorkAdventure.

        WorkAdventure is a popular open-source platform for building virtual offices, social spaces, onboarding rooms, online exhibitions, and interactive browser-based experiences. This template gives you a smoother Zeabur-friendly deployment so you can get online faster.

        This template deploys the core single-domain WorkAdventure stack:

        - `play`
        - `back`
        - `uploader`
        - `icon`
        - `redis`
        - `map-storage`
        - an internal `nginx` gateway that keeps the familiar `/`, `/api`, `/uploader`, `/icon`, and `/map-storage` routes on one domain

        ## Why You Might Like It

        - Great for remote teams, communities, classrooms, and online events
        - Easy to share with a simple web link
        - Supports custom maps, chat, and real-time presence
        - A solid self-hosted starting point if you want more control over your virtual space

        ## Before You Start

        - This template covers the core WorkAdventure services only.
        - For larger audio or video groups, you should connect an external LiveKit server.
        - For users on stricter networks, connecting a TURN / Coturn server is recommended.
        - The default room uses WorkAdventure's public starter-kit sample map, so you can try it right away.

        ## Quick Start

        1. Click `Deploy` to create the stack on Zeabur.
        2. Open `Overview -> Instructions` in the `workadventure` service and copy the Map Storage username and password.
        3. Visit `${WORKADVENTURE_PUBLIC_URL}/map-storage/` and sign in to upload your own map.
        4. If you just want to explore first, you can keep using the default starter map.
        5. Open `${WORKADVENTURE_PUBLIC_URL}` and start walking around your new space.

        ## After Deployment

        You can customize the exposed environment variables on the `workadventure` service if you want to:

        - connect LiveKit for larger group calls
        - connect TURN / Coturn for better WebRTC compatibility
        - change the default room people enter first
        - adjust chat or upload behavior
        - enable or limit the inline map editor
    services:
        - name: workadventure
          icon: https://workadventu.re/favicon.ico
          dependencies:
            - play
            - back
            - uploader
            - icon
            - map-storage
          template: PREBUILT_V2
          spec:
            id: workadventure
            source:
                image: nginx:stable-alpine
            ports:
                - id: web
                  port: 8080
                  type: HTTP
            instructions:
                - title: Main URL
                  content: ${WORKADVENTURE_PUBLIC_URL}
                - title: Map Storage URL
                  content: ${WORKADVENTURE_PUBLIC_URL}/map-storage/
                - title: Map Storage username
                  content: ${WORKADVENTURE_MAP_STORAGE_BASIC_USER}
                - title: Map Storage password
                  content: ${WORKADVENTURE_MAP_STORAGE_BASIC_PASSWORD}
                - title: Default start room
                  content: ${WORKADVENTURE_START_ROOM_URL}
            env:
                DOLLAR:
                    default: $
                    expose: false
                NGINX_ENTRYPOINT_LOCAL_RESOLVERS:
                    default: "1"
                    expose: false
                WORKADVENTURE_ENABLE_CHAT:
                    default: "true"
                    expose: true
                WORKADVENTURE_ENABLE_CHAT_UPLOAD:
                    default: "true"
                    expose: true
                WORKADVENTURE_ENABLE_MAP_EDITOR:
                    default: "true"
                    expose: true
                WORKADVENTURE_GROUP_RADIUS:
                    default: "48"
                    expose: true
                WORKADVENTURE_JITSI_URL:
                    default: meet.jit.si
                    expose: true
                WORKADVENTURE_LIVEKIT_API_KEY:
                    default: ""
                    expose: true
                WORKADVENTURE_LIVEKIT_API_SECRET:
                    default: ""
                    expose: true
                WORKADVENTURE_LIVEKIT_HOST:
                    default: ""
                    expose: true
                WORKADVENTURE_MAP_STORAGE_BASIC_PASSWORD:
                    default: ${PASSWORD}
                    expose: true
                WORKADVENTURE_MAP_STORAGE_BASIC_USER:
                    default: admin
                    expose: true
                WORKADVENTURE_MAX_PER_GROUP:
                    default: "4"
                    expose: true
                WORKADVENTURE_MAX_USERS_FOR_WEBRTC:
                    default: "4"
                    expose: true
                WORKADVENTURE_MINIMUM_DISTANCE:
                    default: "64"
                    expose: true
                WORKADVENTURE_PUBLIC_DOMAIN:
                    default: ${ZEABUR_WEB_DOMAIN}
                    expose: true
                WORKADVENTURE_PUBLIC_URL:
                    default: ${ZEABUR_WEB_URL}
                    expose: true
                WORKADVENTURE_SHARED_SECRET:
                    default: ${PASSWORD}
                    expose: true
                WORKADVENTURE_START_ROOM_URL:
                    default: /_/global/workadventure.github.io/map-starter-kit/office.tmj
                    expose: true
                WORKADVENTURE_TURN_PASSWORD:
                    default: ""
                    expose: true
                WORKADVENTURE_TURN_SERVER:
                    default: ""
                    expose: true
                WORKADVENTURE_TURN_STATIC_AUTH_SECRET:
                    default: ""
                    expose: true
                WORKADVENTURE_TURN_USER:
                    default: ""
                    expose: true
                WORKADVENTURE_UPLOAD_MAX_FILESIZE:
                    default: "10485760"
                    expose: true
            configs:
                - path: /etc/nginx/templates/default.conf.template
                  template: |
                    server {
                        listen 8080;
                        server_name _;
                        client_max_body_size 100m;
                        resolver ${DOLLAR}{NGINX_LOCAL_RESOLVERS} valid=30s ipv6=off;

                        rewrite ^/+(.*)$ /${DOLLAR}1 break;

                        location /ws/ {
                            set ${DOLLAR}play_ws http://${WORKADVENTURE_PLAY_HOST}:${WORKADVENTURE_PLAY_WS_PORT};
                            proxy_http_version 1.1;
                            proxy_set_header Upgrade websocket;
                            proxy_set_header Connection upgrade;
                            proxy_pass ${DOLLAR}play_ws;
                        }

                        location = /api {
                            return 301 /api/;
                        }

                        location /api/ {
                            set ${DOLLAR}back_upstream http://${WORKADVENTURE_BACK_HOST}:${WORKADVENTURE_BACK_HTTP_PORT};
                            rewrite ^/api/(.*)$ /${DOLLAR}1 break;
                            proxy_pass ${DOLLAR}back_upstream;
                        }

                        location = /uploader {
                            return 301 /uploader/;
                        }

                        location /uploader/ {
                            set ${DOLLAR}uploader_upstream http://${WORKADVENTURE_UPLOADER_HOST}:${WORKADVENTURE_UPLOADER_HTTP_PORT};
                            rewrite ^/uploader/(.*)$ /${DOLLAR}1 break;
                            proxy_pass ${DOLLAR}uploader_upstream;
                        }

                        location = /icon {
                            return 301 /icon/;
                        }

                        location /icon/ {
                            set ${DOLLAR}icon_upstream http://${WORKADVENTURE_ICON_HOST}:${WORKADVENTURE_ICON_HTTP_PORT};
                            rewrite ^/icon/(.*)$ /${DOLLAR}1 break;
                            proxy_pass ${DOLLAR}icon_upstream;
                        }

                        location /lettericons/ {
                            set ${DOLLAR}icon_upstream http://${WORKADVENTURE_ICON_HOST}:${WORKADVENTURE_ICON_HTTP_PORT};
                            proxy_pass ${DOLLAR}icon_upstream;
                        }

                        location = /map-storage {
                            return 301 /map-storage/;
                        }

                        location /map-storage/ {
                            set ${DOLLAR}map_storage_upstream http://${WORKADVENTURE_MAP_STORAGE_HOST}:${WORKADVENTURE_MAP_STORAGE_HTTP_PORT};
                            rewrite ^/map-storage/(.*)$ /${DOLLAR}1 break;
                            proxy_pass ${DOLLAR}map_storage_upstream;
                        }

                        location / {
                            set ${DOLLAR}play_http http://${WORKADVENTURE_PLAY_HOST}:${WORKADVENTURE_PLAY_HTTP_PORT};
                            proxy_pass ${DOLLAR}play_http;
                        }
                    }
                  permission: null
                  envsubst: true
            portForwarding:
                enabled: false
          domainKey: PUBLIC_DOMAIN
        - name: redis
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/redis.svg
          template: PREBUILT_V2
          spec:
            id: redis
            source:
                image: redis:6
            ports:
                - id: database
                  port: 6379
                  type: TCP
            volumes:
                - id: data
                  dir: /data
            env:
                WORKADVENTURE_REDIS_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_REDIS_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
        - name: back
          icon: https://workadventu.re/favicon.ico
          dependencies:
            - redis
            - map-storage
          template: PREBUILT_V2
          spec:
            id: back
            source:
                image: thecodingmachine/workadventure-back:v1.30.6
            ports:
                - id: api
                  port: 8080
                  type: HTTP
                - id: room-api
                  port: 50051
                  type: TCP
            env:
                ENABLE_CHAT:
                    default: ${WORKADVENTURE_ENABLE_CHAT}
                    expose: false
                ENABLE_CHAT_UPLOAD:
                    default: ${WORKADVENTURE_ENABLE_CHAT_UPLOAD}
                    expose: false
                ENABLE_MAP_EDITOR:
                    default: ${WORKADVENTURE_ENABLE_MAP_EDITOR}
                    expose: false
                GROUP_RADIUS:
                    default: ${WORKADVENTURE_GROUP_RADIUS}
                    expose: false
                INTERNAL_MAP_STORAGE_URL:
                    default: http://${WORKADVENTURE_MAP_STORAGE_HOST}:${WORKADVENTURE_MAP_STORAGE_HTTP_PORT}
                    expose: false
                JITSI_URL:
                    default: ${WORKADVENTURE_JITSI_URL}
                    expose: false
                LIVEKIT_API_KEY:
                    default: ${WORKADVENTURE_LIVEKIT_API_KEY}
                    expose: false
                LIVEKIT_API_SECRET:
                    default: ${WORKADVENTURE_LIVEKIT_API_SECRET}
                    expose: false
                LIVEKIT_HOST:
                    default: ${WORKADVENTURE_LIVEKIT_HOST}
                    expose: false
                MAP_STORAGE_URL:
                    default: ${WORKADVENTURE_MAP_STORAGE_HOST}:${WORKADVENTURE_MAP_STORAGE_GRPC_PORT}
                    expose: false
                MAX_PER_GROUP:
                    default: ${WORKADVENTURE_MAX_PER_GROUP}
                    expose: false
                MAX_USERS_FOR_WEBRTC:
                    default: ${WORKADVENTURE_MAX_USERS_FOR_WEBRTC}
                    expose: false
                MINIMUM_DISTANCE:
                    default: ${WORKADVENTURE_MINIMUM_DISTANCE}
                    expose: false
                PLAY_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}
                    expose: false
                PUBLIC_MAP_STORAGE_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}/map-storage
                    expose: false
                REDIS_HOST:
                    default: ${WORKADVENTURE_REDIS_HOST}
                    expose: false
                REDIS_PORT:
                    default: ${WORKADVENTURE_REDIS_PORT}
                    expose: false
                SECRET_KEY:
                    default: ${WORKADVENTURE_SHARED_SECRET}
                    expose: false
                TURN_PASSWORD:
                    default: ${WORKADVENTURE_TURN_PASSWORD}
                    expose: false
                TURN_SERVER:
                    default: ${WORKADVENTURE_TURN_SERVER}
                    expose: false
                TURN_USER:
                    default: ${WORKADVENTURE_TURN_USER}
                    expose: false
                WORKADVENTURE_BACK_GRPC_PORT:
                    default: ${ROOM_API_PORT}
                    expose: true
                WORKADVENTURE_BACK_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_BACK_HTTP_PORT:
                    default: ${API_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
        - name: uploader
          icon: https://workadventu.re/favicon.ico
          dependencies:
            - redis
          template: PREBUILT_V2
          spec:
            id: uploader
            source:
                image: thecodingmachine/workadventure-uploader:v1.30.6
            ports:
                - id: web
                  port: 8080
                  type: HTTP
            env:
                ENABLE_CHAT_UPLOAD:
                    default: ${WORKADVENTURE_ENABLE_CHAT_UPLOAD}
                    expose: false
                REDIS_HOST:
                    default: ${WORKADVENTURE_REDIS_HOST}
                    expose: false
                REDIS_PORT:
                    default: ${WORKADVENTURE_REDIS_PORT}
                    expose: false
                UPLOAD_MAX_FILESIZE:
                    default: ${WORKADVENTURE_UPLOAD_MAX_FILESIZE}
                    expose: false
                UPLOADER_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}/uploader
                    expose: false
                WORKADVENTURE_UPLOADER_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_UPLOADER_HTTP_PORT:
                    default: ${WEB_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
        - name: icon
          icon: https://workadventu.re/favicon.ico
          template: PREBUILT_V2
          spec:
            id: icon
            source:
                image: matthiasluedtke/iconserver:v3.21.0
            ports:
                - id: web
                  port: 8080
                  type: HTTP
            env:
                WORKADVENTURE_ICON_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_ICON_HTTP_PORT:
                    default: ${WEB_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
        - name: map-storage
          icon: https://workadventu.re/favicon.ico
          template: PREBUILT_V2
          spec:
            id: map-storage
            source:
                image: thecodingmachine/workadventure-map-storage:v1.30.6
            ports:
                - id: web
                  port: 3000
                  type: HTTP
                - id: grpc
                  port: 50053
                  type: TCP
            volumes:
                - id: data
                  dir: /maps
            env:
                API_URL:
                    default: ${WORKADVENTURE_BACK_HOST}:${WORKADVENTURE_BACK_GRPC_PORT}
                    expose: false
                AUTHENTICATION_PASSWORD:
                    default: ${WORKADVENTURE_MAP_STORAGE_BASIC_PASSWORD}
                    expose: false
                AUTHENTICATION_USER:
                    default: ${WORKADVENTURE_MAP_STORAGE_BASIC_USER}
                    expose: false
                ENABLE_BASIC_AUTHENTICATION:
                    default: "true"
                    expose: false
                ENABLE_BEARER_AUTHENTICATION:
                    default: "false"
                    expose: false
                ENABLE_DIGEST_AUTHENTICATION:
                    default: "false"
                    expose: false
                ENTITY_COLLECTION_URLS:
                    default: ${WORKADVENTURE_PUBLIC_URL}/collections/FurnitureCollection.json,${WORKADVENTURE_PUBLIC_URL}/collections/OfficeCollection.json
                    expose: false
                MAP_STORAGE_API_TOKEN:
                    default: ${WORKADVENTURE_SHARED_SECRET}
                    expose: false
                PATH_PREFIX:
                    default: /map-storage
                    expose: false
                PUSHER_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}
                    expose: false
                SECRET_KEY:
                    default: ${WORKADVENTURE_SHARED_SECRET}
                    expose: false
                WORKADVENTURE_MAP_STORAGE_GRPC_PORT:
                    default: ${GRPC_PORT}
                    expose: true
                WORKADVENTURE_MAP_STORAGE_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_MAP_STORAGE_HTTP_PORT:
                    default: ${WEB_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
        - name: play
          icon: https://workadventu.re/favicon.ico
          dependencies:
            - back
            - redis
            - map-storage
            - uploader
            - icon
          template: PREBUILT_V2
          spec:
            id: play
            source:
                image: thecodingmachine/workadventure-play:v1.30.6
            ports:
                - id: web
                  port: 3000
                  type: HTTP
                - id: ws
                  port: 3001
                  type: TCP
            env:
                API_URL:
                    default: ${WORKADVENTURE_BACK_HOST}:${WORKADVENTURE_BACK_GRPC_PORT}
                    expose: false
                DEBUG_MODE:
                    default: "false"
                    expose: false
                DISABLE_ANONYMOUS:
                    default: "false"
                    expose: false
                DISABLE_NOTIFICATIONS:
                    default: "false"
                    expose: false
                ENABLE_CHAT:
                    default: ${WORKADVENTURE_ENABLE_CHAT}
                    expose: false
                ENABLE_CHAT_DISCONNECTED_LIST:
                    default: "true"
                    expose: false
                ENABLE_CHAT_ONLINE_LIST:
                    default: "true"
                    expose: false
                ENABLE_CHAT_UPLOAD:
                    default: ${WORKADVENTURE_ENABLE_CHAT_UPLOAD}
                    expose: false
                ENABLE_MAP_EDITOR:
                    default: ${WORKADVENTURE_ENABLE_MAP_EDITOR}
                    expose: false
                ENABLE_OPENAPI_ENDPOINT:
                    default: "true"
                    expose: false
                ENABLE_TUTORIAL:
                    default: "true"
                    expose: false
                FRONT_URL:
                    default: ""
                    expose: false
                ICON_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}/icon
                    expose: false
                INTERNAL_MAP_STORAGE_URL:
                    default: http://${WORKADVENTURE_MAP_STORAGE_HOST}:${WORKADVENTURE_MAP_STORAGE_HTTP_PORT}
                    expose: false
                JITSI_URL:
                    default: ${WORKADVENTURE_JITSI_URL}
                    expose: false
                LIVEKIT_API_KEY:
                    default: ${WORKADVENTURE_LIVEKIT_API_KEY}
                    expose: false
                LIVEKIT_API_SECRET:
                    default: ${WORKADVENTURE_LIVEKIT_API_SECRET}
                    expose: false
                LIVEKIT_HOST:
                    default: ${WORKADVENTURE_LIVEKIT_HOST}
                    expose: false
                MAP_EDITOR_ALLOW_ALL_USERS:
                    default: "true"
                    expose: false
                MAP_STORAGE_API_TOKEN:
                    default: ${WORKADVENTURE_SHARED_SECRET}
                    expose: false
                MAX_PER_GROUP:
                    default: ${WORKADVENTURE_MAX_PER_GROUP}
                    expose: false
                MAX_USERNAME_LENGTH:
                    default: "10"
                    expose: false
                MAX_USERS_FOR_WEBRTC:
                    default: ${WORKADVENTURE_MAX_USERS_FOR_WEBRTC}
                    expose: false
                MINIMUM_DISTANCE:
                    default: ${WORKADVENTURE_MINIMUM_DISTANCE}
                    expose: false
                OPENID_PROMPT:
                    default: login
                    expose: false
                PUBLIC_MAP_STORAGE_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}/map-storage
                    expose: false
                PUSHER_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}
                    expose: false
                REDIS_HOST:
                    default: ${WORKADVENTURE_REDIS_HOST}
                    expose: false
                REDIS_PORT:
                    default: ${WORKADVENTURE_REDIS_PORT}
                    expose: false
                SECRET_KEY:
                    default: ${WORKADVENTURE_SHARED_SECRET}
                    expose: false
                START_ROOM_URL:
                    default: ${WORKADVENTURE_START_ROOM_URL}
                    expose: false
                STUN_SERVER:
                    default: ""
                    expose: false
                TURN_PASSWORD:
                    default: ${WORKADVENTURE_TURN_PASSWORD}
                    expose: false
                TURN_SERVER:
                    default: ${WORKADVENTURE_TURN_SERVER}
                    expose: false
                TURN_STATIC_AUTH_SECRET:
                    default: ${WORKADVENTURE_TURN_STATIC_AUTH_SECRET}
                    expose: false
                TURN_USER:
                    default: ${WORKADVENTURE_TURN_USER}
                    expose: false
                UPLOADER_URL:
                    default: ${WORKADVENTURE_PUBLIC_URL}/uploader
                    expose: false
                WOKA_SPEED:
                    default: "9"
                    expose: false
                WORKADVENTURE_PLAY_HOST:
                    default: ${CONTAINER_HOSTNAME}.zeabur.internal
                    expose: true
                WORKADVENTURE_PLAY_HTTP_PORT:
                    default: ${WEB_PORT}
                    expose: true
                WORKADVENTURE_PLAY_WS_PORT:
                    default: ${WS_PORT}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
localization:
    es-ES:
        description: Lanza tu propia oficina virtual o espacio interactivo con WorkAdventure en Zeabur, de forma simple y rápida.
        variables:
            - key: PUBLIC_DOMAIN
              type: STRING
              name: Dominio de WorkAdventure
              description: El dominio principal para acceder a tu espacio de WorkAdventure.
        readme: |
            # [WorkAdventure](https://github.com/workadventure/workadventure)

            Con WorkAdventure puedes crear una oficina virtual, un espacio para eventos o una experiencia interactiva a la que la gente entra directamente desde el navegador.

            Es una muy buena opción para equipos remotos, comunidades, actividades educativas y eventos online. Esta plantilla organiza el stack principal de WorkAdventure en una experiencia de despliegue más amigable para Zeabur y con una estructura de dominio única.

            - `play`
            - `back`
            - `uploader`
            - `icon`
            - `redis`
            - `map-storage`
            - y un `nginx` gateway para mantener la estructura de rutas típica en un solo dominio

            ## Por qué puede interesarte

            - Ideal para equipos remotos, comunidades y eventos
            - Se comparte fácilmente con un simple enlace web
            - Soporta mapas personalizados, presencia en tiempo real y chat
            - Es una gran base si buscas una alternativa autohospedada a herramientas de oficina virtual

            ## Antes de empezar

            - Esta plantilla despliega el stack principal de WorkAdventure
            - Para grupos grandes de audio o vídeo, se recomienda conectar un servidor LiveKit externo
            - Para usuarios en redes más restrictivas, conviene configurar TURN / Coturn
            - La sala inicial usa el mapa de ejemplo oficial starter-kit para que puedas probarlo enseguida

            ## Inicio rápido

            1. Haz clic en `Deploy` para desplegar la plantilla en Zeabur.
            2. En el servicio `workadventure`, abre `Overview -> Instructions` y copia el usuario y la contraseña de Map Storage.
            3. Entra en `${WORKADVENTURE_PUBLIC_URL}/map-storage/`, inicia sesión y sube tu propio mapa.
            4. Si primero quieres explorar, puedes seguir usando el starter map por defecto.
            5. Abre `${WORKADVENTURE_PUBLIC_URL}` y empieza a recorrer tu espacio virtual.

            ## Después del despliegue

            Puedes editar las variables expuestas del servicio `workadventure` para:

            - conectar LiveKit para llamadas de grupos más grandes
            - conectar TURN / Coturn para mejorar la compatibilidad de WebRTC
            - cambiar la sala de entrada por defecto
            - ajustar el chat y las subidas de archivos
            - habilitar o limitar el inline map editor
    id-ID:
        description: Bangun kantor virtual atau ruang interaktifmu sendiri dengan WorkAdventure di Zeabur secara cepat dan mudah.
        variables:
            - key: PUBLIC_DOMAIN
              type: STRING
              name: Domain WorkAdventure
              description: Domain utama untuk membuka ruang WorkAdventure milikmu.
        readme: |
            # [WorkAdventure](https://github.com/workadventure/workadventure)

            WorkAdventure membantu kamu membuat kantor virtual, ruang komunitas, area event, atau pengalaman interaktif yang bisa dibuka langsung dari browser.

            Cocok untuk tim remote, komunitas, kelas online, maupun event digital. Template ini merapikan stack inti WorkAdventure agar lebih nyaman dipasang di Zeabur dengan pengalaman satu domain yang lebih sederhana.

            - `play`
            - `back`
            - `uploader`
            - `icon`
            - `redis`
            - `map-storage`
            - serta `nginx` gateway untuk mempertahankan struktur rute satu domain yang umum dipakai

            ## Kenapa menarik untuk dicoba

            - Cocok untuk tim remote, komunitas, edukasi, dan event online
            - Mudah dibagikan lewat satu tautan web
            - Mendukung peta kustom, interaksi real-time, dan chat
            - Titik awal yang bagus jika kamu ingin solusi virtual space yang self-hosted

            ## Sebelum mulai

            - Template ini memasang layanan inti WorkAdventure
            - Untuk grup audio atau video yang lebih besar, sebaiknya hubungkan server LiveKit eksternal
            - Untuk pengguna di jaringan yang lebih ketat, TURN / Coturn juga disarankan
            - Ruang awal memakai peta contoh starter-kit resmi agar kamu bisa langsung mencoba

            ## Mulai cepat

            1. Klik `Deploy` untuk memasang template di Zeabur.
            2. Buka `Overview -> Instructions` pada layanan `workadventure` dan salin username serta password Map Storage.
            3. Masuk ke `${WORKADVENTURE_PUBLIC_URL}/map-storage/` untuk login dan mengunggah peta milikmu sendiri.
            4. Kalau hanya ingin mencoba dulu, kamu bisa tetap memakai starter map bawaan.
            5. Buka `${WORKADVENTURE_PUBLIC_URL}` dan mulai jelajahi ruang virtualmu.

            ## Setelah deployment

            Kamu bisa mengubah environment variable yang diekspos pada layanan `workadventure` untuk:

            - menghubungkan LiveKit untuk panggilan grup yang lebih besar
            - menghubungkan TURN / Coturn agar kompatibilitas WebRTC lebih baik
            - mengganti ruang masuk default
            - menyesuaikan chat dan upload file
            - mengaktifkan atau membatasi inline map editor
    ja-JP:
        description: Zeabur 上で WorkAdventure を手軽に立ち上げて、バーチャルオフィスやイベント空間を作れます。
        variables:
            - key: PUBLIC_DOMAIN
              type: STRING
              name: WorkAdventure ドメイン
              description: WorkAdventure にアクセスするためのメインドメインです。
        readme: |
            # [WorkAdventure](https://github.com/workadventure/workadventure)

            WorkAdventure を使えば、チーム、コミュニティ、イベントのためのバーチャル空間をブラウザですぐに公開できます。

            バーチャルオフィス、オンラインイベント、案内用マップ、コミュニティスペースなどに向いており、このテンプレートでは WorkAdventure のコア構成を Zeabur 向けにまとめ、より始めやすい単一ドメイン構成でデプロイできます。

            - `play`
            - `back`
            - `uploader`
            - `icon`
            - `redis`
            - `map-storage`
            - そして一般的な単一ドメイン構成を保つための `nginx` gateway

            ## こんな用途に向いています

            - リモートチームの交流やオンラインオフィス
            - コミュニティやイベント向けの共有空間
            - カスタムマップを使った案内や展示
            - 自分で管理できる仮想空間サービスを始めたいとき

            ## はじめる前に

            - このテンプレートは WorkAdventure のコアサービスをデプロイします
            - より大きな音声・映像グループを扱う場合は LiveKit の接続をおすすめします
            - 制限の強いネットワーク環境向けには TURN / Coturn の設定もおすすめです
            - 最初は公式 starter-kit のサンプルマップでそのまま試せます

            ## クイックスタート

            1. `Deploy` をクリックして Zeabur にデプロイします。
            2. `workadventure` サービスの `Overview -> Instructions` で Map Storage のユーザー名とパスワードを確認します。
            3. `${WORKADVENTURE_PUBLIC_URL}/map-storage/` にアクセスしてログインし、自分のマップをアップロードします。
            4. まず試したいだけなら、デフォルトの starter map をそのまま使えます。
            5. `${WORKADVENTURE_PUBLIC_URL}` を開いて、空間に入ってみましょう。

            ## デプロイ後にできること

            `workadventure` サービスで公開済み環境変数を編集して、次のような調整ができます。

            - LiveKit を接続して大人数通話に対応
            - TURN / Coturn を接続して WebRTC の接続性を改善
            - 最初に入る部屋を変更
            - チャットやアップロード設定を調整
            - inline map editor を有効化または制限
    zh-CN:
        description: 在 Zeabur 上快速搭建自己的虚拟办公室、线上活动空间或互动地图，轻松部署 WorkAdventure。
        variables:
            - key: PUBLIC_DOMAIN
              type: STRING
              name: WorkAdventure 域名
              description: 用来访问 WorkAdventure 空间的主域名。
        readme: |
            # [WorkAdventure](https://github.com/workadventure/workadventure)

            用 WorkAdventure，把团队、社群或活动带进一个可以直接通过浏览器进入的虚拟空间。

            它很适合远程办公、线上活动、导览展示、社区聚会等场景。这个模板已经把 WorkAdventure 的核心服务整理成更适合 Zeabur 的单域名部署方式，让你更容易开始体验。

            - `play`
            - `back`
            - `uploader`
            - `icon`
            - `redis`
            - `map-storage`
            - 以及一个 `nginx` gateway，用来保留常见的单域名路径结构

            ## 为什么值得试试

            - 适合远程团队、社群、课程和线上活动
            - 通过一个链接就能邀请别人进入
            - 支持自定义地图、实时互动和聊天体验
            - 如果你想自托管一个虚拟空间平台，这是很不错的起点

            ## 使用前说明

            - 这个模板部署的是 WorkAdventure 核心服务
            - 如果你要支持更大的语音或视频群组，建议额外接入 LiveKit
            - 如果用户来自限制较多的网络环境，建议再配置 TURN / Coturn
            - 默认会进入官方 starter-kit 示例地图，方便你先快速体验

            ## 快速开始

            1. 点击 `Deploy` 在 Zeabur 上部署模板。
            2. 到 `workadventure` 服务的 `Overview -> Instructions` 查看 Map Storage 用户名和密码。
            3. 打开 `${WORKADVENTURE_PUBLIC_URL}/map-storage/` 登录并上传自己的地图。
            4. 如果你只是想先体验，也可以继续使用默认 starter map。
            5. 打开 `${WORKADVENTURE_PUBLIC_URL}` 开始探索你的虚拟空间。

            ## 部署后可继续调整

            你可以在 `workadventure` 服务中编辑已暴露的环境变量，来：

            - 接入 LiveKit，支持更大的群组通话
            - 接入 TURN / Coturn，提高 WebRTC 连线成功率
            - 修改默认进入的房间
            - 调整聊天与上传行为
            - 启用或限制 inline map editor
    zh-TW:
        description: 在 Zeabur 上快速建立自己的虛擬辦公室、活動空間或互動地圖，輕鬆部署 WorkAdventure。
        variables:
            - key: PUBLIC_DOMAIN
              type: STRING
              name: WorkAdventure 網域
              description: 用來開啟 WorkAdventure 空間的主要網域。
        readme: |
            # [WorkAdventure](https://github.com/workadventure/workadventure)

            用 WorkAdventure，把團隊、社群或活動搬進一個可以直接用瀏覽器進入的虛擬空間。

            你可以把它想成一個適合遠端協作、線上活動、導覽展示、社群聚會的互動地圖平台。這個模板幫你把 WorkAdventure 的核心服務整理成較適合 Zeabur 的單網域部署方式，讓初次體驗更順手。

            - `play`
            - `back`
            - `uploader`
            - `icon`
            - `redis`
            - `map-storage`
            - 以及一個 `nginx` gateway，保留官方常見的單網域路徑結構

            ## 為什麼你可能會喜歡它

            - 很適合遠端辦公、社群空間、線上活動與教學場景
            - 只要一個連結就能分享給其他人進入
            - 支援自訂地圖、即時互動與聊天體驗
            - 如果你想要一個能自己掌控的虛擬空間服務，這會是不錯的起點

            ## 開始前先知道

            - 這個模板部署的是 WorkAdventure 核心服務
            - 如果你要支援更大的語音或視訊群組，建議另外接上 LiveKit
            - 如果使用者來自較嚴格的網路環境，建議再加上 TURN / Coturn
            - 預設會先帶你進入官方 starter-kit 範例地圖，方便先測試整體體驗

            ## 快速開始

            1. 點擊 `Deploy` 在 Zeabur 上部署模板。
            2. 到 `workadventure` 服務的 `Overview -> Instructions` 取得 Map Storage 帳號與密碼。
            3. 開啟 `${WORKADVENTURE_PUBLIC_URL}/map-storage/` 並登入，上傳你自己的地圖。
            4. 如果你想先試玩，也可以先直接使用預設 starter map。
            5. 開啟 `${WORKADVENTURE_PUBLIC_URL}`，開始探索你的虛擬空間。

            ## 部署後可以再調整

            你可以在 `workadventure` 服務中編輯已暴露的環境變數，進一步：

            - 接上 LiveKit，支援更大的群組通話
            - 接上 TURN / Coturn，提升 WebRTC 連線成功率
            - 修改預設進入房間
            - 調整聊天與上傳行為
            - 開啟或限制 inline map editor
