# Проект: docs.a2v.space — Персональная документация ## Техническое задание ### Каркас - Hugo static site generator (уже установлен) - Кастомная тема на Bootstrap 5 (не использовать готовые темы, создать свою) - Bootstrap 5 через CDN - Тёплая цветовая палитра: бежевый (#f5f0e8), терракота (#c4623a), тёплый серый (#6b6560), тёмно-коричневый (#3d3530), акцент — золотистый (#d4a853) - Шрифт: системный sans-serif, читаемый, не мелкий ### Навигация - **Горизонтальное меню в шапке** — 5 разделов: Дневник, База знаний, Планы, Инструкции, Креды - **Боковое меню слева** — фильтры/подразделы для каждого раздела (теги, категории, статусы) - **Мобильная адаптация** — hamburger menu, боковое меню скрывается, контент на всю ширину ### Разделы #### 1. Дневник (Diary) — `/diary/` - Формат блога, постинг по датам - Каждый пост = один день - Внутри поста: записи с указанием времени обсуждения и кратким описанием - Timeline-вид на странице списка (дата → превью) - Front matter: date, title, tags #### 2. База знаний (Knowledge Base) — `/kb/` - Сквозной список статей (одностраничных) - Теги для категоризации - Боковое меню: список тегов как фильтр - Поиск по заголовкам и содержимому (client-side, fuse.js) #### 3. Планы (Plans) — `/plans/` - Список планов-карточек - Статусы: 🟡 Запланировано, 🟠 В процессе, ✅ Сделано, ❌ Отменено - **Ранжирование**: завершённые (✅, ❌) в конце по дате завершения, предстоящие (🟡, 🟠) — ближайшая дата первой - На карточке: что планируется, когда планируем, статус, когда и при каких обстоятельствах запланировали (с цитатой автора) - Front matter: title, date, plan_date (когда планируется), status (planned/in_progress/done/cancelled), done_date, context_quote #### 4. Инструкции (Guides) — `/guides/` - Аналогичен Базе знаний - Пошаговые инструкции - Теги, боковое меню с фильтрами #### 5. Креды (Credentials) — `/creds/` - Одни креды = одна запись - **Шифрование содержимого**: пароли хранятся зашифрованными (AES через Web Crypto API) - При загрузке страницы — кнопка "Расшифровать", пользователь вводит мастер-пароль - Без мастер-пароля видны только названия/описания, значения скрыты - Front matter: title, description, service - Тело: зашифрованный JSON с полями (user, password, host, port, notes и т.д.) ### Шифрование кредов (ВАЖНО!) Реализовать через JavaScript Web Crypto API: 1. При создании записи — JS-скрипт шифрует JSON с кредами мастер-паролем → сохраняет encrypted payload в Markdown 2. При просмотре — кнопка "Расшифровать" → prompt для мастер-пароля → AES-GCM дешифровка → показать поля 3. Использовать PBKDF2 для деривации ключа из пароля, AES-256-GCM для шифрования 4.Salt и IV хранить вместе с payload (base64 encoded) ### Поиск - Client-side поиск через Fuse.js (CDN) - Индекс строится при сборке Hugo (JSON index) - Поле поиска в шапке ### Адаптивность - Mobile-first - На мобильных: hamburger menu, без боковой панели, контент на полную ширину - На планшетах: боковая панель сворачиваемая - На десктопе: полная навигация + боковая панель --- ## Контент для наполнения ### База знаний — API Eversolo Создать статью `/content/kb/eversolo-api.md`: Eversolo T8 — музыкальный стример, IP: 192.168.0.156, порт API: 9529, без авторизации. #### Воспроизведение | Действие | URL | |----------|-----| | Play/Pause | `/ZidooMusicControl/v2/playOrPause` | | Следующий трек | `/ZidooMusicControl/v2/playNext` | | Предыдущий трек | `/ZidooMusicControl/v2/playLast` | | Перемотка (ms) | `/ZidooMusicControl/v2/seekTo?time=` | | Воспроизвести по ID | `/ZidooMusicControl/v2/playMusic?type=4&id=` | | Состояние | `/ZidooMusicControl/v2/getState` | #### Громкость | Действие | URL | |----------|-----| | Громкость вверх | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp` | | Громкость вниз | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown` | | Точная громкость | `/ZidooMusicControl/v2/setDevicesVolume?volume=<0-200>` | | Mute | `/ZidooMusicControl/v2/setMuteVolume?isMute=1` | | Unmute | `/ZidooMusicControl/v2/setMuteVolume?isMute=0` | #### Входы/Выходы | Действие | URL | |----------|-----| | Получить список | `/ZidooMusicControl/v2/getInputAndOutputList` | | Установить вход | `/ZidooMusicControl/v2/setInputList?tag=&index=` | | Установить выход | `/ZidooMusicControl/v2/setOutInputList?tag=&index=` | | Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB | #### Дисплей | Действие | URL | |----------|-----| | Яркость экрана (get) | `/SystemSettings/displaySettings/getScreenBrightness` | | Яркость экрана (set) | `/SystemSettings/displaySettings/setScreenBrightness?index=<0-115>` | | Яркость ручки (get) | `/SystemSettings/displaySettings/getKnobBrightness` | | Яркость ручки (set) | `/SystemSettings/displaySettings/setKnobBrightness?index=<0-255>` | | VU-режим (get) | `/SystemSettings/displaySettings/getVUModeList` | | VU-режим (set) | `/SystemSettings/displaySettings/setVUMode?index=` | | Спектр (get) | `/SystemSettings/displaySettings/getSpPlayModeList` | | Спектр (set) | `/SystemSettings/displaySettings/setSpPlayModeList?index=` | | Переключить VU/Спектр | `/ZidooMusicControl/v2/changVUDisplay?openType=<0|1>` | #### Питание | Действие | URL | |----------|-----| | Параметры питания | `/ZidooMusicControl/v2/getPowerOption` | | Перезагрузка | `/ZidooMusicControl/v2/setPowerOption?tag=reboot` | | Выключение | `/ZidooMusicControl/v2/setPowerOption?tag=poweroff` | | Переключить экран | `/ZidooMusicControl/v2/setPowerOption?tag=screen` | | Включить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.ON` | | Выключить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.OFF` | #### Поиск | Поиск | URL | |-------|-----| | По трекам | `/ZidooMusicControl/v2/searchMusicV2?key=&start=0&count=100` | | По артистам | `/ZidooMusicControl/v2/searchArtistV2?key=&start=0&count=100` | | По альбомам | `/ZidooMusicControl/v2/searchAlbumV2?key=&start=0&count=100` | #### Обложки и устройство | Действие | URL | |----------|-----| | Обложка по ID | `/ZidooMusicControl/v2/getImage?id=&target=16` | | Модель устройства | `/ControlCenter/getModel` | Источники: - Форум Zidoo: https://forum.zidoo.tv/index.php?threads/some-api.96983/ - HA интеграция: https://github.com/hchris1/Eversolo/blob/main/custom_components/eversolo/api.py --- ### Инструкции #### Инструкция: Подключение claw.a2v.space (OpenClaw) **Архитектура:** Mac Studio (192.168.0.37:18789) → autossh SSH-туннель → VPS 95.163.232.9:8080 → nginx HTTPS → https://claw.a2v.space **Шаги:** 1. DNS: A-запись claw.a2v.space → 95.163.232.9 (ns1/ns2.hosting.reg.ru) 2. Mac Studio: OpenClaw запущен на порту 18789, конфиг ~/.openclaw/openclaw.json 3. SSH-туннель: launchd plist `~/Library/LaunchAgents/com.openclaw.sshtunnel.plist` с `-R 8080:localhost:18789` 4. VPS nginx конфиг: - listen 80 → redirect to https - listen 443 ssl, cert `/etc/letsencrypt/live/claw.a2v.space/` - proxy_pass http://127.0.0.1:8080 - proxy_set_header Host $host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto 5. SSL: certbot certonly --nginx -d claw.a2v.space 6. OpenClaw config: allowedOrigins ["https://claw.a2v.space"], trustedProxies #### Инструкция: Подключение code.a2v.space (OpenCode) **Порт:** 4096, pm2 процесс "opencode" **SSH-туннель:** `-R 8081:localhost:4096` **nginx:** proxy_pass http://127.0.0.1:8081 **SSL:** /etc/letsencrypt/live/code.a2v.space/ #### Инструкция: Подключение sand.a2v.space (Leadera Project) **Порты:** Frontend 4200 (Angular, pm2 leadera-fe), Backend 8080 (Go, pm2 leadera-api) **SSH-туннель:** `-R 8082:localhost:4200 -R 8083:localhost:8080` **nginx:** location / → proxy_pass :8082, location /api → proxy_pass :8083 **SSL:** /etc/letsencrypt/live/sand.a2v.space/ **БД:** PostgreSQL 16 в Docker (Colima), container app-leadera-db #### Инструкция: Настройка VPS как реверс-прокси Общая схема: Mac Studio (локальная сеть) → autossh (SSH-туннели) → VPS 95.163.232.9 (Debian) → nginx (HTTPS reverse proxy) → интернет **Что нужно на VPS:** - nginx + certbot (Let's Encrypt) - SSH-доступ с ключами с Mac Studio - Для каждого домена: server block с SSL, proxy_pass на localhost-порт туннеля **Что нужно на Mac Studio:** - autossh через launchd (com.openclaw.sshtunnel.plist) - Один plist с несколькими -R флагами для всех сервисов --- ### Креды (зашифровать!) #### VPS reg.ru - **Сервис:** VPS хостинг (реверс-прокси) - **IP:** 95.163.232.9 - **User:** root - **Auth:** SSH ключ #### VPN VPS - **Сервис:** VPN сервер - **IP:** 185.234.64.52 - **User:** root - **Password:** lO6kC9gY7r - **VPN:** Amnezia (xray порт 443, AWG порт 46002) #### Mac Studio — leadera-api БД (локальная) - **Сервис:** PostgreSQL (Docker) - **Host:** localhost:5432 - **User:** leadera - **Password:** popoloka16 - **Database:** leadera #### Mac Studio — leadera-api БД (docker-compose) - **Сервис:** PostgreSQL (docker-compose) - **Host:** localhost:5432 - **User:** postgres - **Password:** password - **Database:** it_landscape --- ### Планы #### Настроить интеграцию Ollama с OpenClaw - **Статус:** 🟡 Запланировано - **Дата:** TBD - **Контекст:** Добавлен qwen3.5:9b в openclaw.json, но модель не появилась в openclaw models list. Отложено по решению Антона. #### Реализовать управление Eversolo из OpenClaw - **Статус:** 🟡 Запланировано - **Дата:** TBD - **Контекст:** API изучен, записан в TOOLS.md. Проблема: нет доступа к LAN из sandbox OpenClaw. --- ### Дневник — сегодня (29.03.2026) - 20:03 — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker - 20:31 — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой - 20:49 — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями - 21:13 — Начали проект docs.a2v.space — персональная документация на Hugo --- ## Структура Hugo ``` content/ diary/ 2026-03-29.md kb/ eversolo-api.md plans/ ollama-openclaw.md eversolo-control.md guides/ claw-a2v-space.md code-a2v-space.md sand-a2v-space.md vps-reverse-proxy.md creds/ vps-reg-ru.md vpn-vps.md leadera-db-local.md leadera-db-docker.md ```