Thanks for wanting to help build Pixl. This repo is a Bun/Turborepo monorepo with five real apps (server, game, landing, dashboard, pixorpheus) - see the README for what each one does before you dive in.
- Fork the repository and clone your fork
bun installfrom the repo root- Copy
.env.example→.envinapps/serverandapps/dashboardand fill in the values you have access to (see README → Environment Variables). If you don't have Supabase/Slack credentials, ask in the Pixl Slack channel - most contributions tolandingorgamedon't need a full backend running - Run the app(s) you're working on:
bun run --cwd apps/<app> dev(see README → Run)
- Default to Bun, not Node/npm/yarn/pnpm, for anything new -
bun <file>,bun test,bun install,bunx <package>. The exception isapps/pixorpheus, which is plain CommonJS Node.js on purpose; don't try to convert it. apps/landingandapps/dashboardrun Next.js 16 with React 19 and Tailwind 4 - recent enough that a lot of training-data knowledge of Next.js is stale. Readnode_modules/next/dist/docs/for the relevant guide before writing Next.js code, and heed any deprecation warnings.apps/gameis a Godot 4 project (GDScript), not a Bun/TypeScript app. Open it with the Godot 4 editor; don't try tobun installorbun runit.- Database migrations live in
apps/server/drizzle/as sequentially numbered raw SQL files (e.g.0047_...sql). Schema changes go throughbun run --cwd apps/server db:generatefirst; hand-written/data-only migrations just take the next free number. Checkgit log/the current highest number right before you add one - this repo has multiple contributors pushing migrations, so numbers can move between when you last pulled and when you're ready to commit. - Shared code across the 4 landing locales (
en/fr/es/pt, underapps/landing/app/[lang]/dictionaries/) must stay index-aligned with anything inShop.tsx/Sidequests.tsxthat references them by position. If you add/remove/reorder an item, do it identically across all 4 dictionaries plus the component - mismatched indices silently show the wrong name/price on the wrong image. - Don't add abstractions, config flags, or "just in case" error handling for things the codebase doesn't already need. Match the existing style in the file you're editing over introducing a new pattern.
- Create a feature branch:
git checkout -b feat/short-description - Make your change, keeping it scoped to what you set out to do
- Test it - run the relevant app and actually exercise the change (a type-check passing isn't the same as the feature working)
- Commit with a clear message describing why, not just what
- Push and open a Pull Request against
main, describing what changed and how you tested it
Open a GitHub issue, or drop it in the Pixl help channel on Slack if you're part of the community already - Pixorpheus (the Slack bot) turns that into a tracked ticket automatically.
If something in the codebase doesn't make sense, it's more likely under-documented than intentionally obscure - ask rather than guessing, either as a GitHub issue or in Slack.