Track your progress. Analyse your solves. Compare with the world.
A comprehensive, fully browser-based training tracker for speedcubers. Track your solving sessions, analyse your progress with beautiful charts, manage your cube inventory, and see how you stack up against WCA world rankings, all stored locally in your browser, with nothing to install.
Note: Screenshots coming soon! The app features a clean interface with a friendly accent colour and colour-coded charts, in light or dark mode.
- Dashboard - Overview of your stats, PBs, and recent sessions
- Live Timer - Competition-ready timer with inspection mode
- Charts - Progress tracking, distributions, rolling averages, and consistency analysis
- Analytics - Performance metrics and insights
- Personal Best Tracking - Track PB singles for all WCA events
- Session Statistics - Ao5, Ao12, mean, and best/worst times per session
- WCA Comparison - See your estimated world rank and percentile based on your PB
- Event Filtering - Filter stats by specific events (3x3, 4x4, etc.) or view all combined
- Quick Actions - Jump straight into the timer, or add a session or cube, from the dashboard
- Competition-Ready Timer - WCA-style space bar timer (hold to start, release to stop)
- Inspection Mode - Optional 15-second inspection countdown (configurable)
- Automatic Scrambles - Generated 3x3 scrambles for each solve
- Real-Time Statistics - Live Ao5, mean, and session stats as you solve
- Penalty Support - Track +2 penalties and DNFs
- Fullscreen Mode - Distraction-free solving environment
- Progress Over Time - Visualise improvement across sessions
- Time Distribution - Histogram showing solve time patterns
- Rolling Averages - Track Ao5 and Ao12 trends over time
- Consistency Analysis - Box plots comparing performance across sessions
- Performance Metrics - Speed, consistency, accuracy, and overall scores, colour-coded from red (needs work) to green (excellent)
- Cube Database - Track all your cubes by type, brand, and model
- Usage History - Link cubes to training sessions
- Active/Inactive Status - Manage your current rotation
- CSTimer Import - Import your existing CSTimer sessions (JSON/TXT formats)
- Selective Import - Choose which sessions to import
- Backup/Restore - Export all your data to one JSON file, or restore from one
- Dark/Light Mode - Toggle between themes with one click
- Friendly, Uncluttered Design - A simple layout with just enough colour and personality
- Personalised Greeting - Optional WCA ID integration for personalised features
- Responsive Design - Works great on desktop and mobile
- No Install, No Login - Nothing to run, nothing to sign into. All data stays in your browser.
There's nothing to install and nothing to run from a terminal.
- Download or clone this repository
- Open
index.htmlin your browser (double-click it, or drag it into a browser window) - Start tracking!
That's it. 🎉 See INSTALLATION.md for browser recommendations, backing up your data, and troubleshooting.
Earlier versions of this project were a Python command-line app paired with a small local
web server: you needed Python installed, a virtual environment, pip install, and a
terminal command just to open the dashboard. That was a lot of friction for what is, at
heart, a page you look at and click things on. This version drops the CLI and the Python
server entirely and rebuilds the same features as a single static web app: open
index.html and you're training. Your data now lives in the browser's own local storage
(IndexedDB) instead of a SQLite file on disk, so there's genuinely nothing to install,
configure, or keep running in the background.
- Open
index.htmlin your browser - Optional: Set up your WCA ID in the dashboard for personalised features
- Start tracking - use the Timer or import existing data
- Navigate to Timer tab
- Select your event (3x3, 4x4, etc.) and session
- Press SPACE to start inspection (if enabled)
- Hold SPACE until timer turns green (ready state)
- Release SPACE to start solving
- Press SPACE again to stop
Times are automatically saved to the current session, in your browser's local storage.
-
Export from CSTimer:
- Open CSTimer → Export → Download as JSON or TXT
-
Import to Speedcube Explorer:
- Go to Import tab
- Click "Choose File" and select your export
- Click "Preview Sessions"
- Select which sessions to import
- Choose the event type
- Click "Import Selected"
- View all sessions - Sessions tab shows all your training with filters
- Add solves manually - Click "Add Session" → Add individual solves
- Edit/Delete - Manage existing sessions and solves
- Sort & Filter - Organise by date, event, or performance
Since your data lives only in this browser (see INSTALLATION.md), use the Export backup / Import backup links in the footer to save a JSON snapshot of everything, or restore from one.
- Frontend: Vanilla JavaScript, HTML5, CSS3 - no build step, no framework, no bundler
- Storage: IndexedDB (your browser's local storage) - nothing leaves your machine
- Charts: Plotly.js (loaded from CDN on first use of Charts/Analytics)
- External APIs (optional): the official WCA API for WCA ID lookups, and the Unofficial WCA Public API for world rankings (there's no official rankings API; this community project, built on the WCA's own results export, is what the WCA's own developer documentation points people to). Used only for the world-rank/percentile stat and the WCA-ID name lookup - everything else works fully offline.
speedcube-training-explorer/
├── index.html # The entire app - open this
├── css/ # Stylesheets
├── js/
│ ├── config.js # Constants, event names, chart config
│ ├── db.js # IndexedDB wrapper
│ ├── stats.js # Ao5/Ao12/mean calculation
│ ├── wca.js # WCA rank/percentile + WCA ID lookup
│ ├── local-api.js # Replaces the old backend - serves every UI data request locally
│ ├── cstimer-import.js # CSTimer import parsing
│ ├── backup.js # Export/Import a JSON backup
│ ├── dashboard.js, sessions.js, cubes.js, charts.js,
│ │ analytics.js, import.js, greeting.js, timer.js,
│ │ app.js, theme.js # UI for each tab
├── images/ # Logo/favicon
├── LICENSE
└── README.md / INSTALLATION.md
Contributions are welcome! Whether you're a speedcuber with feature ideas or a developer looking to help, we'd love to have you.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Feel free to open an issue for bugs or feature requests!
This project is licensed under the MIT License - see the LICENSE file for details.
- Unofficial WCA Public API by Robin Ingelbrecht - the community-run rankings API this app relies on, built from the official WCA results export
- WCA - World Cube Association for their official database, results export, and rankings
- CSTimer - For inspiration and export format compatibility
- Plotly.js - For beautiful interactive charts
- Speedcubing Community - For feedback, support, and keeping the passion alive
Creator: Viet Ha Ly
GitHub: @havl-code
Issues: Report bugs or request features
🔧 Having trouble? Check the troubleshooting guide in INSTALLATION.md first!
Happy Cubing! 🎲✨