RunCheck
Never show up to an empty gym again. RunCheck lets you see who's playing, where the run is, and when it tips off, before you leave the house.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Next.js 14 (App Router) + Prisma + Postgres (Neon). Интерфейс на четырёх языках: русский, украинский, польский, английский.
Адреса страниц начинаются с языка: /ru, /uk, /pl, /en (например, /pl/sections). Адрес без языка ведёт
на язык из настроек браузера (или на польский), выбор запоминается в cookie lang. Тексты интерфейса — в src/i18n
(ru.ts задаёт структуру, остальные языки повторяют её). Данные (названия матчей и занятий, адреса, цены) хранятся
на языке источника, обычно по-польски.
Локальный сайт и агент сбора работают с той же облачной базой, что и опубликованный сайт (адрес в .env).
npm install
npm run setup # создаёт базу prisma/dev.db и заливает демо-данные
npm run dev # http://localhost:3000
pending и не показываются на сайтеСтраница /admin (логин admin, пароль из переменной ADMIN_PASSWORD в .env): заявки из формы со статусом
pending, кнопки «Опубликовать» и «Отклонить». Без ADMIN_PASSWORD админка закрыта.
Инструкция: DEPLOY.md (Vercel + база Postgres на Neon).
Источники (официальные страницы расписаний клубов) описаны в ingest/sources.ts, площадки в ingest/venue-data.ts.
npm run venues:sync # добавить/обновить реальные площадки в таблице Venue
npm run ingest:fetch # проверить robots.txt и скачать тексты страниц в ingest/out/pages/
# выписать матчи в ingest/out/extracted/<id>.json по правилам ingest/EXTRACTION.md (можно попросить Claude в чате)
npm run ingest:city # городской каталог секций sport.um.warszawa.pl (≈40 минут в первый раз, дальше из кэша)
npm run ingest:dry # проверить выписанное и показать, что будет записано
npm run ingest # записать в базу (повторный запуск обновляет, а не дублирует)
npm run ingest:clear-demo # показать демо-данные из seed.ts
npm run ingest:clear-demo -- --yes # удалить их
Секции (регулярные занятия) хранятся в таблице Activity и показываются на странице «Секции» (/sections).
Городской каталог разбирается программой (ingest/city-catalog.ts): контакты не сохраняются, ссылка ведёт на страницу занятия.
Секции для пенсионеров на сайт не берутся (правило isSeniorOnly в ingest/activities.ts); ранее записанные скрыты статусом hidden.
Записываются только домашние матчи с объявленным временем. Каждый матч сверяется с текстом страницы по дословной цитате.
У события сохраняется ссылка на официальный источник (sourceUrl), она видна на странице события.
Берутся с Wikimedia Commons (олимпийские пиктограммы, в основном общественное достояние, несколько файлов CC BY / CC BY-SA)
скриптом npx tsx scripts/pictograms.ts: он проверяет лицензию каждого файла, кладёт пиктограммы в public/sports/,
делает из бегуна иконку сайта и записывает авторов в src/lib/pictograms.ts (они показаны на странице «Конфиденциальность и источники»).
prisma/schema.prisma: модель данных (Sport, Venue, Organizer, Event)prisma/seed.ts: демо-данные (вымышленные, координаты приблизительные)src/lib/dates.ts: работа со временем Варшавы (Europe/Warsaw)src/app: страницы; src/components: фильтры и строка событияpostgresql, указать DATABASE_URL)