a standard deck of 52 playing cards can be arranged in 52! (52 factorial) different ways:
52!
= 52 x 51 x 50 x ... x 3 x 2 x 1
= 8.0658 × 10^67
if every person on Earth generated a trillion shuffles per second since the beginning of the universe, we would have explored only a tiny fraction of all possible arrangements
'unique shuffle' is an online card shuffling game with achievements, pattern detection and social features
https://unique-shuffle.netlify.app
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- randomly shuffle a virtual deck
- pattern detection and highlighting
- achievements
- shuffle saving
- shuffle sharing
- global leaderboard
- add a friend
welcome! just create an issue
- Node.js 18+ and npm/yarn/pnpm
- Supabase account for backend services
- PostHog account for analytics (optional)
- next.js 14 with router and react 18
- react context + hooks, server actions
- tailwind CSS, shadcn/ui
- framer motion
- posthog for event tracking and analysis
- next.js API Routes, server components
- postgresql via supabase
- supabase auth
- supabase storage
- netlify for deployment and functions
welcome!
unique-shuffle/
├── public/ # Static assets and images
├── src/
│ ├── app/ # Next.js App Router pages and layouts
│ │ ├── api/ # API routes and serverless functions
│ │ ├── auth/ # Authentication-related pages
│ │ ├── dashboard/ # User dashboard components
│ │ └── shuffle/ # Shuffle generation and display
│ ├── components/ # Reusable UI components
│ │ ├── ui/ # Base UI components (shadcn)
│ │ ├── cards/ # Card rendering components
│ │ └── layout/ # Layout components
│ ├── lib/ # Core utilities and services
│ │ ├── supabase/ # Supabase client and helpers
│ │ ├── analytics/ # PostHog integration
│ │ └── utils/ # Shared utility functions
│ ├── migrations/ # Database migration scripts
│ └── types/ # TypeScript type definitions
├── .env.example # Example environment variables
├── package.json # Project dependencies and scripts
└── README.md # Project documentation