ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
브라질 유술 연습을 위한 무료 기술 지도·플래시카드·시뮬레이션 롤, 계정 없이 시작
Study Brazilian jiu-jitsu between classes with a free technique map, flashcards, and simulated rolls. Explore positions and escapes. No account needed to start.
교육JavaScript · PythonGitHub @diogoseca온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
BJJ as a State Machine. Navigate the graph of BJJ, or random roll to discover the game.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Brazilian jiu-jitsu as a playable state machine, where positions, transitions and submission attempts are all states.
bjjgraph.org ·
Get the data ·
Contribute
Free to use in your browser. No account required. Source-available, noncommercial licence.
Mount from the top: film-study clips, a flashcard question, and the hand of attacks and transitions, each with its odds.
A state is not always a position
A roll never leaves the state machine. It changes which kind of state the players are in.README 전문 보기 ↗| Explore | Drill | Roll |
|---|---|---|
| Follow connected states and study both players' roles. | Review flashcards with spaced repetition and film-study clips. | Choose an attack, pass, escape or continuation and play out its possible outcomes. |
A roll never leaves the state machine. It changes which kind of state the players are in.
| State | What it represents |
|---|---|
| Position | A relatively stable configuration, such as mount or closed guard. Players can still move, apply pressure and fight for control. Stable does not mean motionless. |
| Transition | A transient state: players are moving, applying forces and actively trying to change the configuration. A pass, sweep or escape is a state in the model, not just an arrow between positions. |
| Submission | A transient attacking state, like a transition, with the possibility of ending the game. An established attack can be finished, defended or changed into something else. Entering it is not the same as getting a tap. |
The arrows connect states. Attempt weights describe which techniques are attempted from a position and role. Outcome probabilities describe where an attempt can lead: success, failure or a counter. A submission finish can reach game-over; an unsuccessful attempt continues the exchange.
Positions have Top / Bottom perspectives. Transitions and submissions have Attacker / Defender perspectives. The role is part of the state, not a label for who is winning. Reference hubs group those perspectives for reading; they are not extra playable states.
The app interprets this model rather than stopping on every intermediate node. Submission attacks have their own choices, including a separate Finish action. The architecture reference separates the authored graph from its display and runtime behavior.
Progress stays in your browser. Sign in only if you want cross-device sync.
| Authored JSON files | Count |
|---|---|
| Positions | 133 |
| Transitions | 1,025 |
| Submissions | 353 |
These are source-file counts, not the number of playable orbs. Submission files include 63 family hubs, which group occurrences rather than model executable attacks. Source probabilities are authored per ruleset, with distinct gi and no-gi values.
| Read or download | What you get |
|---|---|
| Latest release | Start here. Two attached assets, graph.json and graph.json.gz: role nodes, attempt weights, outcomes, flashcards and reference material. A snapshot of the graph behind the published site. No account, no API key, no clone. |
content/ | Authored JSON alongside generated Markdown pages. Edit the JSON, not the Markdown. |
graph.json | The same graph at the current revision, in the repository. Around 50 MB, so GitHub will not preview it in the browser; take the release asset or the raw file. |
CITATION.cff | Citation metadata for this project. |
# Authored offers from bottom closed guard, not a runtime-filtered hand.
jq '.positions["closed-guard/bottom"].transitions[] | {technique, attemptProbabilityByRuleset, successRate}' graph.json
# One transient state's performer role, success rates and destinations.
jq '.transitions["kneebar-entry-from-inverted-guard/attacker"] | {fromRole, successRateByRuleset, outcomes}' graph.json
Count authored files in this checkout:
find content/Positions -name '*.json' | wc -l
find content/Transitions -name '*.json' | wc -l
find content/Submissions -name '*.json' | wc -l
Emit the local payload before checking availability, so the validator checks the shipped wire as well as the source graph:
python3 scripts/regenerate_neural_data.py
npm run validate:availability
Read counts.nogi and excluded.nogi.positions in tests/artifacts/ruleset_availability.json. The ranking uses positions[*].transitions[].attemptProbabilityByRuleset.nogi, grouped by target, excluding null cells; success rates come from transitions["<target>/attacker"].successRate. Hubs carry no attempt rows. The content standards explain why null is not zero.
Probabilities are authored estimates, checked by schema and graph validators and open to correction by pull request. Calibration and community feedback can change them. A graph that is internally consistent can still be wrong about jiu-jitsu.
State boundaries, technical descriptions, safety, ruleset assumptions and probability estimates need review by a panel of black-belt Brazilian jiu-jitsu practitioners. This README does not claim that validation has happened. Generated content and passing automated checks are not substitutes for it.
Use this alongside coached practice, not as permission to attempt a submission or as a measure of anyone's belt level. If a claim looks wrong, open a correction with the state, role, ruleset and your reasoning.
Authored JSON → Jinja2 templates → generated Markdown → static pages
└──────→ graph data + deferred study chunks ────→ canvas app
content/, templates/ and scripts/. The data, schema and build contracts are documented in Architecture and Content.neural/, with the main imperative canvas component in neural/src/app.src.jsx. It loads a compact graph, deck manifest and curriculum, then fetches study content as needed.source/, emits the pages and crawlable fallback beneath the app.functions/. Supabase provides optional account sync; PostHog provides analytics.scripts/, node tests in tests/ and Playwright journeys in e2e/.A correction is more useful than a new feature built on a wrong assumption. Propose one through an issue or a PR against the authored JSON. Include the evidence or technical reasoning that changed your answer.
npm run validate:json
npm run validate:graph
npm run regenerate:build
The full regeneration command can invoke paid AI content enrichment and rewrites generated artifacts. Read CONTRIBUTING.md for prerequisites and the workflow before running it. Never edit generated content/*.md; keep one change per PR and stage files by explicit path. Bot PRs receive the same review as human ones.
For app work, read CLAUDE.md section 6 before editing. It records the implementation traps that are not obvious from a screenshot.
Source-available, not open source. BJJGraph uses the PolyForm Noncommercial 1.0.0 licence. Noncommercial use is permitted under its terms; commercial use requires separate permission. The licence text is authoritative.
For the corpus or app, open a GitHub issue. For a human conversation, contact Diogo Seca on LinkedIn.