Skip to content
ejsmithPublic

About

Turn-based mobile dice game

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

469 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sucker!

Sucker! is a mobile-first, head-to-head dice game built with Expo and React Native. It uses a familiar five-dice scorecard structure, then adds Sucker Tokens for extra rolls, mulligans, attacks, blocks, and tactical category scratches.

The gameplay source of truth is docs/game-design-spec-v2.md.

Stack

  • Expo SDK 57 with Expo Router and React Compiler
  • React Native and React Native Web
  • TypeScript
  • Supabase for multiplayer state, database migrations, and Edge Functions
  • Exceptionless for native and JavaScript error monitoring
  • Node test runner for game-rule tests
  • Playwright for web E2E coverage

Local Setup

Install dependencies:

npm install

Copy the example environment file when working with multiplayer:

cp .env.example .env

Set these values in .env for a Supabase-backed session:

EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
EXPO_PUBLIC_EXCEPTIONLESS_API_KEY=your-exceptionless-project-key

Without Supabase configuration, the app can still run the local demo game.

For the GitHub Pages deployment, add these repository variables before running the deploy workflow:

  • EXPO_PUBLIC_SUPABASE_URL
  • EXPO_PUBLIC_SUPABASE_ANON_KEY

The Pages workflow publishes play.sucker.games through dist/CNAME.

Run The App

Start the Expo dev server:

npm start

Run the web build locally:

npm run web -- --port 8081

Platform shortcuts:

npm run ios
npm run android

Validation

Core checks:

npm run typecheck
npm run test

Supabase Edge Function checks:

npm run typecheck:edge
npm run test:edge

Web E2E checks:

npm run test:e2e:web

Formatting and linting:

npm run lint
npm run format:check

Production web budget:

npm run build:web
npm run check:bundle-size

See docs/release-quality.md for native builds, device smoke tests, accessibility, performance profiling, Exceptionless verification, offline recovery, and staged updates.

Useful Scripts

Computer strategy simulations:

npm run simulate:computer
npm run tournament:computer
npm run tournament:sucker-tokens

Supabase integration test setup:

npm run prepare:e2e-env
npm run test:integration:supabase

Project Layout

Gameplay Notes

  • Two players per game
  • One active turn at a time
  • Five dice, up to four standard rolls per turn
  • Sucker Tokens power extra rolls, mulligans, and chance-based Sucker Punch attempts
  • Scratching a category awards one token
  • Suckers do not award tokens

See the design spec for complete rules and balancing details.

License

Sucker! is licensed under the MIT License.

About

Turn-based mobile dice game

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages