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
2026-05-29 10:23:25 +03:00
2026-05-29 10:23:25 +03:00
2026-05-29 10:23:25 +03:00

Котограм

Сайт для публикации фотографий котов. React + Vite (фронт), Express + TypeScript (бэк), SQLite.

Первый запуск на сервере

cd /var/www/cats

# 1. Установить зависимости и собрать фронт
npm install --prefix server
npm install --prefix client
npm run build

# 2. Создать файл переменных окружения
cp server/.env.example server/.env
# Отредактировать server/.env: задать JWT_SECRET и ALLOWED_ORIGIN
nano server/.env

# 3. Запустить через PM2
sudo pm2 start npm --name cats -- start

# 4. Зарегистрировать автостарт (один раз на машине)
sudo pm2 startup
# Скопировать и выполнить команду, которую выведет pm2 startup
sudo pm2 save

Переменные окружения (server/.env)

PORT=3040
JWT_SECRET=заменитеа_случайную_строку_32_символа
ALLOWED_ORIGIN=http://cats.heagbokat-server.ru

Сгенерировать JWT_SECRET:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Деплой обновлений

cd /var/www/cats
chmod +x deploy.sh  # только первый раз
./deploy.sh

Скрипт делает: git pull → сборка фронта → перезапуск PM2.

Управление PM2

sudo pm2 ps              # статус процессов
sudo pm2 logs cats       # логи сервера
sudo pm2 restart cats    # перезапустить
sudo pm2 stop cats       # остановить

Данные (не трогать!)

  • server/data.db — база данных (пользователи, лайки, коты)
  • server/uploads/ — загруженные изображения

Оба пути в .gitignoregit pull их не перезапишет.

Первый администратор

При первом запуске автоматически создаётся пользователь admin / admin123.
Обязательно смените пароль через интерфейс или напрямую в БД.

Description
No description provided
Readme 938 KiB
Languages
TypeScript 91.8%
CSS 6.8%
Shell 0.9%
HTML 0.5%