Anton 3b8f41f905
Some checks failed
CI / build-and-test (pull_request) Has been cancelled
fix: phase 1 bugs — CSS tokens, pluralization, error handling, cross-platform tests
- Add missing --space-1 CSS token used by filter and detail components

- Fix active nav link losing styles on hover (CSS specificity)

- Correct Russian day pluralization (21 день, 22 дня, 25 дней)

- Show filter error banner even when stale race data is present

- Add cross-env for Windows-compatible npm test

- Add global JSON error handler in Express for malformed request bodies

- Replace stateless mock DB with in-memory store for correct DELETE/UPDATE behavior

Made-with: Cursor
2026-04-07 17:46:46 +03:00

Calendar Run

Монорепозиторий: backend (Express + PostgreSQL) и frontend (React + Vite) — календарь забегов.

Переменные окружения

Один шаблон для локальной разработки и для Docker-стека: .env.example → скопируйте в .env в корне репозитория.

Там же перечислены DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD (подключение бэкенда к БД), PORT / API_PORT, опционально CALENDAR_RUN_MOCK_DB, CORS_ORIGIN, а для локального Vite — VITE_API_BASE_URL.

Backend — локально

  1. cd backend && npm install
  2. Корень: cp .env.example .env, задайте DB_* (и при необходимости CORS_ORIGIN).
  3. Postgres: из корня docker compose up -d (см. docker-compose.yml) — в compose используются те же DB_NAME, DB_USER, DB_PASSWORD из .env.
  4. cd backend && npm run db:migrate && npm run seed
  5. npm run build && npm run dev

Без PostgreSQL (только smoke API): в .env задайте CALENDAR_RUN_MOCK_DB=1; db:migrate и seed с mock не использовать.

Frontend — локально

cd frontend
cp .env.example .env
npm install
npm run dev

Значение VITE_API_BASE_URL см. в корневом .env.example; для dev по умолчанию http://localhost:3001. У бэкенда CORS_ORIGIN должен совпадать с origin приложения (например http://localhost:5173).

Docker: backend + frontend рядом с Postgres

Используйте docker-compose.stack.yml: общая внешняя сеть с контейнером Postgres (как в вашей инфраструктуре). В корне должен быть .env (из .env.example): DB_HOST — имя сервиса/контейнера Postgres в этой сети, DB_PORT=5432, плюс остальные DB_* и CORS_ORIGIN=http://localhost:3033, если заходите на фронт с хоста на порту 3033.

docker compose -f docker-compose.stack.yml up -d --build
docker compose -f docker-compose.stack.yml exec backend node dist/migrate.js
docker compose -f docker-compose.stack.yml exec backend node dist/seed.js

Фронт в браузере обращается к API по префиксу /api (nginx в образе фронта проксирует на backend).

Документация API и бэкенда

Description
No description provided
Readme 16 MiB
Languages
TypeScript 82.7%
CSS 17.1%
HTML 0.1%