A modern web application built with Next.js 15, React 19, and TypeScript.
- Runtime: Bun
- Framework: Next.js 15 (App Router)
- Language: TypeScript (strict mode)
- UI: TailwindCSS 4 + shadcn/ui
- ORM: Prisma + PostgreSQL
- Auth: BetterAuth with Google OAuth
- Testing: Vitest (unit) + Playwright (e2e)
- Linting: ESLint + Prettier
- Git Hooks: Husky + lint-staged
- Clone the repository:
git clone https://github.com/your-org/waiters-app.git
cd waiters-app- Install dependencies:
bun install- Set up environment variables:
cp .env.example .envEdit .env with your configuration values.
- Start the database:
docker compose up -d- Generate Prisma client and push schema:
bun run db:generate
bun run db:push- Run the development server:
bun run devOpen http://localhost:3000 in your browser.
| Command | Description |
|---|---|
bun run dev |
Start development server |
bun run build |
Build for production |
bun run start |
Start production server |
bun run lint |
Run ESLint |
bun run lint:fix |
Fix ESLint errors |
bun run format |
Format code with Prettier |
bun run typecheck |
Run TypeScript type checking |
bun run test |
Run unit tests in watch mode |
bun run test:run |
Run unit tests once |
bun run test:coverage |
Run tests with coverage report |
bun run e2e |
Run Playwright e2e tests |
bun run e2e:ui |
Run Playwright with UI |
bun run db:generate |
Generate Prisma client |
bun run db:push |
Push schema to database |
bun run db:studio |
Open Prisma Studio |
bun run db:migrate |
Run database migrations |
| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | Yes |
BETTER_AUTH_SECRET |
Secret for auth encryption | Yes |
BETTER_AUTH_URL |
Base URL for auth | Yes |
GOOGLE_CLIENT_ID |
Google OAuth client ID | Yes |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret | Yes |
NEXT_PUBLIC_APP_URL |
Public app URL | Yes |
.
├── .github/ # GitHub Actions workflows
│ ├── workflows/
│ │ ├── ci.yml # CI pipeline
│ │ └── release.yml # Release automation
│ └── renovate.json # Dependency updates
├── .husky/ # Git hooks
├── e2e/ # Playwright e2e tests
├── prisma/ # Database schema
├── src/
│ ├── app/ # Next.js App Router
│ ├── components/ # React components
│ │ └── ui/ # shadcn/ui components
│ └── lib/ # Utilities and configurations
├── tests/ # Unit tests
└── ...config files
On every PR and push to main, staging, or dev:
- Lint: ESLint + Prettier checks
- Type Check: TypeScript compilation
- Unit Tests: Vitest with 80% coverage threshold
- E2E Tests: Playwright (Chromium)
- Build: Next.js production build
- Code Quality: SonarQube analysis
On push to main:
- Semantic versioning based on commit messages
- Automatic changelog generation
- GitHub release creation
- Coolify deployment trigger
main- Production branchstaging- Pre-production testingdev- Development integration
We use Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentationstyle:Code style (formatting)refactor:Code refactoringtest:Testschore:Maintenance
This project uses Linear for issue tracking with the WAI prefix (e.g., WAI-123).
- Go to Linear Settings > Integrations > GitHub
- Connect your GitHub repository
- Enable auto-link for commits mentioning
WAI-XXX - Enable PR status sync to update Linear issues
Reference issues in commits:
git commit -m "feat: add user dashboard WAI-42"- Go to Google Cloud Console
- Create a new project or select existing
- Enable Google+ API
- Configure OAuth consent screen
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
{YOUR_URL}/api/auth/callback/google
- Create a project in your SonarQube instance
- Generate an access token
- Add
SONAR_TOKENandSONAR_HOST_URLto GitHub secrets
- Connect your repository at Codecov
- Add
CODECOV_TOKENto GitHub secrets
- Create a new application in Coolify
- Connect to your GitHub repository
- Configure environment variables
- Copy the webhook URL to
COOLIFY_WEBHOOK_URLsecret
Private - All rights reserved.