{"id":43565425,"url":"https://github.com/gisketch/kitsune-cube","last_synced_at":"2026-02-03T21:20:06.291Z","repository":{"id":331140761,"uuid":"1125198258","full_name":"gisketch/kitsune-cube","owner":"gisketch","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-05T11:47:37.000Z","size":714,"stargazers_count":1,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-05T11:59:25.969Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gisketch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-30T10:01:01.000Z","updated_at":"2026-01-05T11:47:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gisketch/kitsune-cube","commit_stats":null,"previous_names":["gisketch/cube-app"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/gisketch/kitsune-cube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gisketch%2Fkitsune-cube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gisketch%2Fkitsune-cube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gisketch%2Fkitsune-cube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gisketch%2Fkitsune-cube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gisketch","download_url":"https://codeload.github.com/gisketch/kitsune-cube/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gisketch%2Fkitsune-cube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29057490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T20:13:53.544Z","status":"ssl_error","status_checked_at":"2026-02-03T20:13:40.507Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-03T21:20:05.483Z","updated_at":"2026-02-03T21:20:06.284Z","avatar_url":"https://github.com/gisketch.png","language":"TypeScript","funding_links":["https://ko-fi.com/gisketch"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/favicon.svg\" alt=\"Kitsune Cube Logo\" width=\"80\" height=\"80\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e🦊 Kitsune Cube\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA gamified smart cube companion for speedcubers who demand more.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://kitsunecube.com\"\u003eWebsite\u003c/a\u003e •\n  \u003ca href=\"https://discord.gg/XPQr4wpQVg\"\u003eDiscord\u003c/a\u003e •\n  \u003ca href=\"https://ko-fi.com/gisketch\"\u003eSupport\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🎯 Why Kitsune Cube?\n\nAs a software developer and speedcubing enthusiast, I've been inspired by amazing apps like Cubeast, Acubemy, and csTimer. Building on their ideas, I wanted to create something that combines the best of analytics, gamification, and replay features into one seamless experience. **Kitsune Cube** is the result—a feature-rich training platform designed to make every solve count.\n\n**Free to use.** Built by a cuber, for cubers.\n\n---\n\n## ✨ Features\n\n### 🎮 Gamification System\n- **XP \u0026 Leveling** — Earn experience points for every solve, with faster times giving bonus XP\n- **50+ Unique Achievements** — Unlock tiered achievements (Bronze → Silver → Gold → Diamond → Obsidian) across multiple categories:\n  - **Grind** — Solve milestones (100, 1K, 10K, 100K solves)\n  - **Smart Cube** — TPS records, efficient crosses, smooth F2L flow\n  - **CFOP Specific** — OLL/PLL skips, God's Number solves, full-step mastery\n  - **Anomaly** — Rare achievements for unusual solve patterns\n  - **Streak** — Daily solve streak tracking\n\n### 📊 Advanced Analytics\n- **CFOP Phase Breakdown** — Real-time analysis of Cross, F2L (each pair), OLL, and PLL phases\n- **Move-by-Move Timing** — See exactly where you're fast and where you can improve\n- **TPS (Turns Per Second)** — Track your execution speed\n- **Phase Goals** — Set personal targets for each CFOP phase\n\n### 🎬 Full Replay System\n- **Live Solve Playback** — Watch any solve with move-by-move animation\n- **Gyroscope Recording** — Smart cubes with gyro capture real hand movements\n- **Speed Controls** — Adjust playback speed, pause, and step through moves\n- **Share Replays** — Share your best solves with a link\n\n### 🏆 Leaderboards\n- **Global Rankings** — Compete on average time, level, achievements, and single solve records\n- **Public Solve Library** — Browse and replay top solves from the community\n\n### 🔧 Smart Cube Integration\n- **Bluetooth Connection** — Connect via Web Bluetooth API\n- **Real-time Tracking** — Every move synced instantly\n- **Battery Monitoring** — Keep track of your cube's battery level\n- **Calibration System** — Easy cube state synchronization\n\n### 🎨 Customization\n- **Multiple Themes** — Choose from Kitsune, Dark, Light, Serika, and more\n- **Custom Cube Colors** — Match your physical cube's color scheme\n- **Adjustable Animation Speed** — Fine-tune the 3D cube visualization\n- **Inspection Timer** — WCA-compliant 15-second inspection option\n\n### 📱 Additional Features\n- **WCA-Compliant Scrambles** — Powered by cubing.js for official-quality scrambles\n- **Cloud Sync** — Create an account or sign in to sync solves across devices\n- **Offline Support** — Works without internet, syncs when back online\n- **Manual Timer Mode** — Use without a smart cube with keyboard/touch controls\n- **Solve History** — Track all your solves with filtering and statistics\n- **Simulator Mode** — Input scrambles and solutions to analyze any solve\n- **Keyboard Shortcuts** — Full command palette for power users\n\n---\n\n## 🧊 Supported Smart Cubes\n\n### ✅ GAN (Fully Supported)\n\n| Cube | Gyro | Status |\n|------|------|--------|\n| GAN 12 ui FreePlay | ✅ Yes | ✅ Confirmed |\n| GAN 356i 3 | ✅ Yes | ✅ Confirmed |\n| GAN 356i Carry E | ❌ No | ✅ Confirmed |\n| GAN 356i Carry 2 | ❌ No | ✅ Confirmed (no gyro hardware) |\n| GAN 14 ui FreePlay | ❓ | 🧪 Needs testing |\n| GAN 12 ui | ✅ Yes | 🧪 Needs testing |\n| GAN 12 ui Maglev | ✅ Yes | 🧪 Needs testing |\n| GAN 356i Carry S | ✅ Yes | 🧪 Needs testing |\n| GAN 356i Carry | ✅ Yes | 🧪 Needs testing |\n| GAN Mini ui FreePlay | ✅ Yes | 🧪 Needs testing |\n| Monster Go 3Ai | ✅ Yes | 🧪 Needs testing |\n\n### 🧪 MoYu (Experimental)\n\n| Cube | Gyro | Status |\n|------|------|--------|\n| WeiLong V10 AI | ✅ Yes | 🧪 Needs testing |\n| MoYu AI 2023 | ❌ No | 🧪 Needs testing |\n\n### 🧪 QiYi (Experimental)\n\n| Cube | Gyro | Status |\n|------|------|--------|\n| QiYi QY-SC-S | ❌ No | ✅ Confirmed |\n| QiYi AI Smart Cube | ❌ No | 🧪 Needs testing |\n\n### 🧪 GiiKER (Experimental)\n\n| Cube | Gyro | Status |\n|------|------|--------|\n| GiiKER i3S | ❌ No | 🧪 Needs testing |\n| GiiKER i2 | ❌ No | 🧪 Needs testing |\n| Xiaomi Giiker | ❌ No | 🧪 Needs testing |\n\n\u003e **Help us test!** If you own a smart cube marked as \"Needs testing\", please report your experience on our [Discord](https://discord.gg/XPQr4wpQVg).\n\n---\n\n## 🔧 Supported Solving Methods\n\n| Method | Analysis Support |\n|--------|------------------|\n| CFOP | ✅ Full phase breakdown |\n| Roux | 🔄 Basic tracking |\n| ZBLL | 🔄 Basic tracking |\n| ZZ | 🔄 Planned |\n| Petrus | 🔄 Planned |\n\n---\n\n## 🗺️ Roadmap\n\n- [ ] **More Smart Cubes** — MoYu, QiYi, Giiker support\n- [ ] **Smarter Analyzer** — OLL/PLL case recognition and algorithm suggestions\n- [ ] **Rotation Detection** — Accurate cube rotation tracking\n- [ ] **Slice Move Detection** — M, E, S move recognition\n- [ ] **More Methods** — Full Roux, ZZ, and Petrus analysis\n- [ ] **csTimer Import** — Sync your existing solve history\n- [ ] **Algorithm Trainer** — Practice OLL, PLL, and more\n- [ ] **Battle Mode** — Real-time racing against friends\n- [ ] **Mobile App** — Native iOS/Android apps\n\n---\n\n## 🛠️ Tech Stack\n\n- **Frontend** — React 19, TypeScript, Vite\n- **3D Graphics** — Three.js, React Three Fiber\n- **Styling** — Tailwind CSS, Framer Motion\n- **Cube Logic** — cubing.js (scrambles), gan-web-bluetooth (chribot fork)\n- **Backend** — Firebase (Auth, Firestore)\n- **Charts** — Recharts\n- **Hosting** — Netlify\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n- Node.js 18+\n- A Chromium-based browser (Chrome, Edge, Brave) for Web Bluetooth support\n- A GAN smart cube (optional, manual timer available)\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/gisketch/kitsune-cube.git\ncd kitsune-cube\n\n# Install dependencies\nnpm install\n\n# Start development server\nnpm run dev\n```\n\n### Environment Variables\n\nCreate a `.env` file in the root directory:\n\n```env\nVITE_FIREBASE_API_KEY=your_api_key\nVITE_FIREBASE_AUTH_DOMAIN=your_auth_domain\nVITE_FIREBASE_PROJECT_ID=your_project_id\nVITE_FIREBASE_STORAGE_BUCKET=your_storage_bucket\nVITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id\nVITE_FIREBASE_APP_ID=your_app_id\n```\n\n---\n\n## 📦 Versioning \u0026 Releases\n\nWe use **Semantic Versioning** with `0.MINOR.PATCH` format during beta:\n\n| Type | When to use | Example |\n|------|-------------|---------|\n| `minor` | New features | `0.1.0` → `0.2.0` |\n| `patch` | Bug fixes | `0.1.0` → `0.1.1` |\n\n### Release Workflow\n\n```bash\n# 1. Update src/lib/changelog.ts with the NEW version first\n# 2. Run the release command\nnpm run release:minor   # or release:patch\n\n# 3. Script will:\n#    ✓ Validate changelog matches new version\n#    ✓ Bump package.json version\n#    ✓ Generate version.json\n#    ✓ Commit, tag, and push\n#    ✓ Optionally deploy to Netlify\n```\n\n### Available Scripts\n\n| Command | Description |\n|---------|-------------|\n| `npm run dev` | Start development server |\n| `npm run build` | Build for production |\n| `npm run release:minor` | Release with new features |\n| `npm run release:patch` | Release with bug fixes |\n| `npm run deploy` | Build and deploy to Netlify |\n| `npm run test` | Run tests in watch mode |\n| `npm run lint` | Lint the codebase |\n| `npm run format` | Format with Prettier |\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Here's how you can help:\n\n### Ways to Contribute\n1. **Report Bugs** — Open an issue with detailed reproduction steps\n2. **Suggest Features** — Share ideas in Discord or GitHub Issues\n3. **Submit PRs** — Bug fixes, features, or documentation improvements\n4. **Test Smart Cubes** — Help verify compatibility with non-GAN cubes\n5. **Translations** — Help localize the app\n\n### Development Guidelines\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Write clean, self-documenting code (minimal comments)\n4. Test your changes thoroughly\n5. Commit with clear messages (`git commit -m 'Add amazing feature'`)\n6. Push to your branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Code Style\n- Follow existing patterns in the codebase\n- Use TypeScript strictly\n- Prefer functional components with hooks\n- Use Tailwind for styling\n- Avoid unnecessary comments — write self-documenting code\n\n---\n\n## 💬 Community\n\n- **Discord** — [Join our server](https://discord.gg/XPQr4wpQVg) for support, suggestions, and community\n- **GitHub Issues** — Report bugs or request features\n- **Ko-fi** — [Support development](https://ko-fi.com/gisketch)\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- [cubing.js](https://github.com/cubing/cubing.js) — WCA-compliant scramble generation\n- [gan-web-bluetooth](https://github.com/chribot/gan-web-bluetooth) — GAN + MoYu cube connectivity (chribot fork)\n- [MonkeyType](https://monkeytype.com) — UI/UX inspiration\n- The speedcubing community for endless motivation\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with 🧡 by \u003ca href=\"https://gisketch.com\"\u003e@gisketch\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgisketch%2Fkitsune-cube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgisketch%2Fkitsune-cube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgisketch%2Fkitsune-cube/lists"}