Doomscrolling, except every card is a game you can win.
32 small games in an endless vertical feed. Swipe, play a thirty-second run, level up. No sign-up, works offline.
- Endless feed — swipe, scroll, arrow keys or
Space. One card per flick. - Levels — every game remembers your level and gets harder as you win.
- Combos — win streaks multiply your score, up to ×3.
- Unlocks — 8 games free, 4 more every 250 points.
- Daily challenge — 3 games, the same for everyone, with a streak and a shareable card.
- Offline — installable PWA. Progress lives in your browser, not a server.
The feed renders the deck three times over and keeps you in the middle copy, hopping back a copy once scrolling settles — so it never reaches an end.
Only the visible card and its neighbours are mounted, so at most three games hold timers at once. Starting a run freezes the feed and hands the game your keys and taps.
Games are single files in src/games. Drop one in and it shows up;
delete it and it's gone.
| Area | Tools |
|---|---|
| App | TanStack Start · React · TypeScript |
| Styling | Tailwind CSS |
| Games | Canvas 2D · Web Audio |
| Testing | Vitest |
| Tooling | Vite · Biome |
These instructions will get you a copy of the project up and running on your local machine for development purposes.
To install and run this project you need:
To set up everything on your local machine, follow these steps:
- Clone this repo and then change directory to the
playdeckfolder:
git clone https://github.com/kaushalmeena/playdeck.git
cd playdeck- Install project dependencies using npm:
npm installTo run the project simply run:
npm run devYour app should now be running on localhost:5173.
To run the unit tests:
npm testTo lint and format-check the project:
npm run checkTo create a production build:
npm run buildEvery route is prerendered to static HTML, so nothing needs a server. The
deployable site is dist/client.
Every push to main is tested, built and deployed to GitHub Pages by the
deploy workflow. A project site is served from
/<repo>/, so the workflow builds with BASE_PATH set from the repository
name.
Full documentation is available in the /docs directory.
Contributing a Game:
- Adding a Game — the one-file contract, the run lifecycle, and the kit helpers.
- The Games — all 32 games and how each one scales.
Under the Hood:
- Architecture — the feed, wheel paging, scoring, and what's unit-tested.
Contributions are welcome! If you find a bug or have a feature request, please open an issue first to discuss it. For code changes, fork the repository, create a branch, and open a pull request.
New games are especially welcome — see Adding a Game.
This project is licensed under the MIT License — see the LICENSE file for details.