NBA Feed
팀 뉴스와 경기 정보를 제공, 점수는 직접 확인할 때까지 숨겨져 있습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Приложение для персонального тренера и его клиентов
Расписание, абонементы, тренировки, питание и прогресс в одном месте: в браузере и прямо в Telegram.
Русский · English
Открыть DaFit · Бот @fitconnection_bot
Тренер обычно держит клиентов в тетрадке, таблице и переписках: кто когда придёт, кто сколько должен, у кого какой прогресс. DaFit собирает всё это в одно приложение, которым пользуются и тренер, и его клиенты.
Тренер ведёт своих клиентов в DaFit, а клиент видит свои занятия, абонементы и прогресс и сам решает, какие свои данные открыть тренеру. Один человек может быть и тренером, и клиентом: в приложении две зоны, «Тренер» и «Клиент», между ними можно переключаться. Вход только через Telegram.
Сейчас DaFit готовится к закрытой бете, которая стартует 24.11.2026. Название рабочее, репозиторий называется fit.
Для тренера
Для клиента
Приватность
| Часть | Технологии |
|---|---|
Веб и Telegram Mini App (apps/web) | Next.js 16, React 19, Tailwind CSS v4, shadcn/ui, motion |
Бот (apps/bot) | Python 3.13, aiogram 3, работает через вебхук |
| База и вход | Supabase: Postgres с RLS, миграции и тесты pgTAP; вход через Telegram |
| Хостинг | Vercel (веб и бот), уведомления уходят из очереди в базе по pg_cron |
Подробнее о стеке: ADR 0003.
apps/web/ веб-приложение и Telegram Mini App (Next.js)
apps/bot/ Telegram-бот (aiogram)
supabase/ SQL-миграции и pgTAP-тесты
docs/ решения, PRD, архитектура, дизайн, ADR
scripts/ служебные скрипты для CI и разработки
Нужен Docker и свой тестовый бот. Создай его в @BotFather (/newbot) и впиши токен в .env.local, он нужен и вебу, и боту. Боевой @fitconnection_bot локально не подойдёт: контейнер бота не запустится с ним, как и с любым ботом, у которого настроен вебхук (ADR 0002 §5). Если у тестового бота остался вебхук, например после запуска docker-compose.prod.yml, открой в браузере https://api.telegram.org/bot<токен тестового бота>/deleteWebhook или заведи другого бота.
cp .env.example .env.local и заполни пустые значения (подсказки есть в комментариях файла).docker compose up --build: веб откроется на http://localhost:3000, бот запустится в режиме polling.Telegram открывает Mini App только по публичному HTTPS-адресу:
docker compose --profile tunnel up и скопируй адрес https://….trycloudflare.com из логов tunnel..env.local впиши этот адрес в NEXT_PUBLIC_APP_URL и WEBAPP_URL и перезапусти docker compose up./start своему тестовому боту и нажми Открыть DaFit (Open DaFit, если Telegram на английском).В @BotFather → твой бот → Login Widget добавь адрес сайта и <адрес>/auth/telegram/callback в Allowed URLs, а показанные Client ID и Client Secret впиши в .env.local.
cd apps/web && npm run lint && npm run typecheck && npm test && npm run build
cd apps/web && npm run e2e # после build: Playwright и axe, телефон и десктоп, обе темы
cd apps/bot && uv run ruff check . && uv run ruff format --check . && uv run pytest
CI запускает то же самое, а ещё проверки базы, поиск секретов gitleaks и сборку Docker-образов.
Схема лежит в supabase/migrations/, тесты к ней в supabase/tests/ (pgTAP: RLS, права на столбцы, триггеры, ограничения). Нужны Docker и Supabase CLI 2.121.0, та же версия, что в CI. Команды запускаются из корня репозитория:
supabase db start # локальный Postgres 17, все миграции с нуля
supabase test db # все pgTAP-тесты
supabase db lint --local --schema public,private --fail-on error # plpgsql_check
supabase db advisors --local --type all --fail-on warn # советы по безопасности и скорости
supabase gen types typescript --local > apps/web/src/lib/supabase/database.types.ts
supabase stop # когда закончил
После новой или изменённой миграции supabase db reset пересобирает базу из всех миграций. Перегенерированный database.types.ts коммить как есть, без форматирования: CI падает, если файл расходится со схемой.
В рабочий проект Supabase миграции попадают только через main: когда push в main меняет supabase/migrations/, workflow Database deploy выполняет supabase db push и проверки советника. Строку подключения он берёт из секрета SUPABASE_DB_URL в окружении supabase-fit. Ночные зашифрованные копии базы делает отдельный закрытый репозиторий fit-backups: он по расписанию вызывает отсюда workflow db-backup.yml. Рабочую схему руками не правим.
Веб и бот работают на Vercel и выкатываются в продакшен только из main. Как устроены окружения, как настроить бота с нуля и как менять секреты, описано в docs/deployment.md (на английском).