Files
playersedge/README.md
2026-04-07 16:42:17 -04:00

239 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PlayersEdge Athlete Stats Platform
A full-featured PWA for tracking athlete biometric and sports statistics across 5 sports: American Football, Hockey, Baseball, Soccer, and Basketball.
---
## Features
- **5 Sports** with 16 stats each: Football, Hockey, Baseball, Soccer, Basketball
- **Athlete registration** with 4-step form: personal info, biometrics, sport stats, review
- **Multi-sport athletes** one profile, multiple sports
- **Stat Leaders board** top 25/50/100 athletes, sort by any numeric stat
- **Advanced filter/search** filter by any stat, biometric, sport, position, name, city
- **Athlete profiles** biometrics, all sport stats, social media, contact info, profile photo
- **125 seed athletes** (25 per sport, some multi-sport) with realistic fake data
- **PWA installable** iOS & Android home screen install
- **Responsive design** mobile-first with bottom navigation on mobile
- **localStorage persistence** data survives page refresh
- **Dark sports theme** high-contrast dark UI with accent colors
---
## Quick Start (Local Development)
```bash
# Prerequisites: Node.js 18+ installed
node --version # must be 18+
# Install dependencies
npm install
# Start dev server (hot reload, runs on http://localhost:5173)
npm run dev
# Build for production
npm run build
# Preview production build locally (http://localhost:4173)
npm run preview
```
---
## Ubuntu 24.04 LXC Installation
### Prerequisites
- Ubuntu 24.04 LXC container or bare metal
- Root or sudo access
- Ports 80 (and optionally 443) open
### Step 1 Transfer files to your server
**Option A: Git (recommended)**
```bash
# On your server
apt-get install -y git
git clone https://your-repo-url.git /opt/statsphere-src
cd /opt/statsphere-src
```
**Option B: SCP / SFTP**
```bash
# From your local machine
scp -r ./statsphere root@YOUR_SERVER_IP:/tmp/
ssh root@YOUR_SERVER_IP
cp -r /tmp/statsphere /opt/statsphere-src
cd /opt/statsphere-src
```
**Option C: Upload zip**
```bash
apt-get install -y unzip
unzip statsphere.zip -d /opt/statsphere-src
cd /opt/statsphere-src
```
### Step 2 Run the installer
```bash
chmod +x install.sh
sudo bash install.sh
```
The installer will:
1. Update system packages
2. Install Node.js 20 LTS
3. Install npm dependencies
4. Build the production bundle
5. Configure Nginx as a reverse proxy
6. Enable and start Nginx
### Step 3 Access the app
Open your browser to `http://YOUR_LXC_IP`
---
## Manual Installation (Step by Step)
```bash
# 1. Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs nginx
# 2. Navigate to project
cd /path/to/statsphere
# 3. Install dependencies
npm install
# 4. Build
npm run build
# Output goes to ./dist/
# 5. Configure Nginx (see install.sh for full config)
sudo nano /etc/nginx/sites-available/statsphere
# Paste the nginx config from install.sh
sudo ln -s /etc/nginx/sites-available/statsphere /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
```
---
## HTTPS / SSL (Production)
```bash
# Install Certbot
sudo apt-get install -y certbot python3-certbot-nginx
# Update your nginx config server_name with your actual domain first, then:
sudo certbot --nginx -d yourdomain.com
# Auto-renew
sudo systemctl enable certbot.timer
```
---
## Directory Structure
```
statsphere/
├── public/ # Static assets (icons, favicon)
├── src/
│ ├── components/ # Reusable components
│ │ ├── Nav.jsx # Top + bottom navigation
│ │ ├── Avatar.jsx # Profile avatar with initials fallback
│ │ ├── SportBadge.jsx
│ │ └── PWABanner.jsx # PWA install prompt
│ ├── data/
│ │ └── seedData.js # 125 fake athletes + stat definitions
│ ├── hooks/
│ │ └── useStore.jsx # Global state (localStorage)
│ ├── pages/
│ │ ├── Home.jsx # Dashboard
│ │ ├── Leaders.jsx # Stat leaders board
│ │ ├── Filter.jsx # Advanced search
│ │ ├── Athletes.jsx # Athlete list
│ │ ├── AthleteDetail.jsx
│ │ └── Register.jsx # 4-step registration form
│ ├── App.jsx # Routes
│ ├── main.jsx
│ └── index.css # Global styles + design tokens
├── index.html
├── vite.config.js # Build config + PWA plugin
├── package.json
└── install.sh # Ubuntu auto-installer
```
---
## Adding More Sports
Edit `src/data/seedData.js`:
1. Add the sport to `SPORTS`:
```js
lacrosse: { id: 'lacrosse', name: 'Lacrosse', emoji: '🥍', color: '#facc15' },
```
2. Add stat definitions to `SPORT_STATS_DEFS`:
```js
lacrosse: [
{ key: 'position', label: 'Position', type: 'text' },
{ key: 'goals', label: 'Goals', type: 'number' },
// ...
],
```
3. Add positions to the `positions` object in `Register.jsx`.
4. Optionally add seed data generation for the new sport in `seedData.js`.
---
## PWA Installation
### Android (Chrome)
- Visit the app in Chrome
- Tap the "Install" banner that appears, or tap ⋮ → "Add to Home Screen"
### iOS (Safari)
- Visit the app in Safari
- Tap Share → "Add to Home Screen"
### Desktop (Chrome/Edge)
- Click the install icon (⊕) in the address bar
---
## Data Storage
All athlete data is stored in **browser localStorage** under the key `statsphere_users_v1`. Data persists across page reloads but is per-device/per-browser.
To reset to seed data: open the browser console and run:
```js
localStorage.removeItem('statsphere_users_v1'); location.reload();
```
---
## Tech Stack
| Layer | Technology |
|---|---|
| Framework | React 18 |
| Routing | React Router v6 |
| Build | Vite 5 |
| PWA | vite-plugin-pwa + Workbox |
| Icons | Lucide React |
| Web Server | Nginx |
| Styling | Pure CSS (no Tailwind) |
| State | React Context + localStorage |
| Data | In-memory seed + localStorage |
---
## License
MIT