Welcome to the P2P-Web project! This full-stack web application is designed to scrape, process, and visualize over 15 years of open-water swim data. The goal is to provide interactive and insightful visualizations for swimmers, enabling them to analyze trends, track performance, and explore historical race data. 🌊📈
Here's how the project is organized:
p2p-web/
├── 📂 p2p-backend/
│ ├── 📂 app/
│ │ ├── routes/ # API endpoints
│ │ ├── services/ # Core business logic
│ │ ├── graph_building/ # Data processing & visualization logic
│ │ ├── app.py # Flask entry point
│ │ ├── __init__.py # App initialization
│ ├── Dockerfile # Backend containerization
│ ├── run.py # Backend application entry script
│ ├── requirements.txt # Python dependencies
│
├── 📂 p2p-frontend/
│ ├── 📂 src/ # React frontend source files
│ ├── public/ # Static assets
│ ├── package.json # Frontend dependencies
│ ├── Dockerfile # Frontend containerization
│ ├── nginx.conf # NGINX config for serving frontend
│
├── docker-compose.yaml # Container orchestration for local development
├── .github/workflows/ # CI/CD pipelines
├── .gitignore # Ignored files like `.env` and pycache
├── README.md # Project overview (You're here!)
- Data Collection → Scrapes and processes 15+ years of open-water swim race results.
- Visualization → Displays interactive graphs of participation, performance trends, and historical rankings.
- User Customization → Allows users to explore swim statistics and filter data.
- Flask API (Backend) → Processes data and serves JSON responses for visualization.
- React Frontend → Provides an interactive UI for users to explore swim data.
- Cloud Run Deployment → Automatically scales with usage for cost efficiency.
- GitHub Actions → Automates building, testing, and deploying Docker images.
- Dockerized Services → Ensures smooth local and cloud-based execution.
- Race Participation Over Time → Track how participation numbers have changed over the years.
- Average & Fastest Swim Times → Analyze trends in race times.
- Performance Comparisons → Compare swimmers based on age, gender, or other criteria.
- Stateless Microservice Architecture → Designed to run efficiently on Google Cloud Run.
- Containerized Deployment → Backend and frontend are Dockerized for smooth deployment.
- CI/CD Pipeline → Uses GitHub Actions to build, push, and deploy the backend and frontend.
- Automated Cloud Run Deployment → Seamlessly updates live service.
- 🏊 Swim Community → For inspiring this project.
- 📊 Plotly & Pandas → For enabling advanced visualizations.
- ☁️ Google Cloud → For scalable deployment options.
Feel free to contribute, report bugs, or suggest new features! 🚀