This starter is designed for me by me with all the shiny new things! (as of now)
To finish setup, run Replace All to replace startername with name of your project.
Also, make sure to customize .github/instructions/copilot-instructions.md with description of you project
so that agentic tools work efficiently.
- Contract-first development. API endpoints start as shared
zodschemas inpackages/shared, ensuring server and client stay type-safe. - Real-time challenge lifecycle. Hono-based routes expose public and authenticated procedures, backed by MongoDB via Typegoose models.
- Typed React client. The web app consumes the generated oRPC client, TanStack Router, and Query utilities for fully typed data interactions.
- Developer-focused tooling. Node.js 24, pnpm, moonrepo, and Husky hooks enable quick local feedback loops and consistent commits.
- Runtime & Tooling: Node.js 24, pnpm, moonrepo, Commitizen, Husky
- Backend: TypeScript, Hono, oRPC, Typegoose/Mongoose, Better Auth, Zod, Vitest
- Frontend: React 19, Vite, TanStack Stack/Query/Form, Tailwind CSS, Vitest
- Shared Contracts:
@startername/sharedwith oRPC + OpenAPI generation
apps/server– Node.js + Hono API, oRPC routers, Typegoose models, Better Auth setupapps/web– React 19 client, TanStack Router tree, authentication flows, Tailwind configpackages/shared– Contract definitions, shared types, and schema exportsdocs– Product requirements, roadmap, risk registers, and supporting documentationmongo– Docker-managed MongoDB volume (keep uncommitted).moon/– moonrepo configuration filestsconfig*.json– TypeScript project references
- Git ≥ 2.40
- Docker Desktop (required for the MongoDB container)
- Node.js exactly v24 (use nvm or similar)
- pnpm ≥ 10.0.0
Using nvm:
nvm install 24
nvm use 24Or using the .nvmrc file in the repo:
nvm usecorepack enable
corepack prepare pnpm@10.0.0 --activateOr via npm:
npm install -g pnpm@10git clone https://github.com/CatOfJupit3r/startername.git
cd startername
pnpm install- Copy environment templates: duplicate
.env.exampleto.envin bothapps/serverandapps/web. - Start Docker Desktop so MongoDB can launch.
- Boot everything with
pnpm run dev:- Web client:
http://localhost:3030 - API + Better Auth:
http://localhost:5050 - MongoDB starts via
docker compose -f docker-compose.dev.yml up -d
- Web client:
pnpm run dev– start API, web app, and MongoDBpnpm run check-types– TypeScript project references (server + shared)pnpm run lint– ESLint across the monorepopnpm run prettier– formatting audit (no write)pnpm run prepare– reinstall Husky hooks if they go missingpnpm test– run all tests with Vitest
- Create a GitHub issue describing the work.
- Branch off
mainas<issue-number>-<short-slug>(e.g.,42-improve-login-flow). - Stage changes and run
git cz(orpnpm commit) for conventional commits. - Push the branch and open a PR targeting
main; request review from@CatOfJupit3r.
- Husky runs
pnpm exec lint-stagedon commit to format, lint, and type-check staged files. - Re-run failed checks locally with:
pnpm exec lint-staged --no-stash - Typical fixes:
- Missing deps:
pnpm install - Formatting issues:
pnpm run prettierthen re-stage - Lint errors:
pnpm run lint - Type errors:
pnpm run check-types
- Missing deps:
- Keep
pnpm run devactive regularly to refresh seeded Mongo data. - Avoid rebasing on
main; prefer merging. - Use the shared contract utilities (
tanstackRPChelpers, shared schemas) instead of duplicating types or query keys. - When extending the API, register new routes in
apps/server/src/routers/index.tsand add error codes toapps/server/src/enums/errors.ts.