Thanks for your interest in contributing! StackOverkill.io is a personal project, but contributions are welcome.
- Node.js 20+
- pnpm 9+
- Docker (optional, for production builds)
# Clone the repo
git clone https://github.com/Rwx-G/StackOverkill.io.git
cd StackOverkill.io
# Install dependencies
pnpm install
# Build the shared package
pnpm --filter @stackoverkill/shared build
# Start development servers
pnpm devThis starts:
- Frontend (Next.js): http://localhost:3000
- Backend (Express): http://localhost:3001
Open an issue with:
- A clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Browser/OS information if relevant
Open an issue with the enhancement label. Describe:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes
- Run checks:
pnpm lint pnpm test pnpm --filter @stackoverkill/shared build pnpm --filter @stackoverkill/frontend exec tsc --noEmit pnpm --filter @stackoverkill/backend exec tsc --noEmit
- Commit with a descriptive message (see below)
- Push and open a Pull Request
Follow Conventional Commits:
feat: add new quiz question about backup strategy
fix: correct score calculation for hybrid hosting
docs: update API endpoint documentation
style: fix button alignment on mobile
refactor: extract scoring logic into shared package
test: add unit tests for verdict calculation
StackOverkill/
├── apps/
│ ├── frontend/ # Next.js app (UI, quiz, results)
│ └── backend/ # Express API (scoring, leaderboard, OG images)
├── packages/
│ └── shared/ # Shared TypeScript types & scoring logic
├── docker/ # Dockerfiles for production builds
├── deploy/ # Deployment scripts
└── docs/ # Project documentation
- TypeScript everywhere
- Prettier for formatting (config in
.prettierrc) - ESLint for linting (config in
.eslintrc.js) - Run
pnpm formatto auto-format before committing
The app supports 5 languages: EN, FR, DE, IT, ES. Translation files are in apps/frontend/messages/.
When adding user-facing text:
- Add the key to all 5 language files
- Use the
useTranslationshook:const { t } = useTranslations()
By contributing, you agree that your contributions will be licensed under the project's Source Available License. See the license file for details.
Open an issue or reach out at contact@rwx-g.fr.