Create custom player boards for your favorite Restoration Games titles — starting with Return to Dark Tower and Thunder Road: Vendetta.
Open the app in your browser — no installation required.
- Live SVG Preview — See your hero board update in real time as you edit
- Vector PDF Export — Download a print-ready PDF powered by jspdf + svg2pdf.js
- Snapshot Export — Copy the board as a PNG to your clipboard; hold for 3 seconds to copy and download simultaneously
- Custom Portraits — Drag-and-drop or click-to-upload with automatic clip-path framing
- Dynamic Virtue System — 0–6 freely assignable virtue slots (Standard, Advantage, or Champion)
- Banner Action — Editable text for the hero's banner action
- Flavor Text — Single textarea with auto-wrapping and live character counter
- Color Theming — 6 preset themes matching official heroes, plus custom base-color and advanced individual color controls
- Community Gallery — Share your heroes with the community and browse others' creations
- Live SVG Preview — See your crew leader board update in real time as you edit
- Vector PDF Export — Download a print-ready PDF
- Custom Portraits — Drag-and-drop or click-to-upload
- Crew Leader Stats — Configure your leader's abilities and attributes
- Community Gallery — Share crew leaders and browse community creations
- Landing Page — Split-screen game selector to choose your creator
- Collapsible Editor — Form sections collapse/expand with persistent state
- Save / Load — Save to JSON files with save-to-same-file support on Chrome/Edge
- Copy / Paste — Copy your creation as JSON to the clipboard, or paste JSON in to load it
- Recent Files — Quick access to your last 5 saved/loaded files
- No Backend Required — Runs entirely in the browser as a static site (gallery uses Firebase free tier)
- Node.js v20 or higher
git clone https://github.com/ChessMess/board-game-creator.git
cd board-game-creator
npm install
npm run devOpen http://localhost:5173 in your browser.
The gallery/auth features use Firebase. Configuration is loaded from Vite environment variables. If these values are not provided, the app still builds and runs, but gallery/share/admin features are disabled.
- Copy
.env.exampleto.env.local - Fill in your Firebase values:
cp .env.example .env.localVITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_DATABASE_URL=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...Security notes:
- Never commit real
.envor.env.localfiles. - Restrict your Firebase API key to expected referrers/APIs in Google Cloud.
- If a key is exposed, rotate it immediately in Google Cloud Console.
If you deploy via .github/workflows/deploy.yml, add these repository secrets so gallery/auth works on the live site:
VITE_FIREBASE_API_KEYVITE_FIREBASE_AUTH_DOMAINVITE_FIREBASE_DATABASE_URLVITE_FIREBASE_PROJECT_IDVITE_FIREBASE_STORAGE_BUCKETVITE_FIREBASE_MESSAGING_SENDER_IDVITE_FIREBASE_APP_ID
npm run buildThe dist/ folder is a self-contained static site. Host it anywhere, or serve it locally with:
npm run previewsrc/
├── main.jsx — Mounts RouterApp
├── RouterApp.jsx — BrowserRouter: / landing, /rtdt, /trv
├── LandingPage.jsx — Split-screen game selector
├── index.css — Shared Tailwind entry
├── shared/ — Cross-game utilities
│ ├── components/
│ ├── hooks/
│ └── utils/
├── rtdt/ — Return to Dark Tower hero board creator
│ ├── App.jsx
│ ├── components/
│ │ ├── HeroBoard.jsx
│ │ └── HeroForm.jsx
│ ├── data/
│ ├── hooks/
│ └── utils/
└── trv/ — Thunder Road: Vendetta crew leader creator
├── App.jsx
├── components/
│ ├── CrewLeaderBoard.jsx
│ └── CrewLeaderForm.jsx
├── data/
├── hooks/
└── utils/
Pull requests welcome! Please read CONTRIBUTING.md for development workflow, code standards, and the release process. Open an issue first to discuss larger changes.

