OpenTrailPaper
Open-source bike computer firmware for the LilyGO T5S3 4.7" E-Paper PRO, with offline maps, GPX routes, FIT recording and Bluetooth sensors.
일요일 농구 참석 투표 · 팀 나누기 · 기록
Translation pending
Sports & fitnessPython · HTMLGitHub @sangjoon88OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗참석 투표 → 자동 팀 나누기 → 경기 결과 입력 → 레이팅 갱신을 하나의 모바일 웹으로 제공한다. 명세: basketball-club-app-spec.md
python -m venv .venv
.venv/Scripts/pip install -r requirements-dev.txt # macOS/Linux: .venv/bin/pip
cp .env.example .env # DATABASE_URL 비우면 sqlite:///./local.db
alembic upgrade head # Windows는 PYTHONUTF8=1 권장
python scripts/seed_members.py --demo # 데모: 운영진 김민수 / PIN 1234
uvicorn app.main:app --reload
.env에 SETUP_TOKEN 설정 → http://localhost:8000/setup?token=...pytestmain(운영) / dev(개발) 브랜치. -pooler 호스트 연결 문자열 사용DATABASE_URL=<main pooled url> alembic upgrade headDATABASE_URL, SECRET_KEY(openssl rand -hex 32), SETUP_TOKEN, SEASONhttps://<도메인>/setup?token=<SETUP_TOKEN> 에서 첫 운영진 생성 (이후 /setup은 404)/admin/members/import 멤버 붙여넣기 → 운영진 지정 → /admin/rating-setup 초기 등급 → 첫 모임 생성kb-sonics, 리전 sin1 = Neon ap-southeast-1 과 같은 싱가포르)main 에 push 하면 Vercel 이 자동 배포DATABASE_URL=<운영 pooled url> alembic upgrade head 먼저 실행 후 pushTEST_DATABASE_URL=<테스트 전용 DB url> pytest (테스트마다 테이블을 지우므로 운영 DB 금지)api/index.py Vercel 진입점
app/config.py 환경변수 + 가중치/기준값 (명세 13장)
app/db.py NullPool 엔진 (서버리스)
app/models.py 데이터 모델 (명세 6장)
app/auth.py 멤버 쿠키 / 운영진 개인 PIN (bcrypt, 5회 실패 10분 잠금)
app/routers/pages.py 멤버 화면: 홈, 투표, 오늘 경기, 기록, 내 기록, /setup
app/routers/admin.py 운영진 화면: 모임, 출석, 팀 짜기, 점수, 게임2 선택, 멤버, 초기 등급, 레이팅, 설정, 작업 기록
app/routers/api.py JSON API (명세 11장, /api/docs)
app/services/balancer.py 전수 탐색 밸런싱 (순수 함수)
app/services/lopsided.py 게임1 일방성 판정
app/services/rating.py openskill 래퍼 + recalculate_from
app/services/stats.py 출석/승률/연승 집계
app/services/ops.py 화면·API 공용 업무 로직
candidates(다시 섞기 후보 5개), candidate_idx, lopsided(판정 결과 — 실제 선택은 game2의 lineup_mode).pin_must_change (임시 PIN 첫 로그인 시 변경 강제), is_owner (관리자)./setup으로 만든 계정이 관리자. 운영진 지정·해제와 PIN 재설정은 관리자만 가능. 그 외 운영 기능은 운영진과 동일.1234(DEFAULT_PIN)로 시작하고, 첫 로그인 때 PIN 변경(1234 재사용 불가) → 내 정보(주/부 포지션·키·몸무게) 확인을 거쳐야 다른 화면 사용 가능. 운영진은 일반 멤버 PIN을 1234로 초기화 가능(운영진 PIN 초기화는 관리자만). 운영진·관리자는 같은 PIN으로 운영진 로그인까지 한 번에 처리. Member.admin_pin_hash → pin_hash 로 변경.position(주, 밸런싱 기준) / position2(부, 선택) / weight_kg(선택, 본인·운영진만 열람, 공개 API 미포함). 일괄 등록은 G/F 형식 지원.member_id와 같을 때만 허용./admin/ratings, 팀 짜기 화면의 "왜 이렇게 나눴나"(운영진 전용)에서만 노출.Attendance.leave_time, "HH:MM") 필수이며 참석 인원에 포함. 출석 체크·팀 짜기·오늘 경기 화면에 ⏰시간 표시.Member.is_guest=True, is_active=False 로 저장되어 이름 선택·멤버 관리·기록에서 제외되고, 실력(1~5, 기본 3)으로 밸런싱에 참여. 같은 이름으로 다시 오면 기록을 이어 쓰고, 운영진이 같은 이름으로 멤버를 추가하면 정식 멤버로 전환.Attendance.proxy_by). 본인이 직접 투표하면 대리 표시 해제. API PUT /api/sessions/{id}/vote 도 운영진이면 대리 처리.