A simple, modular, and extensible web game template based on React, TypeScript, and Vite. Optimized for itch.io and GitHub Pages. This repo is organized for easy reuse and low-maintenance updates.
- Game apps live in
apps/*(demo apps included) - Reusable code lives in
packages/*and shared configs inconfigs/* - Consumers can either manually copy changes or run a tiny sync script (A+ workflow)
- Install deps
npm install- Dev server
npm run dev- Build
npm run build/
├── apps/
│ └── web/ # Main web app (Vite root)
│ ├── public/
│ ├── src/
│ │ ├── games/ # Demo apps (carrot-card-demo, demo-with-backend, portal)
│ │ └── ...
│ └── index.html
├── packages/
│ ├── ui/ # Reusable UI components (ImageLoader, TypewriterText, GameShell, ...)
│ └── services/ # Reusable services (ResourceLoader, ...)
├── scripts/ # Build and helper scripts
│ ├── build-itch.js
│ └── update-from-template.sh
├── sync.manifest # Whitelist for template sync (A+)
├── docs/ # Detailed documentation
├── vite.config.ts # Vite config points to apps/web as root, outputs to /dist
└── tailwind.config.js # Tailwind scans apps and packages
- For teams preferring manual copy, keep doing that.
- Alternatively, use the included script to copy only template-managed files from this repo.
Configure your project (optional):
# .template-source
TEMPLATE_REPO=https://your.host/your-template.git
TEMPLATE_REF=main
MANIFEST_FILE=sync.manifest
Run sync in your project root:
bash scripts/update-from-template.sh- Backs up overwritten files to
.template_backups/<timestamp> - Copies only paths listed in
sync.manifest
- itch.io:
npm run build:itchproduces/dist/*.zip - GitHub Pages:
npm run build:pages && npm run deploy
import.meta.env.BASE_URLis respected;ResourceLoaderuses it to resolve assets.- Tailwind scans
apps/webandpackages/*. - Aliases:
@->apps/web/src@ui->packages/ui/src@services->packages/services/src
See docs/ for details.