From cb531e403f57684c97df953bb659bb2cb584f419 Mon Sep 17 00:00:00 2001 From: Daniil Date: Wed, 29 Apr 2026 11:56:25 +0300 Subject: [PATCH] vault backup: 2026-04-29 11:56:25 --- smart-home-tablet-roadmap.md | 685 +++++++++++++++++++++++++++++++++++ 1 file changed, 685 insertions(+) create mode 100644 smart-home-tablet-roadmap.md diff --git a/smart-home-tablet-roadmap.md b/smart-home-tablet-roadmap.md new file mode 100644 index 0000000..3e5ed98 --- /dev/null +++ b/smart-home-tablet-roadmap.md @@ -0,0 +1,685 @@ +# Smart Home Tablet — Roadmap / идеи развития + +> Связанный doc: `smart-home-tablet.md` (reference). +> Приоритеты от «ближайшая сессия» до «эксперименты». Для каждой идеи — что даёт, что нужно от Даниила, сложность (S/M/L), зависимости. + +Сложность: +- **S** — 1 сессия (до 2 часов), только код +- **M** — 1-2 сессии, может требовать настройки на стороне +- **L** — 3+ сессий, внешние сервисы / железо / аккаунты + +Статус: +- 🟢 готово к работе, всё что нужно — сделать +- 🟡 требует от Даниила что-то купить/настроить/зарегистрироваться +- 🔴 нужно железо или сторонние аккаунты, которых пока нет + +--- + +## 🏡 Своя экосистема — самый большой рычаг + +Это не «уровень», а **сквозная тема**. У Даниила уже запущены собственные приложения в `/opt/digital-home/`. Дашборд обязан быть их витриной — это сразу делает его уникальным артефактом, невозможным без этой конкретной инфраструктуры. + +### A. Habits-app streak widget +**Что даёт**: виджет на Home «сегодня 3/5 привычек» с прогресс-барами. Мотивирует каждое утро смотреть. +**От тебя**: выставить из `habits-app` JSON endpoint `/api/public/today` (или дёргать БД напрямую если контейнеры в одной сети). +**Что нужно мне**: proxy `/api/habits` + виджет. +**Сложность**: S · **Статус**: 🟢 + +### B. Langlearn прогресс и streak +**Что даёт**: «15-й день подряд · сегодня 12 слов». На выходных — мотив сделать ежедневный минимум. +**От тебя**: endpoint из `langlearn` / `lingua-learn`. +**Что нужно мне**: proxy + виджет с миниатюрой «осталось N новых карточек». +**Сложность**: S · **Статус**: 🟢 + +### C. Japan-app / trip countdown +**Что даёт**: до поездки в Токио — countdown + чеклист («виза / билеты / hotel / suitcase»). После поездки — галерея. +**От тебя**: API `japan-app` с датами поездки и чеклистом. +**Что нужно мне**: виджет с большими цифрами дней и нижним рядом чеклиста. +**Сложность**: S · **Статус**: 🟢 + +### D. Pulse balance + текущий месяц +**Что даёт**: «осталось 12k до конца месяца», «накоплено на Токио: 340k / 500k (68%)». Один из самых high-glance виджетов. +**От тебя**: endpoint в `pulse-web` (предположительно уже есть `/api/savings`). +**Что нужно мне**: виджет с прогресс-кольцами. +**Сложность**: S · **Статус**: 🟢 (API `/api/savings` уже есть в проекте как заготовка) + +### E. Finance — бюджет и счета к оплате +**Что даёт**: «электричество до 25-го · 1580₽», «интернет завтра». Раз в месяц спасает от пеней. +**От тебя**: `finance` таблица счетов с due date. +**Что нужно мне**: виджет + уведомления overlay в день оплаты. +**Сложность**: S · **Статус**: 🟢 + +### F. Adventurelog — карта поездок / воспоминания +**Что даёт**: «3 года назад · Прага» с фото — эмоциональный хук, возврат к дашборду. +**От тебя**: endpoint случайной точки из `adventurelog`. +**Что нужно мне**: виджет в screensaver / photo frame режиме. +**Сложность**: S · **Статус**: 🟢 + +### G. Digest — сводка за день/неделю +**Что даёт**: если у тебя уже крутится проект `digest` (собирающий какие-то ежедневные сводки) — показывать их здесь. +**От тебя**: уточнить что именно `digest` агрегирует. +**Что нужно мне**: виджет с последним дайджестом. +**Сложность**: S · **Статус**: 🟡 (нужно понять что там) + +### H. Homelab-api — здоровье всех твоих сервисов +**Что даёт**: маленькая строка в TopBar — «все 18 сервисов OK», при красном — детальный список кто упал. +**От тебя**: endpoint из `homelab-api` со статусом всех docker-контейнеров. +**Что нужно мне**: виджет + фоновый polling. +**Сложность**: S · **Статус**: 🟢 + +**Почему это важно сделать раньше внешних интеграций**: потому что твоя экосистема — это то, что делает дашборд **твоим**. Погода и трамваи есть у всех. Habits+langlearn+pulse+trip countdown в одном месте — нет ни у кого. Это отличает «очередной дашборд» от «артефакта твоей жизни». + +--- + +## 🎯 Уровень 1 — ближайшие 2-3 сессии + +### 1. PWA standalone + Fully Kiosk Browser +**Что даёт**: планшет выглядит как нативное приложение — fullscreen, auto-wake от движения, защита от выхода, иконка на home screen, без адресной строки. +**От тебя**: установить FKB на планшет по инструкции `smart-home-tablet-fkb-setup.md`. Опционально купить FKB-лицензию €7 (снимает watermark, открывает Remote Admin). +**Что нужно сделать мне**: добавить `manifest.json` + service worker (offline fallback) в Next.js; apple-touch-icon. +**Сложность**: S · **Статус**: 🟢 + +### 2. WebSockets Home Assistant вместо polling +**Что даёт**: мгновенные обновления состояний устройств. Сейчас polling каждые N секунд — пропуск событий и лишняя нагрузка. +**От тебя**: ничего (long-lived token у тебя уже есть). +**Что нужно мне**: переписать `hooks/useHA.ts` на WebSocket API HA (`/api/websocket`), subscribe_events + get_states initial. Fallback на polling если WS не поднялся. +**Сложность**: M · **Статус**: 🟢 + +### 3. Яндекс.Станция виджет +**Что даёт**: видишь что играет, контроль громкости, таймеры Алисы на планшете. +**От тебя**: у тебя уже есть Станция Лайт/Мини? Если да — добавить [AlexxIT/YandexStation](https://github.com/AlexxIT/YandexStation) интеграцию в Home Assistant (требует логин в Я.Аккаунт через HACS). +**Что нужно мне**: виджет `` на Home: текущий трек, пилюли «громкость −/+», «пауза», таймеры. Через HA entities `media_player.yandex_station_*`. +**Сложность**: M · **Статус**: 🟡 зависит от того, есть ли Станция в HA + +### 4. Утренний режим (morning briefing) +**Что даёт**: с 7:00 до 10:00 Home показывает другую раскладку — большое «что надеть» (температура + рекомендация «+2°C лёгкая куртка»), walking-time до трамвая с пометкой «успеешь/бежать», события на сегодня. +**От тебя**: ничего. +**Что нужно мне**: условный рендер `` по часу, логика одевалки (температура + осадки + ветер → текст), кэш walking-time (Google/OSRM API или хардкод). +**Сложность**: S · **Статус**: 🟢 + +### 5. Shared shopping list через Telegram-бот +**Что даёт**: Света со своего телефона пишет боту `/add молоко` — пункт появляется в списке на планшете. Замыкает семейный use case. +**От тебя**: + - Создать Telegram-бота через @BotFather, получить token (~2 минуты) + - Создать чат «Семья» с ботом и Светой +**Что нужно мне**: + - Endpoint `/api/telegram/webhook` → парсит сообщения, дёргает `/api/notes` PUT + - Скрипт установки webhook на старте контейнера + - Разделение списков per-user (или общий «семейный») +**Сложность**: M · **Статус**: 🟡 + +### 6. Выбор остановок транспорта из UI +**Что даёт**: в Settings выбираешь остановки по поиску названия — избавляешься от хардкода `16226`/`16354`. Поддержка N остановок. +**От тебя**: ничего. +**Что нужно мне**: + - Cron в `/api/transport/feed` — раз в неделю скачивает GTFS, парсит `stops.txt` + - Endpoint `/api/transport/search?q=названия` + - UI в Settings: поиск + список избранных + - Сохранение в `/data/tablet-config.json` +**Сложность**: M · **Статус**: 🟢 + +### 7. Контекстные подсказки +**Что даёт**: в углу TopBar маленький бар с «Дождь к 15:00, не забудь зонт», «Света выехала с работы — будет через 20 мин», «ДР Светы через 3 дня». +**От тебя**: ничего критичного. Для «Света едет домой» — мобильное HA-приложение на её телефоне с device_tracker. +**Что нужно мне**: rules-engine, комбинирующий погоду / календарь / HA device trackers. Приоритизация (один бар = одна самая важная подсказка). +**Сложность**: M · **Статус**: 🟡 (для геолокации) + +### 7b. Cooking mode +**Что даёт**: отдельный полноэкранный режим для готовки. Scroll-lock (экран не гаснет), шрифт крупный (24-28px), таймеры всегда видны, один рецепт на экране. Активируется кнопкой «Готовлю» с Home или автоматически когда идёшь к Я.Станции на кухне (если Света где-то настроит). +**От тебя**: ничего. Опционально — база рецептов (можно потом). +**Что нужно мне**: + - `/cooking` route с отдельным layout + - Wake Lock API (`navigator.wakeLock`) — экран не засыпает + - Крупные таймеры, голосовое «окей, +5 минут» опционально +**Сложность**: M · **Статус**: 🟢 + +### 7c. Service Worker + offline fallback + состояние между релоадами +**Что даёт**: при отвале WiFi приложение не белеет, а показывает последние данные. Плюс сохранение последней активной вкладки, фильтров календаря, выбранной остановки — чтобы F5 не сбрасывал контекст. +**От тебя**: ничего. +**Что нужно мне**: SW с stale-while-revalidate для API, persistent zustand store в `localStorage`. +**Сложность**: M · **Статус**: 🟢 + +--- + +## 🔜 Уровень 2 — ближайший месяц + +### 8. Walking-time до остановок (для утреннего режима) +**Что даёт**: «ближайший 23-й через 4 мин, до остановки 6 мин — не успеешь». Приоритизация маршрутов. +**От тебя**: + - Примерные координаты дома (или точный адрес) + - Опционально OpenRouteService API key (бесплатный) +**Что нужно мне**: fetch к OSRM / ORS, кэш в `/data/walking-times.json`. +**Сложность**: S · **Статус**: 🟡 + +### 9. Meal planner (меню на неделю) +**Что даёт**: планировщик еды: 7 ячеек × (завтрак/обед/ужин), совместное редактирование, из шаблонов. +**От тебя**: сформулировать формат — какие блюда в ротации, кто готовит. +**Что нужно мне**: + - `/api/meals/route.ts` + storage в `/data/meals.json` + - Отдельная вкладка «Меню» или интеграция в Notes + - Сгенерировать shopping list из выбранных блюд (links между meals и ingredients) +**Сложность**: L · **Статус**: 🟢 + +### 10. Рецепты из продуктов (Claude API) +**Что даёт**: вводишь «что есть в холодильнике» → Claude предлагает 3 рецепта. +**От тебя**: + - Anthropic API key (личный, ~€5 депозита = ~500 запросов) + - Положить в `tablet.env` как `ANTHROPIC_API_KEY` +**Что нужно мне**: `/api/recipes/route.ts` с prompt caching (история ингредиентов), UI-форма. +**Сложность**: S · **Статус**: 🟡 + +### 11. Семейная геолокация (Даниил / Света) +**Что даёт**: маленькая пилюля «Света · 15 мин до дома / на работе / неизвестно». Триггеры для подсказок («Света едет» → поставь чайник). +**От тебя**: + - Установить **Home Assistant Companion App** на телефон Даниила и Светы + - В HA настроить device_tracker + zones (Дом, Работа) + - Договориться что это ок для Светы (privacy check) +**Что нужно мне**: виджет в TopBar или маленький бар на Home, читает `device_tracker.*` из HA. +**Сложность**: S (код) + M (настройка HA) · **Статус**: 🟡 + +### 12. Быстрые кнопки на Home (Quick Actions) +**Что даёт**: «Новая заметка», «Таймер 10 мин», «Выключить свет везде», «Чайник» — одним тапом с главной. +**От тебя**: сформулировать какие именно кнопки тебе нужны (реально нужны в быту). +**Что нужно мне**: конфиг `QUICK_ACTIONS` с иконкой + onClick (может звать HA scene, открывать модалку, etc.). +**Сложность**: S · **Статус**: 🟢 + +### 13. Таймеры (кухонные) +**Что даёт**: «чайник 5 мин», «паста 9 мин» — старт с Home, визуальный отсчёт, звук по окончании. +**От тебя**: ничего. Опционально — разрешить звук в FKB (Settings → Audio). +**Что нужно мне**: компонент `` с state в `/data/tablet-timers.json` (чтобы пережил F5), WebAudio для звука. +**Сложность**: S · **Статус**: 🟢 + +### 14. Напоминалки (лекарства / витамины / полив цветов) +**Что даёт**: «Прими витамин D», «Полей монстеру». Чекбоксы истории — кликаешь «принял», пропадает. +**От тебя**: сформулировать что напоминать и когда. +**Что нужно мне**: + - `/api/reminders/route.ts` + storage + - Cron-like schedule в UI (ежедневно в 10:00, каждые 3 дня, etc.) + - Показ активных напоминалок на Home +**Сложность**: M · **Статус**: 🟢 + +### 15. Счётчик дней / countdown +**Что даёт**: «До отпуска Токио 47 дней», «ДР Светы через 5 дней», «Последний трамвай 23 через 3 часа». +**От тебя**: список событий с датами. +**Что нужно мне**: виджет ``, конфиг в `/data/tablet-countdowns.json`, UI в Settings. +**Сложность**: S · **Статус**: 🟢 + +### 16. Swipe-жесты вкладок +**Что даёт**: свайп между Home/Devices/Calendar/Notes/Settings влево-вправо. +**От тебя**: ничего. +**Что нужно мне**: framer-motion drag на `
`, snap к соседним вкладкам. +**Сложность**: S · **Статус**: 🟢 + +### 17. Bill / subscription tracker +**Что даёт**: «электричество до 25-го · 1580₽», «YouTube Premium завтра», «интернет через 3 дня». Маленький виджет, огромная польза — раз в месяц спасает от пеней. +**От тебя**: список своих счетов с датами и суммами, либо интеграция с `finance` проектом. +**Что нужно мне**: `/api/bills/route.ts` с JSON-хранилищем, UI в Settings для ввода, виджет-бар + overlay-alert в день оплаты. +**Сложность**: S · **Статус**: 🟢 + +### 18. Expense capture по фото чека +**Что даёт**: сфоткал чек в магазине → OCR вытаскивает сумму / магазин / дату → автоматически в pulse / finance. Убирает ежедневное «надо записать, а я забыл». +**От тебя**: + - [Tesseract.js](https://tesseract.projectnaptha.com/) (бесплатно, в браузере) **или** Claude API с vision (~€0.01/чек) + - Разрешить камеру FKB (уже должно быть) +**Что нужно мне**: UI-кнопка «сфоткать чек» → фото → OCR/AI → preview → подтверждаешь → сохраняется. Интеграция с pulse. +**Сложность**: M · **Статус**: 🟡 + +### 19. Photo frame режим +**Что даёт**: отдельный режим (не screensaver!) — когда в квартире никого, **слайдшоу семейных фото** с подписью «5 лет назад, Прага». Эмоциональный возвратный хук. +**От тебя**: у тебя Nextcloud уже развёрнут в `/opt/digital-home/nextcloud/` — достать папку с фото через WebDAV. Альтернатива — Google Photos (ограничен последним годом). +**Что нужно мне**: + - `/api/photos/random` → достаёт случайное фото + - `` как альтернативный screensaver после 20+ мин бездействия + - Плавный fade между фото, минималистичная подпись с датой +**Сложность**: M · **Статус**: 🟡 (нужно расчехлить Nextcloud API) + +> Пункт «Offline mode / Service Worker» объединён с 7c выше. + +--- + +## 🗓 Уровень 3 — средний срок (1-3 месяца) + +### 18. Telegram bridge (ответы с планшета) +**Что даёт**: приходит сообщение → уведомление на планшете → можно ответить оттуда. +**От тебя**: + - Отдельный Telegram-аккаунт для планшета **или** Bot API (тогда только в чат с ботом) + - Либо userbot (MTProto) — сложнее, но отвечает от твоего имени (риск бана аккаунта при нарушении ToS) +**Что нужно мне**: pyrogram/gramJS клиент как микросервис + WS в приложение. +**Сложность**: L · **Статус**: 🟡 + +### 19. Виджет задач Vikunja +**Что даёт**: чеклист задач на сегодня с галочками. API `/api/tasks` уже есть. +**От тебя**: сказать какой список в Vikunja считать «на сегодня» (projectId). +**Что нужно мне**: подключить `/api/tasks` к виджету на Home, синхронизация. +**Сложность**: S · **Статус**: 🟢 + +### 20. Виджет накоплений Pulse +**Что даёт**: прогресс-бары финансовых целей («Токио: 68% · 340k / 500k»). +**От тебя**: ничего, API уже готов. +**Что нужно мне**: виджет + интеграция. +**Сложность**: S · **Статус**: 🟢 + +### 21. Камеры наблюдения +**Что даёт**: превью камер во дворе / подъезде (если есть). При звонке в дверь — снапшот overlay. +**От тебя**: + - IP-камеры в доме (RTSP-стрим) — у тебя есть? + - Настройка Frigate / WebRTC-моста в HA +**Что нужно мне**: iframe с Frigate стримом или webrtc-card интеграция. +**Сложность**: L · **Статус**: 🔴 нужно железо + +### 22. Doorbell + motion detection +**Что даёт**: уведомление «звонок в дверь» с фото. «Пришла посылка» если camera видит курьера. +**От тебя**: умный звонок (Aqara G4 / Ring) или IP-камера у двери + Frigate person detection. +**Что нужно мне**: notification-overlay на весь экран с кнопкой «открыть». +**Сложность**: M (код) + L (железо/настройка) · **Статус**: 🔴 + +### 23. Медиа-контроль (Spotify / Я.Музыка / Apple Music) +**Что даёт**: что играет на любом устройстве (телефон / колонка / комп) + pause/skip. +**От тебя**: + - Spotify: developer account + client ID (бесплатно) + - Я.Музыка: неофициальное API, ломается иногда +**Что нужно мне**: oauth flow для Spotify, хранение refresh token в `/data/`. +**Сложность**: M · **Статус**: 🟡 + +### 24. IR-бластер (управление TV / AC) +**Что даёт**: с планшета включить телевизор, поменять канал, кондиционер на +2°C. +**От тебя**: IR-бластер (Broadlink RM4 Pro или Aqara — ~2500₽), настройка в HA с «обучением» пульта. +**Что нужно мне**: UI-пульт в Devices tab. +**Сложность**: M (код) + M (обучение пультов) · **Статус**: 🔴 нужно железо + +### 25. Робот-пылесос +**Что даёт**: запустить уборку с планшета, карта уборки. +**От тебя**: пылесос с HA-интеграцией (Xiaomi / Roborock через miio) и настройка в HA. +**Что нужно мне**: кнопка-виджет на Home или вкладке Devices. +**Сложность**: S · **Статус**: 🔴 нужен пылесос + +### 26. Энергомониторинг +**Что даёт**: графики потребления за день/неделю. «Сегодня +15% от среднего». +**От тебя**: умный счётчик / умные розетки с watt-meter (Shelly / Aqara). +**Что нужно мне**: интеграция через HA, chart.js. +**Сложность**: M (код) + L (железо) · **Статус**: 🔴 + +### 27. Трекер посылок +**Что даёт**: «CDEK CN9876 — в городе, завтра на выдачу», «Ozon — курьер в пути». +**От тебя**: копировать трек-номера вручную в UI, либо скрапер сделки/Ozon (API у них приватное, риск бана). +**Что нужно мне**: + - Скорее всего платный [17track.net API](https://api.17track.net/) (€, но универсальный трекинг) + - Либо самопис скраперов (хрупко) +**Сложность**: M · **Статус**: 🟡 (если 17track) + +### 28. Курс валют / бензин +**Что даёт**: USD/EUR/₽ маленькой строкой, цена бензина АИ-95 по району. +**От тебя**: ничего. +**Что нужно мне**: ЦБ РФ XML API (бесплатный), цена бензина через открытые источники (скрапер или yandex.ru/maps POI). +**Сложность**: S · **Статус**: 🟢 + +### 29. Новости (RSS + Telegram каналы) +**Что даёт**: 3 топ-заголовка раз в час из выбранных источников. +**От тебя**: список RSS и/или Telegram-каналов. +**Что нужно мне**: rss-parser lib + Telegram Bot API (Bot может читать public channels). +**Сложность**: M · **Статус**: 🟡 + +### 29a. Wake word («Окей, планшет») +**Что даёт**: голосовая активация для рук-занятых ситуаций: «окей планшет, таймер 10 минут», «окей планшет, добавь молоко в список». Меняет способ использования на кухне. +**От тебя**: ничего (работает локально, без облака). +**Что нужно мне**: + - [Porcupine](https://github.com/Picovoice/porcupine) — локальное wake-word detection, бесплатно до 3 wake-words + - После триггера — Web Speech API для следующей команды + - Маппинг команд: «таймер N минут» → запустить таймер, «добавь X в список» → call API +**Сложность**: L · **Статус**: 🟡 + +### 29b. Guest mode с WiFi QR +**Что даёт**: приходят гости → кнопка «Режим гостей» → большой QR с паролем гостевой WiFi + часы/погода, без PIN, без твоих данных. Маленький ритуал, но работает каждый раз. +**От тебя**: + - Гостевая WiFi-сеть на роутере (MikroTik/Keenetic — 5 минут) + - QR-код хранишь как SVG в настройках +**Что нужно мне**: `/guest` route без middleware + отдельный layout. +**Сложность**: S · **Статус**: 🟡 + +### 29c. Health / Sleep integration +**Что даёт**: «вчера спал 6ч 20м, восстановление 62%», «сегодня 8k шагов». Если пересыпание или много ходьбы — подсветка в утреннем режиме (кофе / «молодец»). +**От тебя**: фитнес-трекер с HA интеграцией: + - Mi Band + [Gadgetbridge](https://gadgetbridge.org/) на Android-хабе + - **или** Fitbit через [HA Fitbit integration](https://www.home-assistant.io/integrations/fitbit/) (OAuth) + - **или** Apple Health → через [Homebridge](https://homebridge.io/) сложно, только через iOS shortcut +**Что нужно мне**: виджет «сон и активность» на Home, подсветка в morning mode. +**Сложность**: M (код) + M (настройка) · **Статус**: 🟡 + +--- + +## 🧪 Уровень 4 — эксперименты (когда захочется) + +### 30. Scanner штрих-кодов для shopping list +**Что даёт**: планшет сканирует штрих-код товара → добавляет в список. Запоминает «4606036017412 = молоко». +**От тебя**: разрешить камеру в FKB. +**Что нужно мне**: `@zxing/library` WebAssembly barcode reader, локальный словарь штрих-кодов. +**Сложность**: M · **Статус**: 🟢 + +### 31. QR выгрузка списка покупок на телефон +**Что даёт**: в списке есть кнопка «QR» — сканируешь с телефона, открывается компактная mobile-страница этого же списка (без PIN, временный URL). +**От тебя**: ничего. +**Что нужно мне**: генератор короткоживущих токенов, mobile view. +**Сложность**: S · **Статус**: 🟢 + +### 32. Фото-скринсейвер из Google Photos / Nextcloud +**Что даёт**: во время screensaver плавный слайдшоу семейных фото. +**От тебя**: + - Google Photos: ограничен, API отдаёт только media items за последний год + - Nextcloud: если у тебя уже развёрнут (вижу в `/opt/digital-home/nextcloud/`) → `/remote.php/dav/` WebDAV +**Что нужно мне**: fetch случайной фотки, предзагрузка. +**Сложность**: M · **Статус**: 🟡 (твой Nextcloud уже готов) + +### 33. Мини-игры для гостей +**Что даёт**: простые игры — память, 2048, сапёр. Чтобы гостям / детям занять 5 минут. +**От тебя**: ничего. +**Что нужно мне**: отдельная вкладка или секция в Home. +**Сложность**: M · **Статус**: 🟢 + +### 34. Гостевой режим +**Что даёт**: открыть UI без PIN, но в ограниченном виде (только время+погода, без календаря и заметок). +**От тебя**: ничего. +**Что нужно мне**: отдельный read-only pub URL `/guest` без middleware. +**Сложность**: S · **Статус**: 🟢 + +### 35. Голосовой ассистент на планшете +**Что даёт**: «Окей, дом — таймер на 5 минут», «Добавь в список молоко». +**От тебя**: + - Для offline распознавания — Rhasspy или Vosk + - Для Whisper API — Anthropic/OpenAI key (платно) +**Что нужно мне**: Web Speech API (браузерное, но требует onlineGoogle в Chrome) → либо кастомный микросервис STT на сервере. +**Сложность**: L · **Статус**: 🟡 + +### 36. Multi-user профили (Даниил + Света) +**Что даёт**: два PIN, две темы, два избранных набора (остановки / заметки / календарные фильтры). +**От тебя**: ничего. +**Что нужно мне**: переделка auth — user slot, namespaced storage. +**Сложность**: L · **Статус**: 🟢 + +### 37. Weekly digest / summary +**Что даёт**: воскресное напоминание «за неделю: 12 событий / 3 поездки / 5 заметок». +**От тебя**: ничего. +**Что нужно мне**: агрегатор со стораджа, показ overlay по воскресеньям. +**Сложность**: S · **Статус**: 🟢 + +### 38. Фаза луны / восход-закат / магнитные бури +**Что даёт**: тонкий inline-виджет («Закат 20:47 · полная луна 🌕 · магнит. спокойно»). +**От тебя**: ничего (открытые API). +**Что нужно мне**: SunCalc + API Tesis/Spaceweather. +**Сложность**: S · **Статус**: 🟢 + +### 39. Качество воздуха снаружи +**Что даёт**: сравнение PM2.5 внутри (из очистителя) vs на улице. Если снаружи хуже — «закрой окна». +**От тебя**: ничего. +**Что нужно мне**: OpenAQ / AirPollution API (бесплатно), виджет. +**Сложность**: S · **Статус**: 🟢 + +### 40. Пробки / яндекс-карта +**Что даёт**: embed карты с пробками. Или собственный виджет «трафик СПб 5/10». +**От тебя**: Yandex Maps API ключ (бесплатный при низком трафике). +**Что нужно мне**: iframe или канвас. +**Сложность**: S · **Статус**: 🟡 + +### 41. Интерактивный план квартиры (SVG floor plan) +**Что даёт**: схема квартиры с клик-устройствами прямо на плане комнат. +**От тебя**: план квартиры (нарисовать в Figma / SVG). +**Что нужно мне**: SVG редактор-viewer, маппинг точек на devices. +**Сложность**: L · **Статус**: 🟡 + +### 42. Такси / eда (deep links) +**Что даёт**: кнопка «Такси до работы» открывает Yandex.Taxi deep-link с заданным адресом. +**От тебя**: ничего (deep links не требуют API). +**Что нужно мне**: просто ``. +**Сложность**: S · **Статус**: 🟢 + +### 43. Автотема по времени суток +**Что даёт**: утром — светлая тема, вечером — тёмная. С опцией «следовать за закатом» (по локации). +**От тебя**: ничего. +**Что нужно мне**: cron-подобный useEffect, чекбокс в Settings. +**Сложность**: S · **Статус**: 🟢 + +### 44. Backup / Export заметок +**Что даёт**: раз в день JSON-дамп всех данных в `/data/backups/`. Кнопка «Экспорт всё» в Settings. +**От тебя**: ничего. +**Что нужно мне**: cron внутри приложения (setInterval), clean-up старых бэкапов. +**Сложность**: S · **Статус**: 🟢 + +### 45. Error boundary + Sentry +**Что даёт**: вместо белого экрана при краше — friendly fallback + автоматический репорт. +**От тебя**: Sentry free tier (5k events/month). +**Что нужно мне**: `@sentry/nextjs`, error boundary. +**Сложность**: S · **Статус**: 🟡 + +### 46. Relationship / surprise layer +**Что даёт**: скрытая секция, которую видно только с PIN Даниила: годовщина («92 дня с тобой», «цветы Свете в следующую пятницу»), напоминания про подарки, history ссылок что ей понравилось в соцсетях. Маленькая, но эмоционально очень сильная фича. +**От тебя**: ничего, но сформулировать что именно хочешь напоминать. +**Что нужно мне**: + - Отдельный namespace в storage (encrypted или просто гейт по PIN) + - Countdown-миксин с существующим виджетом + - Настройки «закрытых» напоминалок +**Сложность**: M · **Статус**: 🟢 · **Зависимость**: #36 (multi-user) + +### 47. NFC / QR физические триггеры +**Что даёт**: метка на прикроватной тумбочке → тапнул телефоном → планшет переключается в «ночной режим» + HA гасит свет. Метка в прихожей → «ухожу» сценарий. Физическое ощущение управления домом. +**От тебя**: + - NFC-метки (NTAG213 ~50₽/шт, 10 штук на Ozon ~500₽) + - Настройка Shortcuts на iOS / NFC Tools на Android — тап открывает URL типа `https://tablet.digital-home.site/trigger/night` +**Что нужно мне**: `/trigger/{name}` route, выполняющий preset HA-сцену. +**Сложность**: S (код) + S (настройка меток) · **Статус**: 🟡 + +### 48. Health endpoint и мониторинг самого дашборда +**Что даёт**: `/api/health` для Uptime Kuma (уже развёрнут у тебя), алерт если tablet.digital-home.site лежит дольше 5 минут. +**От тебя**: добавить target в свой Uptime Kuma (это меньше минуты). +**Что нужно мне**: `/api/health` endpoint отдающий `{ok: true, uptime, version}`. +**Сложность**: S · **Статус**: 🟢 + +### 49. Feature flags / widget enable toggles +**Что даёт**: в Settings «включить/выключить виджет X» без редеплоя. Когда виджетов 15+, одни будут нужны Свете, другие Даниилу. +**От тебя**: ничего. +**Что нужно мне**: конфиг в `/data/tablet-config.json` + conditional rendering. +**Сложность**: S · **Статус**: 🟢 + +### 50. Internationalization (RU / EN toggle) +**Что даёт**: для гостей (если придут иностранцы) или если Даниил хочет «поработать на английском». +**От тебя**: ничего. +**Что нужно мне**: i18n ключи, переключалка в Settings. Большое количество строк — нетривиально. +**Сложность**: L · **Статус**: 🟢 + +--- + +## Что я бы делал следующим (если бы решал сам) + +1. **Своя экосистема** (A–H) — хотя бы 2-3 виджета (habits streak, pulse balance, homelab health). Это то, что делает дашборд **твоим**, а не «ещё один погодный виджет». +2. **PWA + Fully Kiosk** (идея #1) — фундамент для «это выглядит как appliance» +3. **WebSockets HA** (идея #2) — больше всего wow за трудозатрат, особенно если потом добавишь реальные устройства +4. **Утренний режим** (идея #4) — сразу новая модальность дашборда +5. **Telegram shopping bot** (идея #5) — замыкает Свету в семейный сценарий +6. **Cooking mode** (7b) — специфичный ритуал, сильно меняет восприятие +7. **Выбор остановок из UI** (идея #6) — убирает хардкод, делает виджет конфигурируемым + +--- + +## Что нужно от Даниила в порядке подготовки + +| Подготовка | Зачем | Срочность | +|---|---|---| +| Установить Home Assistant Companion на телефон | геолокация, motion-wake, quick controls | высокая | +| Создать Telegram-бота (`@BotFather`) | shopping list bridge, notifications | средняя | +| Anthropic API key | рецепты, GPT-based фичи | средняя | +| План квартиры в SVG | интерактивный floor plan | низкая | +| Купить лицензию FKB €7 | снять watermark, remote admin | низкая | +| Купить IR-бластер (Broadlink RM4) | управление TV/AC с планшета | низкая | +| Добавить Я.Станцию в HA | виджет Я.Станции на home | средняя | +| Завести Sentry-проект | error monitoring | низкая | +| Завести OpenRouteService API key | walking times | средняя | +| Завести Spotify Developer App | media control | низкая | + +Срочность = субъективная оценка пользы в ежедневном использовании. + +--- + +## Что стоит обсудить прежде чем делать + +- **Приватность геолокации Светы** — она согласна? +- **Анонимность vs удобство** — храним ли историю команд, логи Telegram-сообщений? Компромисс: хранить 7 дней. +- **Hard-коды vs конфиг** — каждая новая фича = либо в `/data/tablet-config.json`, либо UI в Settings. UI в Settings — дольше, но красиво. +- **Одна вкладка или много виджетов?** — текущий подход bento на Home ограничен по высоте. Когда добавим 5+ виджетов, нужна ли отдельная «widget board»? +- **Общая семейная БД или per-user?** — сейчас всё shared. Multi-user ломает storage API, но может быть нужен. + +--- + +--- + +## ✅ Что уже сделано (по состоянию на 23.04.2026) + +Вычёркиваем из будущего — не путаемся. + +- [x] **Базовая bento-сетка Home** (редизайн 23.04) +- [x] **Семантические CSS-токены** (`--surface-1/2/3`, `--border-subtle`, etc.) — тёмная и светлая темы перестали ломаться +- [x] **TopBar с приветствием в центре** (3-col grid: часы · приветствие · сенсоры+HA) +- [x] **Виджет трамваев ОРГП СПб** — 23/27/39 × 2 направления, живые прибытия каждые 30с +- [x] **Заметки с датой** (`pinDate`) + swipe-to-delete +- [x] **Forecast swipe** между днями в модалке погоды + dot-indicator +- [x] **Night-shift tint** (22:00–06:00 — тёплый оранжевый оверлей) +- [x] **Календарь** — CRUD, два владельца (Даниил + Света), фильтры, редактирование inline +- [x] **Screensaver** — 2 минуты idle → часы+погода +- [x] **PIN-авторизация** с HMAC cookie на 1 год +- [x] **Volume-mount `/data`** — заметки и PIN переживают редеплой +- [x] **Календарь — Moscow TZ fix** — сегодняшние события теперь показываются сразу в 00:00 МСК +- [x] **All-day events fix** — end.date = next day + clear opposite field +- [x] **Tab transitions** — mode=sync, без чёрного моргания +- [x] **Анимированная погода SVG** + ambient orbs меняющие цвет от погоды +- [x] **7-дневный прогноз с daily details** (feels-like, осадки, ветер, влажность на день) +- [x] **Device animations** — fan-spin, light-pulse, device-breathe + +--- + +## 📊 Value × Effort матрица (для быстрого сканирования) + +«Value» — субъективный glance-эффект в ежедневном использовании (1-5). +«Effort» — время на реализацию (1-5, где 5 = L сложность). + +Правый-верхний угол = делать в первую очередь. Левый-нижний = не делать совсем. + +| Идея | Value | Effort | Value/Effort | +|---|:-:|:-:|:-:| +| (A) Habits streak widget | 5 | 1 | **5.0** ⭐ | +| (D) Pulse balance | 5 | 1 | **5.0** ⭐ | +| 4. Утренний режим | 5 | 2 | **2.5** | +| 7b. Cooking mode | 4 | 2 | **2.0** | +| 17. Bill tracker | 4 | 1 | **4.0** ⭐ | +| 15. Countdown (Токио) | 4 | 1 | **4.0** ⭐ | +| 2. WebSockets HA | 4 | 3 | 1.3 | +| 5. Telegram shopping bot | 5 | 3 | 1.7 | +| 1. PWA + FKB | 5 | 2 | **2.5** | +| 8. Walking-time | 5 | 1 | **5.0** ⭐ | +| 6. Выбор остановок из UI | 3 | 3 | 1.0 | +| 3. Яндекс.Станция | 4 | 3 | 1.3 | +| 7. Контекстные подсказки | 5 | 3 | 1.7 | +| 13. Таймеры | 4 | 1 | **4.0** ⭐ | +| 19. Photo frame | 3 | 3 | 1.0 | +| 29a. Wake word | 5 | 5 | 1.0 | +| 10. Рецепты AI | 3 | 2 | 1.5 | +| 25. Робот-пылесос | 2 | 1 | 2.0 (только при наличии) | +| 35. Voice assistant | 4 | 5 | 0.8 | +| 41. Floor plan | 2 | 5 | 0.4 | + +⭐ — «немедленные победы» (V/E ≥ 4). Эти делаем **первыми**, независимо от уровня. + +--- + +## 🔗 Граф зависимостей + +Что блокирует что. Узлы слева — фундамент, справа — надстройки. + +``` +Свой API экосистемы (habits, pulse, langlearn) + ↓ +1. PWA + FKB ─────────────────┐ + ↓ │ +4. Утренний режим ←── 8. Walking-time + │ +2. WebSockets HA ─────────────┼──→ 3. Я.Станция виджет + ↓ │ +7. Контекстные подсказки ←────┤ + │ +11. Геолокация ───────────────┤ + │ +5. Telegram bot ──────────────┼──→ 18. Telegram bridge (ответы) + ↓ │ +Shared lists/notes ←──────────┘ + +36. Multi-user ───→ 46. Relationship layer (private) + +29a. Wake word ───→ 13. Таймеры (voice-activated) + └──→ 35. Voice assistant (full) + +17. Feature flags ───→ 21-28. Все conditional виджеты +``` + +**Вывод**: PWA/FKB и WebSockets — узкие места. Без них половина фич Level 2-3 бессмысленна. + +--- + +## 🤔 Build vs Buy — что можно не писать самому + +Прежде чем писать фичу, проверить: нет ли готового? + +| Фича | Готовое решение | Стоит ли писать своё? | +|---|---|---| +| HA dashboard (кнопки устройств) | [HA Lovelace](https://www.home-assistant.io/dashboards/), [Bubble Card](https://github.com/Clooos/Bubble-Card), [Mushroom Cards](https://github.com/piitaya/lovelace-mushroom) | ❌ Не стоит — Bubble/Mushroom лучше нашего Devices tab, и они уже встроены в HA | +| Погода + календарь dashboard | [MagicMirror²](https://magicmirror.builders/) | ⚠️ Можно, но MM² для зеркал, не для планшетов; наш UX лучше | +| Kiosk mode | **Fully Kiosk Browser** | ✅ Покупаем, не пишем | +| Telegram bot для shopping | [Grocy](https://grocy.info/) + их Telegram интеграция | ⚠️ Grocy огромен для нашей задачи, проще свой бот | +| Recipe recognition | Существующие приложения типа Yummly | ❌ Но свой через Claude API = контролируемо | +| Voice assistant | **Home Assistant Voice Preview Edition** (железка от HA за ~$60) или [Rhasspy](https://rhasspy.readthedocs.io/) | ⚠️ HA Voice — зрелое решение, стоит попробовать вместо своего | +| Password manager на планшете | **Vaultwarden** (уже установлен в `/opt/digital-home/vault/`) | ✅ Использовать готовое, добавить autofill | +| Photo frame | Android стандартный Daydream + Google Photos / Simple Gallery | ⚠️ Стандартный Daydream не персонализирован под наш проект, но можно использовать как fallback | +| Bill tracker | [Firefly III](https://www.firefly-iii.org/) | ⚠️ Ogromen для одной фичи, проще свой | +| News reader | [Miniflux](https://miniflux.app/) + iframe | ✅ Можно положить iframe на отдельную вкладку | + +**Правило**: если готовое закрывает 80% задачи — использовать его и встроить через iframe/API. Писать своё имеет смысл только если нужна тесная интеграция с другими виджетами (например, погода влияет на контекстную подсказку про зонт → это нельзя в iframe с MagicMirror). + +--- + +## 🚫 Что отвергнуто (чтобы не возвращаться) + +Идеи, которые обсудили и решили **не делать**: + +- **Интерактивный план квартиры** (#41) — слишком много ручной работы по SVG, использовать будем раз в месяц. Лучше отдельная вкладка «Устройства по комнатам» с эмодзи. +- **Мини-игры для гостей** (#33) — гости предпочтут свой телефон. Не наш конкурентный домен. +- **Ежедневные ручные чек-боксы привычек** — через неделю забросишь. Habits-app делает это правильно через дофамин-цикл, дашборд просто показывает оттуда. +- **Множественные квартирные планшеты (кухня + коридор + спальня)** — не сейчас. Один планшет, если реально нужно — покупаем ещё, но дашборд один. +- **Реклама / внешние push** — never. + +--- + +## 🗓️ Рекомендуемая последовательность на ближайший месяц + +### Неделя 1 (пока планшет в пути) +- Создать Telegram-бота (@BotFather) → token в `tablet.env` +- Install HA Companion на свой телефон → настроить device_tracker + zone «Дом» +- Согласовать с Светой геолокацию (она тоже ставит Companion) +- Собрать список counting events (ДР, Токио, годовщина) +- Узнать координаты дома + walking-time до остановок через Google Maps + +### Неделя 2 (планшет приехал) +- **Сессия 1**: PWA manifest + FKB развёртывание на планшете +- **Сессия 2**: Habits + Pulse виджеты (экосистема A + D) — самый быстрый wow +- **Сессия 3**: Утренний режим + Countdown виджет + +### Неделя 3 +- **Сессия 4**: Telegram shopping bot +- **Сессия 5**: Walking-time интеграция в утренний режим +- **Сессия 6**: WebSockets HA (инфраструктура для сезона 3) + +### Неделя 4 +- **Сессия 7**: Cooking mode с Wake Lock API +- **Сессия 8**: Bill tracker + Countdown для счетов +- **Сессия 9**: Контекстные подсказки (базовые без геолокации Светы) +- **Неделя живём** — собираем обратную связь, что мозолит глаз + +После — оцениваем, хочется ли Сезон 3 (Яндекс.Станция, rules-engine, notification overlays) или переключиться на релакс-фичи (photo frame, moon phase, countdown polish). + +--- + +*Создано Cosmo, 2026-04-23. Обновлено 2026-04-23 (+ своя экосистема, +5 пропущенных идей, +value/effort матрица, +граф зависимостей, +build-vs-buy, +отвергнутые идеи, +список уже сделанного). См. `smart-home-tablet.md` (reference), `smart-home-tablet-fkb-setup.md` (kiosk), `smart-home-tablet-vision.md` (стратегия).*