- Project description
- Tech stack
- Getting started locally
- Available scripts
- Project scope
- Project status
- License
Badger is a web application (MVP) that replaces legacy Excel and Confluence-based badge tracking with a single system for cataloging badges, submitting badge applications, and building promotion submissions. It focuses on core flows for engineers and administrators: catalog browsing and search, drafting and submitting badge applications, administrative review, promotion building and submission, and basic role-based access via Google Workspace SSO.
See the full Product Requirements Document at /.ai/prd.md.
- Frontend: Astro 5, React 19, TypeScript 5, Tailwind CSS 4, shadcn/ui
- Backend: Supabase (Postgres, auth, SDKs)
- Testing: Vitest (unit/component tests), Playwright (E2E tests)
- AI (optional): Openrouter.ai
- CI/CD & Hosting: GitHub Actions, DigitalOcean (Docker)
- Tooling: pnpm, ESLint, Prettier, Husky, lint-staged
Key package versions (from package.json): astro ^5.14.5, react ^19.2.0, tailwindcss ^4.1.14
- Node.js matching
.nvmrc(v22.14.0). Usenvm:nvm install 22.14.0nvm use 22.14.0
- pnpm (recommended):
npm i -g pnpm - Supabase project (for full backend functionality)
- Google Workspace admin access (for SSO configuration)
- Clone the repository:
git clone <repo-url>cd 10xbadger
- Install dependencies:
pnpm install
- Create environment variables
- The project currently does not include an
.env.example. You will likely need:SUPABASE_URLSUPABASE_ANON_KEY(or service role key)- OIDC / Google SSO client id / secret
- The project currently does not include an
- Install Playwright browsers (for E2E tests):
pnpm exec playwright install chromium
- Run the dev server:
pnpm dev
- Build for production:
pnpm build
- Preview the production build locally:
pnpm preview
Defined in package.json:
pnpm dev— Run the local development server (Astro)pnpm build— Build the production sitepnpm preview— Preview the production build locallypnpm astro— Run the local Astro CLI
pnpm lint— Run ESLint across the repopnpm lint:fix— Run ESLint with--fixpnpm format— Run Prettier to format files
Unit & Component Tests (Vitest)
pnpm test— Run unit and component testspnpm test:watch— Run tests in watch mode (for active development)pnpm test:ui— Open Vitest UI for visual test managementpnpm test:coverage— Run tests with coverage report
End-to-End Tests (Playwright)
pnpm test:e2e— Run E2E testspnpm test:e2e:ui— Run E2E tests with Playwright UI (interactive mode)pnpm test:e2e:debug— Debug E2E tests with step-by-step inspectorpnpm test:e2e:codegen— Generate E2E tests by recording browser interactionspnpm test:e2e:report— View the last E2E test report in browser
All Tests
pnpm test:all— Run all tests (unit, component, and E2E)
- Google Workspace SSO (domain-restricted) for authentication and role-based access
- Badge Catalog (CRUD for admins; active-only search/filter)
- Badge Applications (draft, submit, admin review)
- Promotion Templates & Builder (template validation; reservation of badges)
- Reservation & Concurrency handling (optimistic reservation; HTTP 409 structured errors)
- Admin review workflows for badge applications and promotions
- Logging for auth failures and reservation conflicts
- Mobile application
- File attachments on badge applications
- Notifications (email/in-app)
- Detailed audit/history and change logs
- Bulk approvals
- Comments / social features
- Automatic import/migration tooling from Excel/Confluence
- Fine-grained admin role hierarchy and multi-tenancy
- Status: MVP (requirements defined in
/.ai/prd.md) - What exists in repo:
- Astro-based frontend skeleton with sample components
package.jsonwith dev/build/lint/format scripts/.ai/prd.mdand/.ai/tech-stack.mddocumentation
- Next steps / TODOs:
- Add
.env.exampleand document environment variables - Document Supabase DB setup, migrations, and seed scripts
- Implement Google Workspace SSO setup guide
- Add CI workflow and deployment docs
- Add CONTRIBUTING.md and code of conduct
- Add
This project is licensed under the MIT License — see the LICENSE file for details.