Releases: LIN4CRE/KushCloud
Releases · LIN4CRE/KushCloud
Release list
v1.0.0
v4.5.0 — Cloudflare Leaderboard Migration
Cloudflare Leaderboard Migration
This release adds a Firebase-free online leaderboard using Cloudflare Workers + D1.
Added
- Cloudflare Workers + D1 leaderboard backend
- Stable anonymous \playerId\ for per-player cloud rankings
- Cloud/local leaderboard status indicators, refresh button, and best-score sync
Changed
- Leaderboard priority: Cloudflare D1 API checked first; Firebase is fallback
- Scores sync locally first, then to cloud when \VITE_LEADERBOARD_API_URL\ is set
Bug fix
- Firebase was silently overriding the Cloudflare leaderboard path — fixed priority so D1 is checked first
3.5.0
KushCloud v3.3.0
What's Changed
Bug Fixes
- Fixed Leaderboard.test.tsx: navigator mock stripped \userAgent\ crashing React 19
- Fixed Leaderboard.test.tsx mock: missing \getFriendScores\ and \encodeScoreLink\
- Fixed tests/setup.ts unsafe Navigator cast (TypeScript error)
- All 156 tests passing, 0 suites failing (pre-existing Leaderboard failure resolved)
Cleanup
- Removed unused exports: \SectionLabel, \Modal, \AnimatedNumber\ from ui.tsx
- Removed unused \subscribeUserProfile\ from firebase.ts
- Removed unused \getRunLog\ from runProcessing.ts
- Removed unused \useIsStandalone\ from useUpdateChecker.ts
- Removed unused \export default env\ from env.ts
- Removed unused \useRef\ import from ui.tsx
Verification
- TypeScript: 0 errors | ESLint: 0 errors/0 warnings | Tests: 156/156 pass | Build: 756 kB
Full Changelog: v3.2.0...v3.3.0
KushCloud v3.2.0
What's Changed
Bug Fixes
- Fixed isTimeExpired() always returning false (dead code removed)
- Fixed CrateReveal inline definition breaking React reconciliation
- Fixed duplicate global error listeners in main.tsx and App.tsx
- Fixed onFrenzy firing every frame instead of on state change
- Fixed CrateReveal useEffect re-running on every render
- Fixed leaderboard subscription recreating on every bestScore change
- Fixed async anti-pattern in getLeaderboard() (redundant callback)
- Fixed 10 no-explicit-any lint warnings across tests
Features
- Restored Firebase connectivity (leaderboard, auth)
- Speed prototype improvements
- URL score sharing
- Auto-refresh leaderboard
- Leaderboard cache repair
Infrastructure
- Centralized error handling in errorHandler.ts
- Extracted CrateReveal to its own component
- Firebase .env credentials restored
- TypeScript: 0 errors, ESLint: 0 warnings, Tests: 155/155 passing
Full Changelog: v3.1.0...v3.2.0
KushCloud v3.1.0
Bug Fixes & Performance
- Critical: Removed dead \isTimeExpired()\ method that always returned false, correcting intent mismatch in engine timing (\engine.ts)
- Components: Extracted \CrateReveal\ from \App.tsx\ into dedicated file — prevents React reconciliation breakage from inline component definition
- Event handlers: Centralized global error handling — removed duplicate \error/\unhandledrejection\ listeners between \main.tsx\ and \App.tsx\
- Performance: \onFrenzy\ callback now fires only on frenzy state change instead of every frame
- Performance: Leaderboard subscription in \Play.tsx\ no longer recreates on every \�estScore\ change — uses \useRef\
- Stability: Fixed async anti-pattern in \leaderboard.ts\ \getLeaderboard()\ — redundant callback wrapper removed, proper \�wait\ added
- Lint cleanup: Resolved 10
o-explicit-any\ warnings across test files
KushCloud v3.0.0
Full Changelog: v2.6.0...v3.0.0
KushCloud v2.6.0
Full Changelog: v2.4.0...v2.6.0
KushCloud v2.4.0
Full Changelog: v2.3.0...v2.4.0
KushCloud v2.3.0
What's New
- Update modal with install-type detection (PWA/Android/web), dismiss/skip persistence, hourly recheck
- PWA foundation: manifest.json, service worker (network-first), icon.svg — app is now installable
- Leaderboard rewrite: loading skeleton, player stats bar, offline indicator, refresh with timestamp, friend star icons, rank medals
- Leaderboard friend filtering now uses Firebase friends list instead of hardcoded names
- Firebase DB rules fix: \period\ validation now accepts 'all'\ to match client code
- Score submission optimized: only submits on period change or new personal best
Verification
- TypeScript: 0 errors
- ESLint: 0 errors
- Build: 700 KB (191 KB gzip), single-file
- Tests: 92/92 passing
Full Changelog: v2.2.0...v2.3.0