A full-stack Next.js + PostgreSQL app to help Pathfinder 2E Game Masters track party treasure progress against the rulebook benchmark (table 10-9). The system supports campaigns, variable party size per session, session rewards, and per-user authorization.
This codebase is a portfolio project demonstrating full-stack TypeScript development with a real-world problem domain. The design and implementation are AI-driven, using Claude Code as a collaborative development partner — from architecture decisions through to code generation. The goal is to showcase how thoughtful AI-assisted development can produce clean, well-structured, production-quality software.
- GM-focused treasure progress tracking
- Dynamic per-session party size + level
- Campaign separation — each GM sees only their own campaigns
- Easy local dev with Docker
- Test-driven architecture
- Next.js (App Router)
- PostgreSQL + Prisma ORM
- Docker Compose (app + db)
- Auth: NextAuth.js
- TDD: Jest + React Testing Library + Playwright
CONTRIBUTING.mdCODE_OF_CONDUCT.mdBEST_PRACTICES.md.github/workflows/ci.ymldocs/project-structure.md
Two gitignored env files are required before running anything:
.env — used by Prisma CLI tools (migrate, generate, studio):
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/rewardtracking?schema=public"
.env.local — used by the Next.js dev server:
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=<random string — generate with: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))">
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/rewardtracking?schema=public"
.envand.env.localserve different toolchains. Prisma CLI reads.env; Next.js reads.env.local. Both are needed.
- Create
.envand.env.localas above docker compose up --buildnpm installnpx prisma generatenpm run migratenpm run dev
npm run dev # start dev server
npm test # run unit tests
npm run test:e2e # run e2e tests (Playwright)
npm run lint # ESLint
npm run typecheck # TypeScript check
npm run format # Prettier
npm run migrate # run Prisma migrations