heagbokat ae01ebdeea feat: clean navbar icons, floating theme bubble, auto theme on first visit
- Navbar: remove theme switcher, clean nav icons (no text labels),
  active state is accent dot underline + icon color — no pill bg
- useTheme: drop 'system' from stored type; first visit = auto
  by system preference, stays unset until user explicitly clicks
- ThemeBubble: fixed bottom-right pill with Sun/Moon icon + label,
  hover lift, click toggles light ↔ dark and persists to localStorage
- App.tsx: render ThemeBubble inside ThemeProvider

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 00:51:42 +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%