Vaka.pro 4ea8faf16f
Some checks failed
CI / build-and-test (pull_request) Has been cancelled
fix(frontend): auto-completed on finish time, dashboard links, list/calendar UX
- Set status to completed when finish time parses (input + submit)
- Dashboard: last personal record by recent date+time; links on top 3 cards
- Hover scale+shadow on all dashboard-card; linked card padding via BEM
- Race list: full row links to race detail; same hover as before
- Calendar year grid: 3 columns, 2 on tablet, 1 on narrow
- Version 0.4.1

Made-with: Cursor
2026-04-13 22:34:39 +03:00

Calendar Run

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

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

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

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

Backend — локально

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

Без 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

Фронт всегда отправляет запросы на относительный префикс **/api**. В dev это проксирует Vite на http://localhost:3001, в Docker/проде — nginx фронта проксирует на runners-calendar-backend:3000. У бэкенда CORS_ORIGIN должен совпадать с origin приложения (например http://localhost:5173).

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

Используйте [docker-compose.stack.yml](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 runners-calendar-backend node dist/migrate.js
docker compose -f docker-compose.stack.yml exec runners-calendar-backend node dist/seed.js

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

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

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