ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
경쟁 프로그래밍 팀 추적기: Codeforces·AtCoder·Kilonova·CSES 등에서 누가 어떤 문제를 풀었는지 한 눈에 표시
Team tracker for competitive programming: one matrix of who solved what (live, virtual or upsolved) across Codeforces incl. gyms and team virtuals, AtCoder, Kilonova and CSES. FastAPI + SQLAlchemy, in
교육Python · HTMLGitHub @amcbn06온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Team tracker for competitive programming: one matrix of who solved what (live, virtual or upsolved) across Codeforces incl. gyms and team virtuals, AtCoder, Kilonova and CSES. FastAPI + SQLAlchemy, incremental submission store, one module per judge.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Squadforces
See what your whole competitive-programming team has solved — across Codeforces, AtCoder, Kilonova and CSES — and how: live, virtually, or upsolved.
One assignment, four members. A gym contest solved as a team (7/11 for each member), Codeforces rounds split into live ✓, virtual ✓ and upsolved ▲, rating changes, and an AtCoder round. Demo data.README 전문 보기 ↗Coaches and ICPC-style teams practise across several judges, and no single site shows the picture: who has solved this week's problems, who only did it after the editorial, who virtual-participated as a team. Squadforces watches the judges for you. You assign contests and problems, and it shows one matrix of members × problems with how each was solved.
It never runs code or hosts problems. It is an observer of Codeforces, AtCoder, Kilonova and CSES, so it works with the practice people already do on those sites.
graph LR
subgraph Judges
CF["Codeforces API"]
AC["AtCoder Problems + history"]
KN["Kilonova API"]
end
Store[("Submission store<br/>every submission, per user")]
Results["Results per item<br/>(what the matrix shows)"]
UI["Server-rendered UI<br/>FastAPI + Jinja2"]
CF -->|"only what's new"| Store
AC --> Store
KN --> Store
Store -->|"platform module<br/>derives results"| Results
Results --> UI
Store --> UI
A local copy of every submission. Judges are only asked for a user's submissions, once. They are mirrored into a table and afterwards refreshed incrementally: everything newer than the newest stored submission, plus anything still being judged. Every contest and problem status is then a database query, so adding the tenth assignment that mentions a contest costs no judge calls. A 15,000-submission history loads in seconds and refreshes in about one.
One module per judge. Everything specific to a judge (its links, how to fetch, how to display, how to derive results) lives in app/platforms/<judge>.py behind one Platform interface. Recognising where a link comes from is a single switch in app/problems.py. Supporting a new judge means one new file, one registry line and one if; templates never branch on the platform.
Correctness you can check. The live/virtual/upsolved logic is tested against the implementation it replaced: identical answers on thousands of random submission histories, and on real Codeforces contests compared against live API calls. The suite (150+ tests, standard-library unittest) never touches the network.
Careful with other people's servers. Codeforces requests are serialised and spaced 2.1 s apart, concurrent syncs of one user share a single refresh, and a failed judge call leaves stored data untouched and is reported on the item instead of showing false "not solved" cells.
Safe to deploy over live data. No migration framework needed for additive changes: new tables come from create_all, new columns from an idempotent ensure_columns(). The last deploy was rehearsed on a copy of the production database first.
git clone https://github.com/amcbn06/squadforces
cd squadforces
pip install -r requirements.txt
python scripts/demo.py
Open http://localhost:8000. Sign in as admin / demo (admin), or as a fictional member (ioana, matei, sofia, radu) with demo-pass. The demo seeds a fictional team with synthetic submissions; contest and problem names are real public data. Every judge API is replaced by an in-memory fake, so the refresh buttons work offline too.
pip install -r requirements.txt
cp .env.example .env # then edit it
python run.py # http://localhost:8000
| Variable | Purpose |
|---|---|
ADMIN_PASSWORD | Password of the admin account, used only when the database is first created; change it later from the Password link |
SECRET_KEY | Signs session cookies. Set a long random value in production |
DATABASE_URL | SQLAlchemy URL, default sqlite:///./squadforces.db |
SYNC_INTERVAL_HOURS | How often histories and stale items refresh (default 2) |
CF_API_KEY / CF_API_SECRET | Optional: signed Codeforces requests |
ALLOW_OPEN_REGISTRATION | 1 lets anyone sign up without an invite. Leave it off in production; it is for local development and the demo |
PUBLIC_URL | Base URL used in invite links. Defaults to Railway's public domain, then to the address a request came to |
Then sign in as admin and open Admin → Invite links to make a link for each person (or cohort). They sign up with it, add their handles (their histories load straight away), and can create groups of their own or join others' through group links.
Existing databases upgrade in place. Groups made before ownership existed become admin-owned with a member limit of 10 (or their current size if larger), so nothing is removed or moved.
HttpOnly, SameSite=Lax, Secure when deployed) that end on every device when a password changes. A deployment refuses to start without SECRET_KEY, and without ADMIN_PASSWORD when it creates the admin account.tests/test_security.py and tests/test_invites_groups.py check the outsider, member, owner and admin cases.pip-audit.Found something? Open an issue, or email the address on the GitHub profile for anything sensitive.
The repo ships with railway.toml.
/data.DATABASE_URL=sqlite:////data/squadforces.db, ADMIN_PASSWORD and SECRET_KEY.railway.toml.app/
main.py, routers/ routes: groups, assignments, accounts, profiles
problems.py the source-detection switch (which judge is this link?)
platforms/ one module per judge: cf, atc, kn, cses, pbinfo, infoarena, spoj, codechef, other (+ registry)
submissions.py the submission store: incremental refresh, queries
sync.py refresh members' submissions, then derive an item's results
scraper/ the HTTP calls to each judge, nothing else
scheduler.py periodic refresh
templates/, static/ server-rendered UI, no JS build step
tests/ 150+ offline tests, incl. the differential classifier tests
scripts/ the offline demo and the screenshot generator
python -m unittest discover -s tests -t .
Tracked as GitHub issues: team gym contests with ICPC-style scoring, a curated ICPC contest database with a per-team "which SEERCs did we solve" table, and more profile views.
MIT. Built with Claude Code.