Thanks for your interest in contributing! This guide covers everything you need to get started.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/system-design-game.git - Install dependencies:
npm install - Start infrastructure:
docker-compose up -d - Set up env files:
cp apps/api/.env.example apps/api/.env.local(and fill in values) - Run migrations:
cd apps/api && npx prisma migrate dev && npx prisma db seed - Start dev servers:
cd ../.. && npm run dev
See README.md for the full setup guide.
feat/short-description— new featuresfix/short-description— bug fixessprint/N-feature-name— sprint-scoped work
Use Conventional Commits:
feat(game): add BlankSlotNode pulse animation
fix(auth): resolve Google OAuth callback redirect
docs(readme): update local development setup
- Keep PRs small and focused — one feature or fix per PR
- Fill out the PR template completely
- Ensure all CI checks pass:
typecheck,lint,test - Request a review and address feedback promptly
npm run typecheck # No TypeScript errors
npm run lint # No ESLint errors
npm run test # All tests pass- No
anytypes without an eslint-disable comment explaining why - Import shared types from
@stackdify/shared-types— never redefine locally - Implement both light and dark mode for every UI component
- Wrap animations in
useReducedMotion()for accessibility - Use
@dnd-kit/corefor drag-and-drop — never native HTML5 DnD - Use
cn()(clsx + tailwind-merge) for conditional class names - No
console.login production code — use NestJSLoggeron backend - No hardcoded secrets — everything in
.env.localor AWS Secrets Manager
- Strict mode everywhere (
"strict": true) - Prefer
interfaceovertypefor object shapes - Prefer named exports (except Next.js pages and NestJS modules)
- Server Components by default; add
"use client"only when needed - Memoize
nodeTypesandedgeTypesfor React Flow withuseMemo - Handle loading and error states in every data-fetching component
If you'd like to contribute a new system design problem:
- Add the problem definition to the seed data in
apps/api/prisma/seed.ts - Define requirements with nodes, edges, and answer keys following the format in
docs/problems-catalog.md - Follow the blank count rules:
- EASY: 2 requirements
- MEDIUM: 3 requirements
- HARD: 4 requirements
- Include tests for the graph masking and scoring of your problem
- Check existing issues before opening a new one
- Use the issue template and provide:
- Steps to reproduce
- Expected vs actual behavior
- Browser/environment info
- Screenshots if applicable
Open a GitHub Discussion or ask in issues.