Files
cats/plan_modernization.md
heagbokat 94fff09a41 feat: infinite scroll, HEIC support, likes fix, security & backup
- Fix liked hearts not showing after page reload (sync useEffect in CatCard)
- Replace pagination with infinite scroll (useInfiniteQuery + IntersectionObserver)
- Add HEIC/HEIF/AVIF image support with sharp conversion to JPEG on upload
- Validate MIME type alongside file extension to prevent spoofing
- Limit caption to 500 chars; increase upload size limit to 20MB
- Delete physical file from uploads/ when post is removed (cats + admin routes)
- Add WAL journal mode and graceful shutdown (SIGTERM/SIGINT) to db
- Add rate limiter for upload endpoint (10 req / 15 min)
- Add pre-deploy backup of data.db and uploads/ to deploy.sh (keeps last 10)
- Add plan_modernization.md with ideas for future improvements

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 00:18:46 +03:00

101 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Котограм — план модернизации
Идеи для последующих доработок, сгруппированные по направлениям.
---
## Функционал
### Социальное взаимодействие
- **Подписки на пользователей** — лента только из постов тех, на кого подписан; отдельная вкладка «Все».
- **Реакции вместо лайков** — несколько эмодзи (❤️ 😂 😮 😢 🔥), каждый даёт разное кол-во очков.
- **Репосты / поделиться** — пользователь может поделиться ссылкой на пост или репостнуть к себе в профиль.
- **Упоминания @username** в комментариях с уведомлением (push или in-app badge).
- **Теги #хэштеги** на фотографиях и фильтрация ленты по тегу.
### Контент
- **Сторис (истории)** — публикация на 24 часа, круговые аватарки с индикатором непросмотренной истории.
- **Карусель фотографий** — несколько фото в одном посте (swipe).
- **Видео поддержка** — короткие видео до 30 сек (mp4, mov), хранение в `uploads/`.
- **Черновики** — сохранить пост не публикуя.
- **Редактирование подписи** к своему посту.
### Профиль
- **Bio / описание** — поле до 150 символов в профиле.
- **Верификация** — значок ✓ для доверенных аккаунтов, назначается администратором.
- **Статистика профиля** — охват, просмотры за 7/30 дней.
- **Закреплённые посты** — возможность закрепить 1 пост вверху профиля.
### Поиск и открытие
- **Страница «Обзор»** — сетка популярных постов (по лайкам за 7 дней) как на вкладке «Explore» в Instagram.
- **Поиск пользователей** по username.
- **Лента трендов** — ТОП-10 котов недели в sidebar.
### Уведомления
- **In-app уведомления** — новый лайк, комментарий, подписчик (real-time через WebSocket или polling).
- **Push-уведомления** (PWA) — с разрешения пользователя.
---
## Интерфейс и UX
### Навигация
- **Мобильный bottom navigation bar** — иконки Лента / Поиск / Загрузить / Уведомления / Профиль.
- **Жест swipe** между постами на мобильном (как в Instagram Stories).
- **Keyboard shortcuts** для десктопа: `L` — лайк, `Esc` — закрыть модал, стрелки — следующий/предыдущий пост.
### Карточка поста
- **Двойной тап — лайк** (как в Instagram), с анимацией большого сердца поверх фото.
- **Lazy loading** с blur placeholder пока грузится изображение.
- **Zoom** по клику/пинчу на фото.
### Профиль
- **Grid-режим** фотографий (3 колонки) как в Instagram по умолчанию, переключатель на список.
- **Анимированный аватар** — возможность загрузить gif.
### Тёмная / светлая тема
- Тема уже есть. Добавить **«Авто» по системной теме** (уже `prefers-color-scheme`, но сделать переключатель 3-позиционный).
### Доступность
- Описания (`alt` тексты) генерировать через API Claude Vision как подсказку при загрузке.
- Навигация с клавиатуры для всех интерактивных элементов.
---
## Производительность
- **CDN для изображений** — вынести `uploads/` на Cloudflare R2 / S3, раздавать через CDN.
- **WebP конвертация** — уже есть sharp; конвертировать в WebP вместо JPEG (меньше размер при том же качестве), отдавать JPEG как fallback.
- **Мигрировать с sql.js на better-sqlite3** — нативный SQLite, не держит весь файл БД в RAM, в 10-20x быстрее на записи.
- **Redis кэш** для топа пользователей и трендовых постов (sidebar), TTL 5 минут.
- **Виртуальный список** (react-virtual / @tanstack/virtual) в ленте при 100+ постов — не рендерить вне viewport.
---
## Безопасность (дополнительно)
- **2FA / TOTP** — опционально для аккаунтов.
- **Чёрный список слов** в комментариях (модерация).
- **Жалоба на пост** — кнопка «Пожаловаться», уведомление администратору.
- **Автоматическое удаление сессий** — логаут всех активных сессий при смене пароля.
- **Сканирование загружаемых файлов** на вирусы через ClamAV (опционально).
---
## Инфраструктура
- **Docker** — `docker-compose.yml` для локальной разработки и VPS деплоя.
- **GitHub Actions CI** — автоматический билд и тест при push.
- **Автоматические бэкапы БД** — cron на сервере каждые 6 часов копирует `data.db` в `/backups/`.
- **Health-check endpoint** уже есть (`/api/health`). Подключить к uptime-мониторингу (UptimeRobot / Betterstack).
- **Логирование** — структурированные JSON-логи через `pino` или `winston` вместо `console.log`.
---
## Геймификация и монетизация
- **Рейтинговые лиги** — Bronze / Silver / Gold / Diamond по кол-ву очков.
- **Достижения** — «Первый кот», «100 лайков», «Месяц на сайте» и т.д. с иконками-бейджами в профиле.
- **Ежедневные задания** — «Поставь 5 лайков сегодня» за бонусные очки.
- **Донаты / супер-лайки** — платный лайк с особым отображением (опционально через Stripe/YooKassa).