exquisite.monster is a digital adaptation of the popular party game "Eat Poop You Cat" (also known as Telephone Pictionary). It is a multiplayer game where a concept mutates as turns alternate between the drawing of a caption and the captioning of a drawing.
- Multiplayer Gameplay: Play with strangers in a turn-based format.
- Party Mode (Beta): Organize private games with friends.
- Flexible Configuration: Customize turn limits, timeouts, and content settings (e.g., "lewd" mode).
- Rich Interaction: Upload drawings from photos or apps, or (if you must) draw using a built-in canvas.
- Moderation: Community flagging system to keep the environment safe.
- Social: Follow players, mark favorite games, and leave comments.
- Notifications: Real-time alerts via server-sent events for turn updates and game completions.
- Responsive Design: Mobile friendly, of course!
- Framework: SvelteKit
- Language: TypeScript
- Database: PostgreSQL (via Supabase)
- ORM: Prisma
- Authentication: Clerk
- Background Jobs: BullMQ & Redis
- Styling: Tailwind CSS & Flowbite
- Testing: Vitest (Unit & Integration) & Playwright (E2E)
- Node.js (v18+)
- pnpm (or npm)
- Docker (required for local Supabase and Redis)
- Supabase CLI
- A Clerk account for authentication
-
Clone the repository:
git clone https://github.com/JonathanHarford/exquisite.monster.git cd exquisite.monster -
Install dependencies:
npm install
-
Environment Setup: Copy the example environment file:
cp .env.example .env
You will need to fill in the required environment variables in
.env, specifically for Clerk (PUBLIC_CLERK_PUBLISHABLE_KEY,CLERK_SECRET_KEY) and your database and redis connection strings. -
Initialize Database: Apply migrations and seed initial data:
npx prisma migrate dev npx prisma db seed
-
Run the Application: Start the development server:
npm run dev
The application should now be running at
http://localhost:5173.
npm run test:unit
npm run test:integration
npm run test:e2eThis project follows a Clean Architecture pattern:
- Routes (
src/routes/): SvelteKit pages and endpoints. - Use Cases (
src/lib/server/usecases/): Business logic orchestration. - Services (
src/lib/server/services/): Domain-specific operations. - Database (
src/lib/server/database/): Data access abstraction.
Contributions are welcome! Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.


