Colophon
Everything Ironfist Insights is built from, what each piece does, and where it comes from. The site is fully client-side: your match data never leaves your browser.
| Technology / resource | What it does here | License |
|---|---|---|
| Wavu Wank | The Tekken 8 replay database all match data comes from. | Community fan project by the wavu.wiki maintainers |
| React (react + react-dom) | Renders every page and panel. | MIT |
| TypeScript | The language the whole codebase is written in. | Apache-2.0 |
| Vite | Build tool. Produces the static bundle and the console export script. | MIT |
| React Router | Client-side routing. Every page has a real URL you can bookmark or paste, with no server behind it. | MIT |
| Dexie (+ dexie-react-hooks) | IndexedDB wrapper. Holds your matches, notes, tags, controller binds, quiz progress and profiles, all in this browser; clearing site data deletes the lot. | Apache-2.0 |
| uPlot | Canvas charting behind the rating and win-rate lines. | MIT |
| JetBrains Mono | The typeface for data, in every theme. Self-hosted through @fontsource-variable, so no request goes to a font CDN. Monospaced so frame numbers line up in a column. | SIL OFL 1.1 |
| Open Sans, Outfit, Orbitron, Space Grotesk, Archivo + Archivo Black | Headings and prose for the aesthetic themes, one face each. Self-hosted like the mono. | SIL OFL 1.1 |
| Vitest + Testing Library | The test harness. | MIT |
| axe-core (via vitest-axe) | Accessibility checks. Every page render in the suite goes through axe, and each theme’s contrast ratios are asserted instead of eyeballed. | MPL-2.0 (axe-core); MIT (vitest-axe) |
| jsdom + fake-indexeddb | Browser stand-ins for the tests: a fake DOM and a fake IndexedDB. | MIT (jsdom); Apache-2.0 (fake-indexeddb) |
| Playwright | End-to-end suites on desktop and mobile viewports, plus the headless Chromium that prerenders each public page to static HTML after the build. | Apache-2.0 |
| oxlint + Prettier | Linting and formatting. Neither ships in the bundle. | MIT |
| marked | Renders the Docs pages: each guide is a plain .md file compiled to HTML in your browser. | MIT |
| obsidian-fight-note (glyph shapes) | The directional arrows and four-button clusters in glyph notation mode, vendored from Dmitry Loac’s Obsidian fight-note plugin and recoloured with this site’s theme tokens. | MIT |
| tekkendocs.com | The frame-data source behind the matchup quiz: startup, block and hit frames, hit levels, and most of the block-punishment ladders. | Community fan project by the TekkenDocs maintainers |
| wavu.wiki | The community Tekken 8 wiki, and the primary source for the frame data pages, read through its Cargo API. It also supplies the punishment ladders for the characters no other source publishes one for. Its patch index is the only place either corpus can learn which game version it describes, currently 3.01.01. | CC0 1.0 (public domain) |
| Frame data corpus | The dataset behind the frame data pages, normalised from wavu’s Cargo API into one committed JSON file per character, plus the measured axes behind each character profile. A script regenerates it, so it can always be re-derived from source. The profiles are counts and roster percentiles, not anyone’s opinion. | CC0 1.0 (public domain), from wavu.wiki |
| Character & rank ID tables | Mappings from Tekken 8’s internal ids to character and rank names. Wavu gives you a number; these turn it into "Feng" or "Tekken Emperor". | Derived from public data |
| Health-page research citations | The findings on the Playing health page are published research, each linked to its own source on the page. Findings and interpretation are labelled separately. None of it is medical advice. | Each source under its own terms — see the link on each fact |
| Cloudflare Pages | Hosts the static site and the Pages Functions. | Commercial service |
| wavu-export.js | This site’s own console script. Paste it into DevTools on your wavu player page and it reads the match table already on screen, then saves it as a .ironfistinsights file. It makes no network requests, and it ships unminified so you can read every line before running it. | Same as this site |
| Cloudflare D1 (the footer’s visit counter) | The visit counter in the footer, on this site’s own origin. A Pages Function records one visit per browser session and reads the total back. No third party is contacted, and no analytics script ships in the bundle. | Proprietary (Cloudflare) — the schema and the Function are ours, under this site’s licence |
| GitHub REST API (via a Cloudflare Pages Function) | Behind the feedback form. A Pages Function takes your subject and description and files them, holding a token the browser never sees. It receives the text you typed and the page path you typed it on. Nothing else, and never your match data. | N/A — a third-party API this site calls |
| Gamepad API | How the browser sees your controller. One poller at 4 ms feeds the trainer, the controller test, the button mapper and the radial menu, so every surface reads the same snapshot. The measured interval is printed on the page. | Web standard (W3C) |
| SDL_GameControllerDB | A community database of controller layouts, from the SDL project. A curated slice of it ships here: fight sticks, leverless boards, arcade encoders, and the pads a browser hands over with their buttons in raw hardware order. It is what lets the site offer a layout for a controller it has never seen instead of asking you to map sixteen actions by hand. | zlib, by Sam Lantinga and contributors |
| Web Audio API | Synthesises every sound the site makes: the trainer’s demo tones playing a drill’s target rhythm, and the quiz feedback that climbs a scale as a streak runs. No audio files ship. | Web standard (W3C) |
| Share-link codec (/share) | An arithmetic coder for share links. It packs the date, result and both characters of each match into a base64url payload carried in the URL fragment, which is never sent to a server. Display names travel only if the sender types one, and Polaris IDs never travel at all. Opening a link renders a read-only view and writes nothing to your own data. | Same as this site |
| Site artwork (favicon, share card) | The favicon is four lines of hand-written SVG. The link-preview card is a 1200×630 PNG in the same two theme colours with JetBrains Mono rasterised into it, which SIL OFL permits. No stock art and no icon pack anywhere on the site. Nav and page icons are inline SVG paths drawn with currentColor, so the theme controls them. | Same as this site; embedded type under SIL OFL 1.1 |
| .ironfistinsights format | The file format for exports and backups. Plain JSON underneath, with a SHA-256 checksum over the match data taken through the browser’s own Web Crypto API. On import a mismatched checksum is blocked by default, with an explicit override, so a truncated download does not quietly land in your data. Backups written before this extension was renamed end in .hifi instead — those still import exactly the same way. | N/A — a file format, not a dependency |