✅ Реализованные решения
🗄️ Структура БД
- Переход на id как PRIMARY KEY — вместо news_index, упрощение связей
- Удаление полей rubrics, image_url, cached — данные перенесены в raw_data или news_media
- Удаление полей source_type, external_id — теперь хранятся в raw_data
- Удаление полей details, punches — больше не используются
- Удаление поля publish_at — используется только date
- Перенос image_id в raw_data — Google Drive ID хранится в JSON
- Добавление поля description — тизер для ленты + meta-description
- Создание таблиц podcast_queue, podcast_episodes — для управления подкастом
- Создание таблицы podcast_groups — для AI-группировки новостей по темам
🤖 AI и обогащение
- AI вызывается напрямую из PHP — OpenRouter подключён без внешнего workflow-посредника
- Хранение предложений AI в ai_log — важность, рубрики, теги отдельно от финальных
- API-ключи через CRON_SECRET_KEY — единая константа в config.php
- AI-группировка новостей — автоматическое объединение по темам для подкаста
📷 Медиа
- Поддержка типов медиа — image, video, youtube, vimeo
- Создание превьюшек — для изображений 200x200px
- Кэширование изображений Google Drive — через image-manager.php
🎙️ Подкаст
- Создание таблицы podcast_queue — для хранения очереди выпусков
- Раздел "Очередь подкаста" в админке —
/manager/podcast-queue.php
- Добавление новостей в очередь — из списка опубликованных новостей
- Удаление новостей из очереди — кнопка удаления для каждого выпуска
- Сортировка очереди — drag-and-drop для установки порядка выпусков
- Статусы выпусков — ожидает / в записи / в монтаже / выпущен
- Фильтр "Готово к эфиру" — importance ≥ 7, status = published
- Кнопка "В эфир" — быстрое добавление в очередь подкаста
🖥️ Админка
- Отображение description в форме редактирования — поле добавлено в news_edit.php
- Просмотр ai_log в админке — вкладка на странице новости
- Вынос секретных ключей в .env — защита чувствительных данных
📋 Управление задачами
- Канбан-доска в документации — страница
/docs/pages/tasks.php с drag&drop, редактированием и статусами
- Markdown-описания задач — поддержка форматирования, переключение режимов просмотра/редактирования
- Хранение задач в JSON — файл
/docs/data/tasks.json, API для чтения/записи
- Группировка задач — по статусам (Идеи/Бэклог/В планах/В работе/Выполнено) и категориям (БД, AI, Подкаст, Админка, Фронтенд, API)
- Закрытие модального окна по Escape — удобство работы с задачами
📋 Запланированные решения
🎙️ Подкаст
- Публичная страница подкаста — отображение очереди выпусков с аудиоплеером
- RSS-лента подкаста — генерация с тегами iTunes и Podcast
- Загрузка аудиофайлов — привязка mp3 к выпуску в очереди
- Привязка podcast_episodes к podcast_queue — хранение аудиофайлов и длительности
🤖 AI
- AI-рекомендация порядка — оптимальная последовательность новостей в выпуске
- Шорткаты для ведущего — AI-генерация 2-3 ключевых фраз
- Периодическое обогащение важных новостей — cron-задача раз в 3 дня
🔒 Безопасность
- Добавление CSRF-токенов — во все формы админки
- Ограничение попыток входа — защита от брутфорса
- Добавление X-Frame-Options и CSP — защита от кликджекинга и XSS
📱 Фронтенд
- Open Graph и Twitter Card мета-теги — для улучшения шеринга в соцсетях
- Улучшенная обработка 404 ошибок — поиск похожих страниц
⚙️ Производительность
- Кэширование ленты новостей через Redis — снижение нагрузки на БД
- Автоматическая очистка кэша изображений — cron-задача раз в неделю
- Оптимизация индексов БД — для часто используемых полей
💡 Отложенные / обсуждаемые решения
- Интеграция с NewsAPI / RSS — альтернативные источники новостей
- Сворачивание ai_log в отдельную таблицу — если объём данных станет большим
- Кэширование с Redis — при росте нагрузки
- Канбан-доска как основной инструмент управления задачами — все выявленные проблемы и улучшения теперь фиксируются в канбане, а не в отдельных документах