Bandjax is a fitness‐focused web application that encourages friendly competition among groups ("sections"). Each section logs exercises, earns points, and climbs a leaderboard either by total points or average points per member to motivate users to stay active and engaged.
- Framework: Next.js 15.3.2 (App Router, RSC)
- Language: TypeScript, React 19
- UI: Tailwind CSS, shadcn/ui (Radix primitives), Lucide icons, Sonner toasts
- Auth & User Management: Clerk (Next.js SDK)
- Database & ORM: PostgreSQL, Drizzle ORM + drizzle-kit migrations
- Section Leaderboards: Compare groups by total or average scores.
- Exercise Logging: Assign point values per minute/repetition; real‐time score updates.
- User Profiles: Avatar display, section membership lookup.
- Scoring Modes: Toggle between Total Score Mode and Average Score Mode for fair play.
- Section Profiles: Set a bio, profile image, and linked instagram account for each section.
- Node.js ≥18
- PostgreSQL database
- Clerk account (publishable & secret keys)
- Clone & install
git clone https://github.com/your-org/bandjax.git cd bandjax npm install
- Copy & configure env
cp .env.example .env # Fill in NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_SECRET_KEY, DATABASE_URL
- Run migrations
npx drizzle-kit migrate
- Start dev server
npm run dev
- Open http://localhost:3000
- Build
npm run build
- Run migrations against your production database
npx drizzle-kit migrate
- Start
npm start
- Ensure environment variables are set in your host (DATABASE_URL, CLERK keys, etc.)
We love contributions! Please follow these guidelines:
- Fork the repo and create a feature branch
git checkout -b feat/your-feature
- Follow code style:
- Run
npm run lint
- Format with
npm run format
- Run
- Write tests where applicable
- Commit using conventional commits:
feat: add new leaderboard filter fix: correct average score calculation
- Open a Pull Request describing your changes
This project is licensed under the MIT License. See LICENSE for details.