BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Next.js (App Router) на Vercel, база — Supabase. Вход только через Steam. main → GitHub → Vercel автоматически. Локальный запуск не обязателен. Переменные окружения (Vercel → Project → Settings → Environment Variables) — см. .env.example. Миграции лежат в supabase/migrations/. Применяются по порядку (Supabase → SQL Editor, либо supabase db push).README 전문 보기 ↗
Next.js (App Router) на Vercel, база — Supabase. Вход только через Steam.
main → GitHub → Vercel автоматически. Локальный запуск не обязателен.
Переменные окружения (Vercel → Project → Settings → Environment Variables) — см. .env.example.
Миграции лежат в supabase/migrations/. Применяются по порядку через npm run db:migrate.
История этого проекта хранится в public._migrations; не смешивайте её с отдельной историей supabase db push.
Для применения задайте SUPABASE_PROJECT_REF и SUPABASE_ACCESS_TOKEN нужного проекта.
npm run db:check проверяет историю без изменения базы. Ключи приложение получает из настроек окружения.
src/app/ — маршруты (App Router). Публичная часть: /, /tournaments, /matches, /teams, /players, /stats, /rules, /about; личное: /me, /team, /notifications, /join; F16 Control — /admin/** (своя оболочка с левым меню).src/app/actions/ — серверные действия (формы). Бизнес-правила — только здесь и в src/lib/.src/app/api/agent/* — связь с F16 Server Agent: sync (состояние ⇄ команды), jobs (игровые таймеры и обслуживание отдельно от выдачи команд), bundle (самообновление агента); src/app/api/matchzy/* и src/app/api/cs2/* — события MatchZy и HTTP-логи CS2; src/app/api/auth/* — вход через Steam.src/lib/ — домен: турниры и форматы, сетки, вето, матчи, серверы и автопилот (server-control.ts), статистика и Swing, настройки, сессия, Steam.src/components/ — отображение: brand.tsx (логотип — только файлы из public/brand), ui.tsx (примитивы), public/ (главная и публичные страницы), competition/ (матч, вето, сервер), admin/ (F16 Control). Компоненты не обращаются к базе напрямую.server/agent/ — агент серверного ПК (Node без зависимостей), доезжает до ПК сам через /api/agent/bundle.supabase/migrations/ — схема базы по порядку.app/error.tsx, app/global-error.tsx, app/admin/error.tsx. SEO: robots.ts, sitemap.ts, opengraph-image.tsx, адрес сайта — src/lib/site.ts (NEXT_PUBLIC_SITE_URL).Порядок выкладки: npm run check → npm test → npm run build → npm run db:migrate → npm run db:check → push в main.
Сборка никогда не применяет миграции. Production-сборка Vercel только читает _migrations
и останавливается, если нужная миграция отсутствует. Preview и локальная сборка эту проверку пропускают.
Каждая миграция применяется вместе с записью истории в одной транзакции, повторный запуск безопасен.
Контрольные суммы защищают новые миграции от редактирования после применения; старые записи без суммы сохраняются.
npm test работает без рабочей базы и секретов: сетки, форматы, лобби, буфер агента,
заявки, счёт, доставка команд и миграции проверяются на временных данных.
SQL выполняется в PostgreSQL через PGlite. Эти проверки не моделируют несколько независимых подключений
и не заменяют проверку запуска реального CS2.
Эксплуатация, восстановление и ограничения: docs/operations.md.
src/lib/steam.ts — Steam OpenID 2.0 (проверка check_authentication) и профиль.src/lib/session.ts — своя сессия: подписанный JWT в httpOnly cookie.src/lib/supabase.ts — серверный клиент с service role. Все записи идут только через сервер,
RLS включён на всех таблицах, публично читаются только публичные данные.src/app/actions/* — серверные действия (команды, заявки, админка). Каждое ручное действие пишется в audit_logs.ADMIN_STEAM_IDS в env или флаг is_admin (выдаётся в админке).