Inside the project
Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.
A camera-based sparring trainer inside AssistantApp. A 3D animated partner throws discipline-specific techniques (boxing, Muay Thai, karate, taekwondo, wing chun, kung fu, Drunken Fist, sanda, MMA) at your tracked head and body. The fight modes judge what you actually did when each attack lands: you slipped off the line, stepped out of reach, covered the spot with your guard, or were hit. You never have to perform a named move. The partner keeps fighting whatever happens. Difficulty comes from how late he sees you (from about half a second down to a seventh of a second), how well he reads gaps in your guard, and how broken his rhythm is. His timing is written as drum phrasing: accents are power shots, ghost notes are feints. With MIDI switched on, his rhythm plays on a drum kit, and pads played into the app make him throw. The trainer is in development: the engine is extensively unit-tested, but it has not yet been accepted in a live camera round.
What stands out
- Outcome-judged defence: any slip, step-back or cover counts, measured in units of the user's own head and shoulder size so the rule is the same at any distance
- Continuous opponent that never pauses: presses on after landing, resets after being countered; Adaptive Opponent aims for about two in three defended
- Never scores what it cannot see: an untracked user is not scored and is told STEP INTO VIEW
- Latency-as-difficulty, guard-opening reads, and leading a moving target, each with a test that has a control case
- MIDI 2.0 out (General MIDI drum map, note on the beat of impact, no hanging notes) and MIDI in (play the partner); learns phrasing from the user's own MIDI files, none bundled
- 3D discipline-styled original fighter whose striking limb ends exactly on the scored point
Current limits
- No accepted live round since the 2026-10-05 rebuild
- All work is uncommitted in the AssistantApp main working tree; not released
- Breathing rate is shown only when measurable (quiet guard); breath-phase timing not built
- Counters are credited but not analysed for power or technique
- On-screen aim can look a few percent off on very wide or tall windows (camera aspect-fill); scoring is unaffected
- MIDI transport never tested against a real port or DAW
Features & evidence
Fight judge (slipped / out of reach / blocked / hit / unseen)
component-testedEach attack judged at impact from tracked head, torso and guard
Recorded evidence
CombatFightJudgeTests 14/14, 8 planted mutants all caught (2026-10-05); in-app 194/0
Continuous fight loop and adaptation
component-testedNext attack armed 0.1 s after each verdict; skill adapts toward 66% defended
Recorded evidence
CombatMirrorOpponentTests 15/15 incl. a 60 s round sim (2026-10-05); app BUILD SUCCEEDED 2026-10-05
Dead-UI and halt fix
source (build green)Display-link game clock; frame-rate drawing isolated in its own hosting view
Recorded evidence
Cause measured with sample on the live debug build 2026-10-05: game tick ran 0 times in 5 s; fix built, not yet run live
Opponent mind (latency line, mirror, guard openings, lead)
component-testedPartner perceives you 140–520 ms late, squares up, attacks uncovered surfaces, leads movement
Recorded evidence
CombatOpponentMindTests 26/26 (2026-10-05)
Tempo from bounce and breathing
component-testedBeat locked to the user's bounce through the app's PLL clock; breathing only when measurable
Recorded evidence
CombatFightTempoTests 12/12, 7 mutants caught (2026-09-19)
Drum-phrase rhythm and MIDI file learning
component-testedAccent / stroke / ghost phrases, cross-rhythms, Markov model learned from the user's SMF files
Recorded evidence
CombatFightRhythmTests 15/15 (2026-09-19)
MIDI 2.0 in/out
component-testedPartner notes out on the impact beat; virtual input 'Flash-Dodge Partner In'
Recorded evidence
CombatFightMIDIPortTests 7/7 (2026-09-19); no real-port test
3D sparring partner
component-testedOriginal fighter (not a likeness of any existing character), nine discipline kits, perspective IK
Recorded evidence
CombatFighterTests 16/16; mirrored stance: worst limb stretch 1.13x over 12,672 poses (2026-10-05)
Movement analyser (velocity, kinetic chain, snap)
component-testedStrike speed, sequencing and onset-to-peak from pose; adopts SemanticCompute masked Savitzky–Golay
Recorded evidence
Analyser/Signal/Engines suites plus SC parity 9/9 against SC main (2026-09-19)
Drills (Mixed, Combinations, Dodge/Attack Target, No-Go Feints)
sourceNamed-response reaction drills
Recorded evidence
Pre-existing; text enlarged 2026-10-05; live-scoring weakness documented
Review updates & corrections
- The 17 Oct bio says 'fight engine rebuilt after one live report, 194 tests, uncommitted, no live round accepted'. That is still accurate; nothing in this lane has changed since 2026-10-05.
- Caption correction: row 2 of mirror-spar-stance.png (sweep) shows pre-10-05 behaviour; in the fight modes, drill sweeps are now thrown as hooks/crosses aimed at the user.
- The bio's '8.5k-line module' understates it: the monolith is ~9.9k lines plus about 10 separate engine files.
Workflow walkthrough
A guide to the native workflow. These steps describe the app; only the recordings and images embedded on this page are available as website demonstrations.
- Open AssistantApp, then Flash-Dodge Trainer (camera permission required)
- Pick a discipline, choose drill Adaptive Opponent or Mirror Spar, set Reactions (Mirror Spar), press START SPAR
- Stand in view, guard up; the partner throws at your head or body
- Slip, step back or cover; one big word per exchange (SLIPPED / BLOCKED / HIT / COUNTER) and DEFENDED · HIT · COUNTERS totals
- Space pauses; the 'Your partner' card shows his latency, the beat source, breathing and what he aimed at
- Optional: turn on Partner on MIDI and route his drums to Logic, or play pads into 'Flash-Dodge Partner In'
Planned captures · not yet available
- A live round of Adaptive Opponent
