Roundup Games is a modern web platform for managing games, teams, and events. Built with TanStack Start and deployed on Netlify.
- Framework: TanStack Start (React meta-framework)
- Authentication: Better Auth
- Database: Drizzle ORM with PostgreSQL
- Styling: Tailwind CSS v4 + shadcn/ui
- Build Tool: Vite 7
- Environment Validation: @t3-oss/env-core with Zod
- Testing: Vitest with coverage
- Deployment: Netlify
- Node.js: v20.19.0+ (required for Vite 7)
- pnpm: v10+
- PostgreSQL: Database instance
Environment variables are validated at startup using Zod schemas. Create a .env file in the project root:
# Database (required)
DATABASE_URL=postgresql://user:password@localhost:5432/solstice
# Application (only required in development)
VITE_BASE_URL=http://localhost:5173
# Auth (required for production)
BETTER_AUTH_SECRET=your-secret-key
# OAuth Providers (optional)
DISCORD_CLIENT_ID=your_discord_client_id
DISCORD_CLIENT_SECRET=your_discord_client_secret
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Feature Flags (optional)
VITE_ENABLE_ANALYTICS=false
VITE_ENABLE_SENTRY=false
VITE_POSTHOG_KEY=your_posthog_key
VITE_SENTRY_DSN=your_sentry_dsnEnvironment Validation: The app validates all environment variables at startup and provides clear error messages for missing or invalid values. See src/lib/env.server.ts and src/lib/env.client.ts for the validation schemas.
src/routes/- File-based routing (pages and API endpoints)src/lib/auth/- Better Auth configuration and functionssrc/lib/db/- Drizzle database setup and schemassrc/lib/env.server.ts- Server-side environment validationsrc/lib/env.client.ts- Client-side environment validationsrc/components/ui/- shadcn/ui componentssrc/shared/- Shared utilities and hooks
-
Install dependencies:
pnpm install
-
Set up the database:
pnpm db push
-
Generate auth schemas:
pnpm auth:generate
-
Run the development server:
pnpm dev
- CLAUDE.md - Guidelines for Claude Code AI assistant
- TanStack Start Best Practices - Server functions and type safety patterns
- Database Connections - Connection pooling and usage patterns
- Project Brief - High-level project overview
- Development Backlog - Feature implementation roadmap
pnpm dev- Start development server with Netlify Devpnpm build- Build for productionpnpm start- Start production server
pnpm lint- Run ESLintpnpm check-types- Type checking with TypeScriptpnpm format- Format code with Prettier
pnpm test- Run tests with Vitestpnpm test:ui- Run tests with UIpnpm test:coverage- Run tests with coveragepnpm test:watch- Run tests in watch mode
pnpm db- Run Drizzle Kit database commandspnpm db:generate- Generate database migrationspnpm db:migrate- Run database migrationspnpm db:studio- Open Drizzle Studio
pnpm auth:generate- Generate auth schema from configpnpm auth:secret- Generate new auth secretpnpm ui- Add shadcn/ui componentspnpm deps- Check for dependency updates with taze
Use taze to keep dependencies up to date:
# Check for updates interactively
pnpm dlx taze@latest --interactive --group
# Or use the shortcut
pnpm depsTaze automatically detects your package manager and provides a safe, interactive way to update dependencies.
The application is automatically deployed to Netlify:
- Production: Pushes to
mainbranch trigger production deployments - Preview: Pull requests get automatic preview deployments
GitHub Actions workflows handle:
- Continuous Integration: Linting, type checking, and testing on Node.js 20
- Deploy Previews: Automatic Netlify preview deployments for pull requests
- Code Coverage: Test coverage reports uploaded to Codecov
Configure these secrets in your GitHub repository settings:
DATABASE_URL- PostgreSQL connection string for CI testsVITE_BASE_URL- Base URL for the application (not needed in production - Netlify provides URL automatically)BETTER_AUTH_SECRET- Auth secret key (generate withpnpm auth:secretlocally)NETLIFY_AUTH_TOKEN- Netlify authentication tokenNETLIFY_SITE_ID- Netlify site IDCODECOV_TOKEN- Codecov upload token (optional)DISCORD_CLIENT_ID- GitHub OAuth client IDDISCORD_CLIENT_SECRET- GitHub OAuth client secretGOOGLE_CLIENT_ID- Google OAuth client IDGOOGLE_CLIENT_SECRET- Google OAuth client secret
The Roundup Games platform streamlines management – initially serving Roundup Games and eventually adaptable to other organizations. The platform enables tabletop and board game enthusiasts to connect and organize game sessions and events.
Key Features:
- Member Registration & Management: User accounts, profiles, waivers, and annual memberships
- Team Setup & Roster Management: Team creation, player invitations, and roster management
- Event Creation & Registration: Tournament/league management with team/individual registration
- Payments & Finance: Integration with a payment platform for membership and event fees
- Role-Based Access Control: Admin, Team Lead, and Player permission layers
- Communication & Notifications: Email confirmations and announcements