Персональный веб-дашборд, который собирает и структурирует информацию для начала дня.
Новости IT, игр, политики, актуальные курсы валют, криптовалюты, погода и агрегация с помощью ИИ — всё в одном месте, настраиваемое под себя.
MorningHub — это Flask-приложение с многопользовательской авторизацией и настраиваемой сеткой виджетов (на базе GridStack).
Каждый пользователь получает персональный дашборд: выбирает нужные виджеты, задаёт их размер и порядок, а также может экспортировать утреннюю сводку в один файл.

- 📰 IT-новости: Парсинг RSS-ленты Habr/OpenNET.
- 🎮 Игровые новости: Парсинг Playground.ru с автоматическим резервированием (fallback) на iXBT Games в случае ошибок.
- 🏛️ Политика: Актуальные заголовки Lenta.ru.
- 🤖 AI Модели: Новости из мира ИИ (Artificial Analysis).
- ✨ ИИ-Сводка: Генерация краткого пересказа новостей с использованием выбранной языковой модели (требуется API-ключ OpenAI/совместимых).
- 💱 Курсы валют: Данные с открытого API Центрального Банка.
- 🪙 Криптовалюты: Интеграция с CoinGecko с автоматическим резервированием (fallback) на Binance API при исчерпании лимитов.
- ⛅ Погода: Интеграция с Open-Meteo и автоматическим fallback на wttr.in при ошибках геокодирования или лимитах.
- ⏰ Часы: Аналоговые и цифровые часы.
- 📅 Календарь: Интерактивный календарь.
- 🔗 Закладки: Сохранение полезных ссылок.
- Свободное перемещение и изменение размера виджетов (Drag & Drop сетка).
- Выбор светлой или темной темы.
- Настройка цвета и прозрачности подложки виджетов.
- Загрузка фонового изображения для дашборда (с безопасным UUID-именованием).
- Выгрузка утреннего дайджеста в TXT или CSV через
GET /api/v1/export?format=<txt|csv>. - Безопасная генерация CSV.
- Полностью свободное расположение без сетки сетки
- Улучшение работы с задним фономм(возможность поставить gif, выбрать как обрезать фото)
- Более тонкая настройка всего
Таблица users
| Поле | Тип | Описание |
|---|---|---|
id |
int (PK) |
Первичный ключ |
usr_name |
str (Unique) |
Имя пользователя |
pass_hash |
str |
Хэш пароля |
back_img |
str | None |
Путь к фоновому изображению |
theme |
str |
Тема (light/dark) |
wid_cvet, wid_prozr |
str, float |
Настройки цвета виджетов |
| Остальные поля | Настройки ИИ, города и т.д. |
Таблица widget_configs
| Поле | Тип | Описание |
|---|---|---|
id |
int (PK) |
Первичный ключ |
usr_id |
int (FK) |
Связь с users.id |
w_tip |
str |
Тип виджета (напр. it_news) |
is_act |
bool |
Показывать ли виджет |
poz |
int |
Порядок отображения |
x, y, w, h |
int |
Координаты и размеры в GridStack |
| Метод | Эндпоинт | Описание |
|---|---|---|
GET |
/api/v1/widgets/it-news |
JSON с IT-новостями |
GET |
/api/v1/widgets/weather |
JSON с прогнозом погоды |
GET |
/api/v1/widgets/crypto |
JSON с курсами криптовалют |
PATCH |
/api/v1/widgets/save-grid |
Сохранение расположения сетки |
PATCH |
/api/v1/widgets/<w_tip>/toggle |
Переключение активности виджета |
GET |
/api/v1/export?format=<txt|csv> |
Экспорт утренней сводки |
-
Склонируйте репозиторий:
git clone https://github.com/Magmucot/MorningHub.git cd MorningHub -
Создайте виртуальное окружение и установите зависимости:
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt -
Создайте файл
.envв корне проекта (опционально):FLASK_ENV=development SECRET_KEY=my-super-secret-local-key DB_URL=sqlite:///db/morninghub_dev.db
-
Запустите приложение:
python run.py
Приложение будет доступно по адресу
http://127.0.0.1:5000.
Проект полностью оптимизирован для бесплатного тарифа Render.
- Подключите репозиторий к Render как Web Service.
- Укажите следующие настройки:
- Environment:
Python 3 - Build Command:
pip install -r requirements.txt - Start Command:
bash start.sh
- Environment:
- В разделе Environment Variables обязательно добавьте:
FLASK_ENV=productionSECRET_KEY=<сгенерируйте длинную случайную строку>(Обязательно! Иначе сессии не будут работать)WEB_CONCURRENCY=2(Для предотвращения ошибок нехватки памяти (OOM) на бесплатном тарифе, где доступно 512MB RAM).DB_URL=<ваша строка подключения к PostgreSQL>(Драйверpsycopg2-binaryуже включен в зависимости).
Скрипт start.sh автоматически инициализирует таблицы базы данных и запустит gunicorn на порту, который выдаст Render.