A web application to manage and track Kill Team leagues, pods, and match scores. It provides features for user registration, authentication, score submissions, leaderboards, and player statistics.
- User Management: Registration, login, profile management, admin approval.
- Leagues: Create and manage multiple leagues, mark current active league.
- Pods: Create, update, and delete pods (groups of players) tied to specific leagues, with expiration handling.
- Score Submission: Submit match results with detailed operation stats and kill team choices.
- Leaderboards: Dynamic league leaderboards ranking players by wins, total operations, and losses.
- Pod Standings: View per-pod standings sorted by wins and total operations.
- Player Profiles: View individual player stats, contact info, and preferred stores.
- Admin UI: Access to create leagues/pods, update scores, and manage content.
- Backend: Node.js, Express, MongoDB, Mongoose, JWT for auth
- Frontend: React, Tailwind CSS, Axios for API calls
server/ # Express API server
└── models/ # Mongoose schemas (User, Score, Pod, League)
└── routes/ # API routes (auth, scores, pods, leagues, etc.)
└── middleware/ # Authentication middleware
└── db/ # Database connection setup
└── index.js # Server bootstrap
client/ # React front-end
└── src/
└── components/ # Shared UI components
└── pages/ # Route components (PodsPage, LeaderboardPage, SubmitScorePage, ApplyPage, PlayerStatsPage)
└── hooks/ # Custom React hooks (useLeaguePods)
└── apiClient.js # Axios instance configuration
└── constants/ # App constants (killTeams, etc.)
└── App.js # React Router setup
README.md # This file
- Node.js (v16+)
- npm or Yarn
- MongoDB instance (local or cloud)
-
Navigate to the server folder:
cd server -
Install dependencies:
npm install
-
Create a
.env.development(or.env.production) file with:MONGO_URI=<your_mongo_connection_string> JWT_SECRET=<your_jwt_secret> ALLOWED_ORIGINS=http://localhost:3000
-
Start development server:
npm run dev
-
Navigate to the client folder:
cd client -
Install dependencies:
npm install
-
Create a
.envfile with (optional for custom API URL):REACT_APP_API_URL=http://localhost:5000
-
Start React development server:
npm start
POST /api/auth/apply- Submit application (username, email, full name, password)POST /api/auth/login- Login and receive JWT
GET /api/leagues- List all leaguesGET /api/leagues/current- Get the active leaguePOST /api/leagues- Create or switch current league (admin)
GET /api/pods?league=<slug>&showExpired=true|false- List pods in leaguePOST /api/pods/create-pod- Create a pod (admin)PUT /api/pods/admin/pod/:id- Update pod (admin)DELETE /api/pods/admin/pod/:id?league=<slug>- Delete pod (admin)
POST /api/scores/submit-score- Submit a match scoreGET /api/scores/leaderboard- Fetch league leaderboardGET /api/scores/pod-player-stats- Fetch pod standings
GET /api/user/:username- Fetch player profile and stats
- ApplyPage: User application form with validation
- SubmitScorePage: Submit match scores to a selected pod
- PodsPage: Manage leagues and pods, view pod standings
- LeaderboardPage: League leaderboard display
- PlayerStatsPage: Individual player profile & stats
- Fork the repository
- Create a feature branch (
git checkout -b feature/xyz) - Commit your changes (
git commit -m "Add feature xyz") - Push to the branch (
git push origin feature/xyz) - Open a Pull Request
MIT License
Enjoy tracking your Kill Team leagues and may the best commander win!