@@ -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`. Не плодить фреймворки.
|
||||
|
||||
Reference in New Issue
Block a user