# Telemt Panel (Web UI) SvelteKit + shadcn-svelte. В **production** статика собирается и **встраивается в образ шлюза** ([Dockerfile](../Dockerfile) в корне репозитория): панель и API на **одном порту** (например `http://127.0.0.1:8080/` — UI, `/api/…` — шлюз). ## Переменная `PUBLIC_TELEMT_GATEWAY_URL` | Значение | Когда | | --- | --- | | *(пусто)* | Тот же хост и порт, что у страницы (Docker-образ шлюза, `npm run build` в Dockerfile с `ENV PUBLIC_TELEMT_GATEWAY_URL=`) | | `http://127.0.0.1:8080` | Локальная разработка: Vite на `:5173`, шлюз на `:8080` | Скопируйте [.env.example](.env.example) в `.env` и при необходимости задайте URL. ## Разработка (Vite отдельно от Go) ```powershell cd web npm install npm run dev ``` Откройте `http://localhost:5173`. В конфиге шлюза включите [CORS](../docs/AGGREGATE.md) для этого origin: ```yaml cors_allowed_origins: - "http://localhost:5173" ``` ## Сборка только фронта ```powershell npm run build ``` Артефакт — каталог `build/`, при сборке **Docker-образа шлюза** он копируется в `internal/webui/static/` и попадает в бинарник через `embed`. ## Типы из OpenAPI агрегатов ```powershell npm run gen:api ``` Источник: [../docs/AGGREGATE_OPENAPI.yaml](../docs/AGGREGATE_OPENAPI.yaml). ## Ограничения - Секреты upstream к Telemt задаются на шлюзе (`authorization_env`), не в браузере. - Для мутаций из другого origin шлюз отдаёт нужные заголовки CORS (в т.ч. методы `POST`, `PATCH`, `DELETE`).