Administrative interface for golf tournament management, designed to complement the BHMC React frontend and Django backend. This monorepo implements the admin service and admins service in the following diagram:
architecture-beta
group do[Digital Ocean]
service admin(server)[NodeJs] in do
service api(server)[Django] in do
service db(database)[MySQL] in do
group web[UI]
service users(internet)[React Users] in web
service admins(internet)[Next Admins] in web
service stripe(cloud)[Stripe]
service storage(disk)[Amazon S3]
service email(cloud)[Mailgun]
admin:R -- L:db
api:R -- L:db
users:L -- R:api
admins:L -- R:admin
- Tournament Management: Full event lifecycle, tee time calculations, group assignments, hole-based starts
- Player Registration: Automated slots, fee tracking, Golf Genius sync
- Golf Genius Integration: Bidirectional sync for events, rosters, scores, and results
- Scoring & Results: Scorecard management, automated results import, multi-format reporting
- Admin Dashboard: Authenticated interface for all tournament operations, audit logging
- Reporting & Analytics: Tournament reports, player stats, Excel export
- Node.js 20+, pnpm@10+, TurboRepo
- API: NestJS, Drizzle ORM (MySQL, containerized via Docker), Zod, Axios, RxJS, ExcelJS
- Web: Next.js (App Router, TypeScript), better-auth, Tailwind CSS v4, daisyUI 5, @tanstack/react-table
- Shared Types: TypeScript domain package for DTOs and interfaces
- Testing: Jest, ESLint, Prettier (zero errors)
pnpm install
pnpm docker:up # Start MySQL/SQLite containers
pnpm dev # Run both apps (API & Web)
pnpm lint # Lint all code
pnpm test # Run all tests- API:
apps/api(NestJS, MySQL) - Web:
apps/web(Next.js, SQLite for auth)
- API health:
GET /health - Web health:
GET /health - Auth: better-auth (see
.env.examplein each app) - Reports: Excel export via admin dashboard
- Strict TypeScript, no
anytypes in production - Domain-driven design, shared DTOs/interfaces
- Module boundaries enforced via barrel exports
- ESLint/Prettier: zero errors, consistent formatting
- Dockerized databases for dev parity