UmaTools is a responsive Uma Musume companion suite for planning training runs, checking race requirements, exploring game data, and handling common day-to-day decisions. The tools share one navigation system, visual language, settings panel, English/Japanese localization layer, and mobile-first interface.
Live site: daftuyda.moe
| Area | Tool | Purpose |
|---|---|---|
| Site | About UmaTools | Learn about the project, how its tools and documentation are organized, local data and privacy, credits, and ways to contribute. |
| Rating | Skill Optimizer | Build the strongest affordable skill set for Rating, Team Trials, or Aptitude Test goals. |
| Rating | Rating Calculator | Project a final rating from stats, aptitudes, stars, unique level, and purchased skills. |
| Tools | Event OCR | Capture an event screen, identify it, and compare its outcomes. |
| Tools | Support Hint Finder | Find support cards that provide a chosen set of skill hints. |
| Tools | Deck Builder | Assemble a character and six-card support deck, inspect effects, and load scenario-aware templates. |
| Tools | Stamina Calculator | Compare available stamina and recovery against a race-specific requirement. |
| Tools | Valid Accel Checker | Find acceleration skills whose activation windows fit a selected course. |
| Tools | Grand Live Token Planner | Plan Grand Live songs and track the five performance-token totals still required. |
| Data | Skill Library | Search and filter skills by type, cost, rating value, efficiency, effects, and sources. |
| Data | Rating Rank Breakdown | Browse rating thresholds and jump directly to major rank families. |
| Fun | Randomizer | Generate characters and support decks with configurable filters. |
| Fun | Umadle | Play the daily Uma Musume character guessing game. |
- Responsive desktop and mobile layouts with a consistent wide content shell.
- Light, dark, and OLED themes with an accessible UmaTools brand mark.
- English and Japanese interfaces plus Global/JP data filtering.
- Shared race-configuration controls, cards, dialogs, buttons, spacing, and elevation.
- Clickable skill names across the suite, opening a unit-aware skill detail dialog.
- Local saves and shareable links where a planning tool supports them.
- Service-worker caching for core pages and assets.
- Keyboard navigation, reduced-motion support, and viewport-centred dialogs.
UmaTools/
|-- public/ # Complete deployable website
| |-- assets/ # Game data, images, fonts, audio, and brand assets
| |-- css/air.css # Canonical shared stylesheet
| |-- js/ # Browser modules and page controllers
| |-- *.html # Public page entry points
| |-- sw.js # Service worker
| `-- site.webmanifest
|-- api/ # Vercel FastAPI functions, including social images
|-- scripts/ # Maintenance tooling grouped by purpose
| |-- audit/ # Static-reference, browser, and Lighthouse checks
| |-- build/ # Asset and data build steps
| `-- data/ # GameTora, GameWith, and compatibility importers
|-- tests/
| |-- fixtures/ # Stable test inputs
| `-- unit/ # Versioned Node unit tests
|-- docs/
| |-- guides/ # Maintained feature and contributor documents
| `-- images/ # Diagrams used by the documentation
|-- .github/workflows/ # Automated data refresh
|-- package.json # Build, sync, audit, and validation commands
`-- vercel.json # Deployment, routes, headers, and API configuration
public/ is the deployment root. Browser URLs remain /optimizer, /assets/..., /js/..., and so on; the repository layout does not leak into public URLs.
Vercel excludes public/ from Python function bundles. npm run build runs
build:api-assets to copy the OG icon, font (with its license), and event JSON files
into the generated runtime-assets/ directory. The API reads those copies when
available, and uses public/assets/ for local development before a build. Rerun
npm run build:api-assets after changing source assets if staged copies exist.
npm run test:api tests the staged API without a public/ directory (requires
the Python runtime dependencies and httpx, also used by check:seo).
See Architecture for component ownership, data flow, and maintenance rules.
Requirements:
- Node.js 24 recommended (
.nvmrc); minimum 22.19. - Python 3 only for the API and Python-backed data utilities.
- The Vercel CLI for local parity with production routing and functions.
git clone https://github.com/daftuyda/UmaTools.git
cd UmaTools
npm ci
python -m pip install -r requirements-dev.txt
npx vercel devFor a static-only preview, serve the public/ directory with any local HTTP server.
npm run build # Publish documentation, validate CSS, normalize JSON, and create WebP assets
npm run build:guides # Publish docs/guides as static documents under /guides
npm run lint # JavaScript and Python linting
npm test # Scoring, solver, provider, downloader, and API regressions
npm run check # Full lint, unit, data, markup, reference, and route gate
npm run check:seo # Verify metadata, schema, canonicals, sitemap, and internal discovery
npm run check:static # Verify local page, asset, CSS, and service-worker references
npm run test:data # Validate deployed data schemas, IDs, counts, and CSV values
npm run test:smoke # Serve the site and verify every clean route and critical asset
npm run audit:lighthouse # Mobile + desktop Lighthouse audit of primary tools
npm run audit:responsive # Browser layout/runtime audit across phone, tablet, and desktop
npm run audit:ios # Check important paths for iOS Safari compatibilitySet LIGHTHOUSE_PAGES to a comma-separated subset such as optimizer,calculator when iterating
locally. The audit server uses Brotli/gzip like the deployment host, while the default command still
checks every configured primary page against the performance, interactivity, and layout-shift
targets.
Runtime data lives in public/assets/. Game-facing URLs still begin with /assets/.
npm run sync:skills-all
npm run sync:uma
npm run sync:supports
npm run sync:races
npm run sync:accel-compat
npm run sync:uma-skills
npm run refresh:dataThe scheduled workflow in .github/workflows/gametora-scrape.yml refreshes the core GameTora datasets. Local scrape caches are ignored and are not part of the deployable repository.
See the data-tooling guide for generator ownership, optional scraper dependencies, and the retained browser fallback.
The Markdown files in docs/guides/ are the source of truth for the public
UmaTools documentation hub. Run npm run build:guides after editing
a document; generated HTML in public/guides.html and public/guides/ should not be edited
directly.
npm run check verifies that the published pages and copied diagrams are current.
| Document | Covers |
|---|---|
| Architecture | Folder ownership, runtime boundaries, shared UI, data flow, build, deployment, and maintenance rules. |
| Rating System | Stat scoring, skill rating, discounts, linked skills, optimization, and rank thresholds. |
| Team Trials | Consistency scoring, trigger analysis, expected value, and optimizer priorities. |
| OCR Reference | Capture, preprocessing, recognition, matching, and troubleshooting. |
| Accel Checker | Course segmentation, valid acceleration windows, uncertainty, and generated data. |
| Deck Builder | Deck construction, limit breaks, compatibility scoring, templates, hint analysis, and saved builds. |
| Stamina Calculator | Race inputs, stat adjustments, recovery math, phase modeling, and result thresholds. |
| Grand Live Token Planner | Song state, presets, token totals, filtering, persistence, and content maintenance. |
| Local Data and Share Links | Browser storage inventory, URL formats, privacy boundaries, and schema-change rules. |
| Translation Reference | Translation modules, adding locales, interpolation, and validation. |
| Data Tooling | Dataset ownership, sync commands, optional dependencies, and generated outputs. |
Game data is sourced from GameTora and GameWith. UmaTools is an independent fan project and is not affiliated with Cygames.