CubingTools.de is a toolkit for competitive cubing workflows: event grouping, Guildford planning, average tracking, and solve-distribution analysis.
Current version: 1.2.0
- Overview
- Tool Suite
- Admin Features
- Backend/API
- Local Development
- Environment Variables
- Usage
- Contributing
- License
This project includes a Node.js/Express backend and a static frontend served from the same app.
Core goals:
- Competition planning support (grouping + helper role workflows)
- WCA-backed performance analysis
- Shareable workflows via URL state
- Operational tooling for admin moderation and monitoring
Path: public/tools/guildford/
Features:
- Relay presets including FTO variants
- Custom relay composition
- Pickup-time-aware split optimization between two competitors
- WCA integration for names, averages, and solves
- URL sync for shareable setups
Path: public/tools/grouping/
Features:
- Loads event definitions from
/events - Event search/select with optional custom events
- Dynamic or fixed group sizing
- Sorting strategies: Round Robin, Linear, Random
- Helper-role assignment support (judges/runners/scramblers)
- URL state restore for collaboration
Path: public/tools/average/
Features:
- Solve entry with penalties (
+2,DNF) - Ao5/Mo3 and mean calculations
- BPA/WPA/TFT metrics
- WCA comparison data for ranking context
- Event-scoped cookie persistence for saved averages
Path: public/tools/globalCalc/
Features:
- Data input from csTimer export or WCA ID
- Frequency distribution chart
- Adjustable analysis window (slider)
- Predicted global average and deviation metrics
- Best rolling average + simulated probability of beating it
Path: public/html/admin/
- Password login endpoint:
POST /api/admin/login - Token verification endpoint:
GET /api/admin/verify - Session token stored in browser session storage
Page: /admin/status
Provides:
- Uptime and memory usage
- Log file size
- Request/error analytics
- Log explorer and detailed matching entries
Page: /admin/messages
Provides:
- View confirmed/unconfirmed messages
- Bulk delete and selection actions
- Email/IP-hash bans
- Appeal review and resolution workflow
Page: /admin/dev-todo
Provides:
- Protected read/write access to
md/TODO.md - Checkbox toggle + add-item workflow in UI
Main backend paths:
backend/server.jsbackend/API/api.jsbackend/API/routes.jsbackend/API/tools.js
GET /api/tools- tool metadata from tool HTML filesGET /api/wca/:wcaId/:event- WCA profile-derived dataGET /api/version- app version frompackage.jsonGET /events- event definitions for grouping tool
POST /api/contactGET /contact/confirm?id=...
Behavior:
- reCAPTCHA Enterprise verification
- message confirmation flow (double opt-in)
- pending message expiry cleanup
- ban/appeal handling
- Endpoint-specific rate limiting (
express-rate-limit) - Input sanitization (
sanitize-html) - CORS allowlist handling
- Trust proxy enabled for accurate
req.ip - Structured JSON request logging
- Clone the repository.
git clone https://github.com/s-kling/cubingtools.de.git
cd cubingtools.de- Install dependencies.
npm install-
Configure backend ports in
backend/config.json. -
Create backend env file. File:
backend/.env -
Start app with helper script.
./bin/start.shThe script supports production (8000), beta (8001), or both.
npm run start # starts ./bin/start.sh
npm run beta # node backend/server.js --beta
npm run dev # node backend/server.js --beta --debug
npm run debug # node inspect backend/server.js
npm test # node --test backend/tests/*.test.jsConfigured in backend/.env.
Commonly used variables:
STATUS_PAGE_PASSWORD(SHA-256 hash expected by admin auth)EMAIL_HOSTEMAIL_USEREMAIL_PASSWORDEMAIL_RECEIVERCONTACT_API_PASSWORDGOOGLE_APPLICATION_CREDENTIALSRECAPTCHA_PROJECT_IDRECAPTCHA_SITE_KEYRECAPTCHA_ACTIONCORS_WHITELIST(optional comma-separated override)
- Open the site and pick a tool from sidebar or homepage carousel.
- For WCA-backed tools, provide a valid WCA ID (format like
2023ABCD01). - Use URL-sharing where supported (notably Guildford and Grouping workflows).
- For admin tasks, sign in at
/adminand continue to status/messages/todo pages.
- Fork and create a feature branch.
- Implement and test changes.
- Open a pull request with a clear summary of behavior changes.
MIT License.