A browser-based monorepo hosting multiple games built with vanilla Canvas 2D,
Three.js, and Phaser 3. Open index.html at the root to reach the game
selection menu.
firstgame/
├── index.html ← Game selection menu (root entry point)
├── styles.css ← Menu styles only
├── README.md
│
├── wave-assault/ ← Wave Assault game (vanilla Canvas 2D)
│ ├── index.html
│ ├── styles.css
│ ├── js/
│ │ ├── audio.js
│ │ ├── config.js
│ │ ├── entities.js
│ │ ├── game.js
│ │ ├── input.js
│ │ ├── main.js
│ │ ├── render-background.js
│ │ ├── render-effects.js
│ │ ├── render-entities.js
│ │ ├── render-sprites.js
│ │ ├── render-theme-dragon.js
│ │ ├── render-theme-pacificrim.js
│ │ ├── render-theme-space.js
│ │ ├── render-theme-unicorn.js
│ │ ├── render.js
│ │ ├── state.js
│ │ ├── ui.js
│ │ └── webcam.js
│ └── tests/
│
└── shared/ ← Code shared across games (future use)
├── js/ ← audio.js, webcam.js, input.js candidates
└── assets/
├── sounds/
└── fonts/
| Game | Folder | Tech | Status |
|---|---|---|---|
| Wave Assault | wave-assault/ |
Vanilla Canvas 2D | Playable |
| 3D Void Runner | (planned) | Three.js | Coming soon |
| Dungeon Crawler | (planned) | Phaser 3 | Coming soon |
- Create a game folder at the repo root, e.g.
my-new-game/. - Add an
index.htmlinside it. Reference game-local assets with relative paths (js/,assets/, etc.). - Import shared utilities from the parent directory where applicable:
<script src="../shared/js/audio.js"></script>
- Add a card to the root
index.htmlinside the.game-gridsection, following the pattern of the Wave Assault card. Change thehreftomy-new-game/index.htmland set the badge class tobadge-playable. - Commit your new folder and the updated root
index.html.
Any static file server works. For example:
# Python 3
python3 -m http.server 8080
# Node (npx)
npx serve .Then open http://localhost:8080 in your browser.