A modern pickleball league management system for organizing game days, tracking matches, and maintaining player leaderboards.
- Game Day Management: Create and manage multiple game days throughout the season
- Smart Match Generation: Automated draw system with skill-based grouping
- Round-by-Round Play: Generate subsequent rounds based on previous results
- Live Scoring: Real-time match score tracking
- Leaderboards: View rankings for individual game days and overall season
- Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
Frontend:
- React 18
- Vite
- React Router
- Tailwind CSS
Backend:
- Node.js
- Express
- In-memory data store
- Node.js 18+
- npm or yarn
- Clone the repository
git clone https://github.com/MichaelJohnsonAgile/matchplay.git
cd matchplay- Start the Backend
cd backend
npm install
npm startBackend runs on http://localhost:3001
- Start the Frontend (in a new terminal)
cd frontend
npm install
npm run devFrontend runs on http://localhost:5173
- Open your browser
Navigate to
http://localhost:5173
See DEPLOYMENT_GUIDE.md for detailed instructions on deploying to Render.com (free tier).
Live Demo: Coming soon after deployment!
matchplay/
├── backend/
│ ├── data/ # Data storage layer
│ ├── routes/ # API routes
│ ├── server.js # Express server
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API service layer
│ │ └── utils/ # Utility functions
│ ├── index.html
│ └── package.json
└── README.md
- Navigate to Dashboard
- Click "Create Game Day"
- Select date and configure settings
- Add participating athletes
- Open a game day
- Go to "Athletes" tab and add players
- Click "Generate Draw" to create Round 1 matches
- Use "Generate Next Round" after completing rounds
- Navigate to "Matches" tab
- Click on a match
- Enter scores for both teams
- Save to update leaderboard automatically
- Allocation Rules - Match draw algorithm details
- Round Generation - Multi-round system overview
- Updates Summary - Recent changes and improvements
- Deployment Guide - Hosting instructions
GET /api/gamedays- List all game daysPOST /api/gamedays- Create game dayGET /api/gamedays/:id- Get game day detailsPOST /api/gamedays/:id/generate-draw- Generate initial drawPOST /api/gamedays/:id/generate-next-round- Generate next round
GET /api/athletes- List all athletesPOST /api/athletes- Create athleteGET /api/gamedays/:id/athletes- Get game day athletes
GET /api/gamedays/:id/matches- Get game day matchesPUT /api/matches/:id/score- Update match score
GET /api/leaderboard- Overall season leaderboardGET /api/gamedays/:id/leaderboard- Game day leaderboard
cd backend
node test-draw.jsFrontend (.env):
VITE_API_URL=http://localhost:3001
Backend (.env):
PORT=3001
This is a personal project, but suggestions and feedback are welcome!
MIT License - feel free to use this for your own pickleball league!
For issues or questions, please open a GitHub issue.
Made with ❤️ for the pickleball community