Thanks for your interest in contributing! This guide covers everything you need to get started.
Follow the Getting Started guide in the README to set up your local environment. Once running, you should have:
- Next.js on http://localhost:3000
- Sanity Studio on http://localhost:3333
This project uses Biome for linting and formatting. The rules are pre-configured — just run:
pnpm format # Auto-format all files
pnpm lint # Lint all filesKey conventions:
- Double quotes, semicolons, 2-space indent
- Trailing commas (ES5 style)
- Import order is auto-sorted by Biome — don't fight it
Strict mode is enabled across all packages. Before submitting a PR, run:
pnpm check-typesIf you change Sanity schemas, regenerate types:
pnpm --filter studio typeWe use Conventional Commits:
feat: add wishlist page
fix: resolve cart quantity sync issue
refactor: simplify product variant selection
docs: update deployment guide
chore: bump dependencies
Keep commit messages concise and focused on the "why" rather than the "what".
-
Branch from
mainusing a descriptive name:feat/wishlist-pagefix/cart-quantity-syncdocs/deployment-guide
-
Keep PRs focused — one feature or fix per PR. Smaller PRs get reviewed faster.
-
Before opening a PR, make sure:
pnpm format:check # Formatting passes pnpm lint # No lint errors pnpm check-types # No type errors pnpm build # Build succeeds
-
Write a clear PR description with:
- What changed and why
- How to test the changes
- Screenshots for UI changes
-
Address review feedback promptly. If a suggestion doesn't apply, explain why.
apps/
web/ → Next.js 16 frontend
studio/ → Sanity Studio v5
packages/
env/ → T3 env validation (Zod)
sanity/ → Client, GROQ queries, live preview, generated types
ui/ → Shadcn + Tailwind v4 primitives
logger/ → Structured logger
typescript-config/ → Shared TypeScript presets
For common extension patterns (page builder blocks, Sanity schemas, Shadcn components), see the Customization section in the README.
Open a GitHub issue with:
- A clear title describing the problem
- Steps to reproduce
- Expected vs. actual behavior
- Environment details (Node version, OS, browser)
- Error messages or screenshots if applicable
If you're unsure about something, open an issue and we'll point you in the right direction.