Thanks for your interest in improving this project! It's a small, dependency-free game, so contributing is easy.
- Fork the repository and clone your fork.
- Open
index.htmldirectly in a browser, or serve the folder:python3 -m http.server 8000 # then visit http://localhost:8000 - Create a branch for your change:
git checkout -b feature/my-improvement
- No build step, no dependencies. Keep it plain HTML, Canvas and vanilla JS. All art is drawn procedurally — please don't add image assets.
- New enemies / upgrades are welcome. Enemy archetypes live in the
ENEMYtable and upgrades in theUPGRADESlist injs/game.js— both are data, so adding one is mostly a new entry plus (for enemies) ashapein the drawing switch. - Don't break the leaderboard contract.
js/leaderboard.jsis shared with other games; keep its public API (top,submit,qualifies,mode) stable and keep the localStorage fallback working when Supabase isn't configured. - Test a full run (title → play → level up → game over → initials → leaderboard) and check mobile width before opening a pull request.
- Commit with a clear, descriptive message.
- Push to your fork and open a pull request against
main. - Fill out the pull request template and describe what changed and why.
- Link any related issue (e.g.
Closes #12).
Use the issue templates to file a bug report or suggest a feature (a new enemy, an upgrade…). Please include steps to reproduce and your browser/OS for bugs.
By contributing, you agree that your contributions will be licensed under the project's MIT License.