Add comprehensive project documentation and Docker infrastructure for Paper Dynasty Real-Time Game Engine - a web-based multiplayer baseball simulation platform replacing the legacy Google Sheets system. Documentation Added: - Complete PRD (Product Requirements Document) - Project README with dual development workflows - Implementation guide with 5-phase roadmap - Architecture docs (backend, frontend, database, WebSocket) - CLAUDE.md context files for each major directory Infrastructure Added: - Root docker-compose.yml for full stack orchestration - Dockerfiles for backend and both frontends (multi-stage builds) - .dockerignore files for optimal build context - .env.example with all required configuration - Updated .gitignore for Python, Node, Nuxt, and Docker Project Structure: - backend/ - FastAPI + Socket.io game engine (Python 3.11+) - frontend-sba/ - SBA League Nuxt 3 frontend - frontend-pd/ - PD League Nuxt 3 frontend - .claude/implementation/ - Detailed implementation guides Supports two development workflows: 1. Local dev (recommended): Services run natively with hot-reload 2. Full Docker: One-command stack orchestration for testing/demos Next: Phase 1 implementation (backend/frontend foundations)
287 lines
6.4 KiB
Markdown
287 lines
6.4 KiB
Markdown
# Paper Dynasty Real-Time Game Engine
|
|
|
|
Web-based real-time multiplayer baseball simulation platform replacing the legacy Google Sheets system.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
strat-gameplay-webapp/
|
|
├── backend/ # FastAPI game engine
|
|
├── frontend-sba/ # SBA League Nuxt frontend
|
|
├── frontend-pd/ # PD League Nuxt frontend
|
|
├── .claude/ # Claude AI implementation guides
|
|
├── docker-compose.yml # Full stack orchestration
|
|
└── README.md # This file
|
|
```
|
|
|
|
## Two Development Workflows
|
|
|
|
### Option 1: Local Development (Recommended for Daily Work)
|
|
|
|
**Best for:** Fast hot-reload, quick iteration, debugging
|
|
|
|
**Services:**
|
|
- ✅ Backend runs locally (Python hot-reload)
|
|
- ✅ Frontends run locally (Nuxt hot-reload)
|
|
- ✅ Redis in Docker (lightweight)
|
|
- ✅ PostgreSQL on your existing server
|
|
|
|
**Setup:**
|
|
|
|
1. **Environment Setup**
|
|
```bash
|
|
# Copy environment template
|
|
cp .env.example .env
|
|
# Edit .env with your database credentials and API keys
|
|
```
|
|
|
|
2. **Start Redis** (in one terminal)
|
|
```bash
|
|
cd backend
|
|
docker-compose up
|
|
```
|
|
|
|
3. **Start Backend** (in another terminal)
|
|
```bash
|
|
cd backend
|
|
source venv/bin/activate # or 'venv\Scripts\activate' on Windows
|
|
python -m app.main
|
|
```
|
|
Backend will be available at http://localhost:8000
|
|
|
|
4. **Start SBA Frontend** (in another terminal)
|
|
```bash
|
|
cd frontend-sba
|
|
npm run dev
|
|
```
|
|
SBA frontend will be available at http://localhost:3000
|
|
|
|
5. **Start PD Frontend** (in another terminal)
|
|
```bash
|
|
cd frontend-pd
|
|
npm run dev
|
|
```
|
|
PD frontend will be available at http://localhost:3001
|
|
|
|
**Advantages:**
|
|
- ⚡ Instant hot-reload on code changes
|
|
- 🐛 Easy debugging (native debuggers work)
|
|
- 💨 Fast startup times
|
|
- 🔧 Simple to restart individual services
|
|
|
|
---
|
|
|
|
### Option 2: Full Docker Orchestration
|
|
|
|
**Best for:** Integration testing, demos, production-like environment
|
|
|
|
**Services:**
|
|
- ✅ Everything runs in containers
|
|
- ✅ Consistent environment
|
|
- ✅ One command to start everything
|
|
|
|
**Setup:**
|
|
|
|
1. **Environment Setup**
|
|
```bash
|
|
# Copy environment template
|
|
cp .env.example .env
|
|
# Edit .env with your database credentials and API keys
|
|
```
|
|
|
|
2. **Start Everything**
|
|
```bash
|
|
# From project root
|
|
docker-compose up
|
|
```
|
|
|
|
Or run in background:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
3. **View Logs**
|
|
```bash
|
|
# All services
|
|
docker-compose logs -f
|
|
|
|
# Specific service
|
|
docker-compose logs -f backend
|
|
docker-compose logs -f frontend-sba
|
|
```
|
|
|
|
4. **Stop Everything**
|
|
```bash
|
|
docker-compose down
|
|
```
|
|
|
|
**Advantages:**
|
|
- 🎯 Production-like environment
|
|
- 🚀 One-command startup
|
|
- 🔄 Easy to share with team
|
|
- ✅ CI/CD ready
|
|
|
|
---
|
|
|
|
## Development Commands
|
|
|
|
### Backend
|
|
|
|
```bash
|
|
cd backend
|
|
|
|
# Activate virtual environment
|
|
source venv/bin/activate
|
|
|
|
# Install dependencies
|
|
pip install -r requirements-dev.txt
|
|
|
|
# Run server
|
|
python -m app.main
|
|
|
|
# Run tests
|
|
pytest tests/ -v
|
|
|
|
# Code formatting
|
|
black app/ tests/
|
|
|
|
# Linting
|
|
flake8 app/ tests/
|
|
|
|
# Type checking
|
|
mypy app/
|
|
```
|
|
|
|
### Frontend
|
|
|
|
```bash
|
|
cd frontend-sba # or frontend-pd
|
|
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Run dev server
|
|
npm run dev
|
|
|
|
# Build for production
|
|
npm run build
|
|
|
|
# Preview production build
|
|
npm run preview
|
|
|
|
# Lint
|
|
npm run lint
|
|
|
|
# Type check
|
|
npm run type-check
|
|
```
|
|
|
|
## Database Setup
|
|
|
|
This project uses an existing PostgreSQL server. You need to manually create the database:
|
|
|
|
```sql
|
|
-- On your PostgreSQL server
|
|
CREATE DATABASE paperdynasty_dev;
|
|
CREATE USER paperdynasty WITH PASSWORD 'your-secure-password';
|
|
GRANT ALL PRIVILEGES ON DATABASE paperdynasty_dev TO paperdynasty;
|
|
```
|
|
|
|
Then update `DATABASE_URL` in `.env`:
|
|
```
|
|
DATABASE_URL=postgresql+asyncpg://paperdynasty:your-password@your-db-server:5432/paperdynasty_dev
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
Copy `.env.example` to `.env` and configure:
|
|
|
|
### Required
|
|
- `DATABASE_URL` - PostgreSQL connection string
|
|
- `SECRET_KEY` - Application secret key (at least 32 characters)
|
|
- `DISCORD_CLIENT_ID` - Discord OAuth client ID
|
|
- `DISCORD_CLIENT_SECRET` - Discord OAuth secret
|
|
- `SBA_API_URL` / `SBA_API_KEY` - SBA League API credentials
|
|
- `PD_API_URL` / `PD_API_KEY` - PD League API credentials
|
|
|
|
### Optional
|
|
- `REDIS_URL` - Redis connection (auto-configured in Docker)
|
|
- `CORS_ORIGINS` - Allowed origins (defaults to localhost:3000,3001)
|
|
|
|
## Available Services
|
|
|
|
When running, the following services are available:
|
|
|
|
| Service | URL | Description |
|
|
|---------|-----|-------------|
|
|
| Backend API | http://localhost:8000 | FastAPI REST API |
|
|
| Backend Docs | http://localhost:8000/docs | Interactive API documentation |
|
|
| SBA Frontend | http://localhost:3000 | SBA League web app |
|
|
| PD Frontend | http://localhost:3001 | PD League web app |
|
|
| Redis | localhost:6379 | Cache (not exposed via HTTP) |
|
|
|
|
## Health Checks
|
|
|
|
```bash
|
|
# Backend health
|
|
curl http://localhost:8000/api/health
|
|
|
|
# Or visit in browser
|
|
open http://localhost:8000/api/health
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Backend won't start
|
|
- Check `DATABASE_URL` is correct in `.env`
|
|
- Verify PostgreSQL database exists
|
|
- Ensure Redis is running (`docker-compose up` in backend/)
|
|
- Check logs for specific errors
|
|
|
|
### Frontend won't connect to backend
|
|
- Verify backend is running at http://localhost:8000
|
|
- Check CORS settings in backend `.env`
|
|
- Clear browser cache and cookies
|
|
- Check browser console for errors
|
|
|
|
### Docker containers won't start
|
|
- Ensure `.env` file exists with all required variables
|
|
- Run `docker-compose down` then `docker-compose up` again
|
|
- Check `docker-compose logs` for specific errors
|
|
- Verify no port conflicts (8000, 3000, 3001, 6379)
|
|
|
|
### Database connection fails
|
|
- Verify PostgreSQL server is accessible
|
|
- Check firewall rules allow connection
|
|
- Confirm database and user exist
|
|
- Test connection with `psql` directly
|
|
|
|
## Documentation
|
|
|
|
- **Full PRD**: See `/prd-web-scorecard-1.1.md`
|
|
- **Implementation Guide**: See `.claude/implementation/00-index.md`
|
|
- **Architecture Docs**: See `.claude/implementation/` directory
|
|
|
|
## Tech Stack
|
|
|
|
### Backend
|
|
- **Framework**: FastAPI (Python 3.11+)
|
|
- **WebSocket**: Socket.io
|
|
- **Database**: PostgreSQL 14+ with SQLAlchemy
|
|
- **Cache**: Redis 7
|
|
- **Auth**: Discord OAuth with JWT
|
|
|
|
### Frontend
|
|
- **Framework**: Vue 3 + Nuxt 3
|
|
- **Language**: TypeScript
|
|
- **Styling**: Tailwind CSS
|
|
- **State**: Pinia
|
|
- **WebSocket**: Socket.io-client
|
|
|
|
## Contributing
|
|
|
|
See `.claude/implementation/` for detailed implementation guides and architecture documentation.
|
|
|
|
## License
|
|
|
|
Proprietary - Paper Dynasty League System |