Rework: 4 tabs by func
Deploy / deploy (push) Successful in 10s

This commit is contained in:
2026-08-29 13:33:17 +05:00
parent dfa70e96e3
commit 0857d77a01
18 changed files with 1239 additions and 314 deletions
+12 -4
View File
@@ -15,14 +15,20 @@ PWA для менеджмента homelab: монорепозиторий Go-с
```
proto/homelab/v1/ контракт (единственный источник правды)
gen/ сгенерённый Go-код (коммитим)
server/main.go весь сервер: конфиг, мониторы, RPC, статика
web/src/App.tsx layout, сайдбар секций, поллинг ListSections (3s)
web/src/components/ MonitorCard (мониторы), ScriptCard (response-форма + модалка результата)
server/main.go весь сервер: конфиг, мониторы, RPC, статика, docs API
web/src/App.tsx layout, топбар + hamburger-drawer, 4 хардкод-таба, поллинг ListContent (3s)
web/src/components/ MonitorCard, ScriptCard, Docs (ридер + textarea-редактор)
web/src/docsStore.ts localStorage доков (hub:doc:*), dirty-флаги, syncDocs: pull по хэшам + flush раз в 5s
web/src/gen/ сгенерированный TS-клиент
web/public/ PWA-обвязка: manifest, sw.js, иконки
scripts/ bash-скрипты, пути из config.yaml
docs/ markdown-доки, НЕ в репо — живут только на сервере рядом с бинарьём
```
## Категории
Хардкод в бандле (App.tsx CATEGORIES): Links (из config links), Monitor (config monitor), Exec (config exec), Docs (папка docs/, API ListDocs/GetDoc/SaveDoc). Оффлайн: контент-стейт держит последний ответ, доки — localStorage; правки в оффлайне помечаются dirty и флашатся на сервер каждые 5s (client authority — последняя запись побеждает, без base-hash check).
## Команды (всё через make)
- `make dev` — сервер :8080 + vite :5173 (работать на http://localhost:5173)
@@ -46,7 +52,9 @@ scripts/ bash-скрипты, пути из config.yaml
- `int64` в proto → `bigint` в TS (не `number`!).
- Поля protobuf в TS — camelCase (`arg_types` → `argTypes`).
- Новый item-тип или поле в yaml = обновить proto + валидацию в `loadConfig` + компонент на фронте.
- Иконки секций: строка из конфига → ручной маппинг `ICONS` в `App.tsx` (не тянуть весь lucide через `icons` — раздувает бандл в 5 раз).
- Иконки: хардкод в компонентах из lucide-preact поимённо (не тянуть весь lucide через `icons` — раздувает бандл в 5 раз).
- Маркдаун: `marked` (~10KB gzip) + dangerouslySetInnerHTML без санитайзера (контент свой). Если редактор перестанет нравиться — **переход на MDXEditor** ( agreed upgrade path, изолирован в компоненте Docs).
- index.html и sw.js отдаются с `Cache-Control: no-cache` — иначе iOS не подхватит новый бандл.
- Логи сервера: monitors и RunScript пишут в stdout; `ListSections` (поллинг-шум) исключён из HTTP-лога echo.
- SW: `web/public/sw.js`, версия кэша `homelab-shell-vN` — **бампить при изменении** офлайн-логики, иначе iOS не обновит.
- Тесты: `make test` (smoke RPC) + `tsc --noEmit` внутри `make web`. Не плодить фреймворки.