| Index | Description |
|---|---|
| Overview | See the motivation behind this project |
| Description | Learn more about the problem, implemented solution and challenges faced |
| Deployment Guide | How to install and deploy Diving Analytics Platform |
| How to Use | Instructions to use Diving Analytics Platform |
| Technical Architecture | Detailed technical implementation and architecture |
| Lessons Learned | Limitations, lessons learned and next steps which can be taken |
| Bill Of Materials | Cost of deployment |
| Credits | Meet the team behind this |
| License | License details |
| Disclaimers | Disclaimers information. |
The Diving Analytics Platform is an AI-powered solution designed to automate the time-consuming process of analyzing diving training data. By leveraging modern large language models (LLMs), the platform extracts and converts unstructured training notes into structured, actionable data.
This project was initiated in response to a real-world challenge faced by the University of Pittsburgh’s diving team. Coaches and athletes were spending countless hours manually reviewing training session logs and then recording performance metrics in spreadsheets. To streamline this process, we developed a cloud-native application that integrates AWS services with modern AI capabilities.
The result is a powerful platform that delivers deep insights into diving performance trends, and training progress, empowering coaches and athletes to focus more on performance improvement and less on data entry.
demo.mp4
For Pitt’s diving team, training performance was initially recorded on paper during each session. After practice, the coach would spend hours manually transferring this data into a spreadsheet to track progress, which is an inefficient and repetitive process. Analyzing long-term performance trends was also challenging, as spreadsheets offered limited tools for comparing historical results across weeks or months. This time-intensive workflow also delayed feedback and relied heavily on subjective scoring. An automated, AI-powered system would eliminate the need for manual entry, improve data accuracy, and unlock more consistent, real-time insights for both coaches and athletes.
The Diving Analytics Platform addresses the challenges of traditional diving analysis through a comprehensive, AI-powered solution built on AWS cloud infrastructure. Our approach combines cutting-edge AI capabilities with modern web technologies to deliver an intuitive, scalable platform for diving performance analysis.
Serverless AI Processing Pipeline: We implemented a two-stage AI analysis system using Amazon Bedrock Data Automation for text extraction from diving scoresheets and images, followed by Large Language Models to process the extracted data into structured, diving-specific insights. This serverless approach ensures automatic scaling and cost-effectiveness while providing real-time analysis capabilities.
Event-Driven Architecture: The platform uses an event-driven design where file uploads to S3 automatically trigger Lambda functions for processing, eliminating manual intervention. This architecture includes dedicated microservices for diver profile management, training data analysis, competition data import, and real-time status tracking, all built using AWS CDK for reproducible infrastructure deployment.
Modern Web Interface: Built with React and TypeScript, the frontend provides a responsive interface that simplifies the analysis workflow to three steps: upload diving content, automatic AI processing, and review of insights. The platform integrates with Amazon Cognito for secure authentication and uses DynamoDB for scalable data storage with optimized querying patterns for diving analytics use cases.
The platform processes training scoresheets like the one shown below. Coaches can upload images of these paper-based training logs, and the AI system automatically extracts diving performance data, and metrics for digital analysis.
The Diving Analytics Platform provides the following core capabilities:
- Image Upload: Secure upload of training sheet image for analysis
- AI-Powered Analysis: Analysis using Amazon Bedrock Data Automation and Amazon Bedrock LLMs
- Performance Metrics: Detailed scoring and performance indicators
- Diver Profiles: Comprehensive athlete profiles with historical training and competition data
- Competition Data: Import and analyze competition results
- Dashboard Analytics: Visual representation of performance trends
- Real-time Processing: Live analysis status
Amazon Web Services:
- AWS CDK - Infrastructure as Code
- Amazon Bedrock - AI/ML Analysis
- AWS Lambda - Serverless Functions
- Amazon DynamoDB - NoSQL Database
- Amazon S3 - Object Storage
- AWS Amplify - Frontend Hosting
- Amazon Cognito - Auth
- Amazon Eventbridge - Automated lambda execution
- Amazon API Gateway - REST API Management
Frontend Technologies:
- React - User Interface Framework
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS Framework
- Recharts - Data Visualization
- React Query - Data Fetching & State Management
- React Router - Client-side Routing
Development Tools:
Navigate to your deployed Amplify URL (provided in the deployment outputs):
https://main.<app-id>.amplifyapp.com
- Enter your registered email and password
- Click "Sign In" to access the dashboard
The main dashboard provides:
- Overview Cards: Quick stats on total dives, and average scores.
- Performance Charts: Visual representation of diving performance over time
- Quick Actions: View profiles, or access training logs
- Navigate to the "Dive Log" section
- Select training scoresheet images from your device
- Click "Upload" to start the analysis process
- Processing: AI analysis begins automatically after upload
- Status Tracking: Monitor analysis progress in real-time
- Results: View and edit extracted data from the uploaded image
- Navigate to "Divers" section
- Select a diver from the list
- View comprehensive profile including:
- Personal information
- Competition performance history, which can be filtered by dive code and boards
- Competition results
- Navigate to "Divers" section
- Select a diver from the list
- Click on training tab
- View training data including:
- Number of training sessions
- Total Dives
- Average success rate
- Access "Dive Log" section
- View a list of all training sessions with "Awaiting Review" and "Recently Confirmed Logs"
- Click on any picture
- Export data for external analysis
- Review AI analysis results
- Approve or modify automated assessments
- Add manual notes and observations
Before deploying the Diving Analytics Platform, ensure you have the following installed:
- Node.js (v18 or later) - Download here
- AWS CLI - Installation guide
- AWS CDK - Install globally:
npm install -g aws-cdk - Git - Download here
-
Configure AWS CLI:
aws configure
Enter your AWS Access Key ID, Secret Access Key, default region, and output format.
-
Bootstrap CDK (first-time only):
cdk bootstrap
-
Clone the repository:
git clone https://github.com/pitt-cic/diving-analytics-platform.git cd diving-analytics-platform -
Install backend dependencies:
cd backend npm install -
Build the project:
npm run build
-
Deploy the backend infrastructure:
Interactive Deployment Script (Recommended)
# Run the interactive deployment script ./deploy-backend.shThis script will:
- Check all prerequisites and detect the correct directory
- Prompt you for the team number with validation
- Show deployment confirmation with AWS account details
- Install dependencies and build automatically
- Deploy all stacks and provide detailed status updates
Manual CDK Commands
# Deploy with a specific team number (required) npx cdk deploy --all --context teamNumber=<your_team_number_here> # Or deploy individual stacks npx cdk deploy DivingAnalyticsBackendStack --context teamNumber=<your_team_number_here> npx cdk deploy DivingAnalyticsFrontendStack
Note: A team number is required for deployment. The system will not work without a valid team number from the DiveMeets system.
-
Note the outputs: After deployment, note the API Gateway URL and other outputs for frontend configuration.
- Deploy using the provided script:
cd .. ./deploy-frontend.sh
The deployment script will:
- Automatically detect your Amplify App ID from CloudFormation outputs
- Create a deployment package from your build files
- Upload and deploy to AWS Amplify
- Monitor deployment status until completion
- Get Amplify App ID from AWS Console or CloudFormation outputs
- Create deployment:
aws amplify create-deployment --app-id <APP_ID> --branch-name main
- Upload build files using the provided upload URL
- Start deployment:
aws amplify start-deployment --app-id <APP_ID> --branch-name main --job-id <JOB_ID>
The platform is configured to import competition data for a specific diving team. A team number is required for the system to function properly.
- Visit DiveMeets System
- Search for your team and navigate to the team's profile page
- The team number appears in the URL:
profilet.php?number=XXXX - Use this number (XXXX) for configuration
Method 1: Interactive Deployment Script (Recommended)
cd backend
./deploy-backend.shThis script provides a guided deployment experience with team number validation and confirmation.
Method 2: Deploy-time Configuration
# Deploy with a specific team number (required)
npx cdk deploy --context teamNumber=<your_team_number_here>
# Deploy all stacks with team number
npx cdk deploy --all --context teamNumber=<your_team_number_here>The system validates that the team number is numeric and will log which team number is being used during execution. Check CloudWatch logs for confirmation:
Starting diving data extraction for team number: <your_team_number>
-
Frontend Environment Variables: Create a
.envfile in the frontend directory:REACT_APP_API_ENDPOINT=<API_GATEWAY_URL> REACT_APP_AWS_REGION=<YOUR_AWS_REGION> REACT_APP_USER_POOL_ID=<COGNITO_USER_POOL_ID> REACT_APP_USER_POOL_CLIENT_ID=<COGNITO_CLIENT_ID> REACT_APP_IDENTITY_POOL_ID=<COGNITO_IDENTITY_POOL_ID> REACT_APP_INPUT_BUCKET_NAME=<YOUR_INPUT_BUCKET_NAME>
-
Backend Environment Variables: Environment variables are automatically configured through CDK deployment.
npm run build- Compile TypeScript codenpm run watch- Watch for changes and compilenpm run test- Run unit testsnpx cdk deploy --context teamNumber=<your_team_number_here>- Deploy stack with team number (required)npx cdk deploy --all --context teamNumber=<your_team_number_here>- Deploy all stacks with team numbernpx cdk diff- Compare deployed stack with current statenpx cdk synth- Emit the synthesized CloudFormation templatenpx cdk destroy- Remove the deployed stack
Problem: No divers found or incorrect team data
- Solution: Verify the team number is correct by visiting the MeetControl website
- Check: Ensure the team number is numeric (no letters or special characters)
- Verify: Check CloudWatch logs for the message "Starting diving data extraction for team number: XXXX"
Problem: Lambda function fails with team number error
- Solution: The team number must be numeric and is required. Ensure TEAM_NUMBER environment variable is set
- Check: Review the error message in CloudWatch logs for specific validation failures
Problem: Deployment fails with "Team number is required" error
- Solution: Provide team number during deployment:
npx cdk deploy --context teamNumber=<your_team_number_here> - Alternative: Use the deployment script:
./deploy-backend.sh
Problem: Script shows "Permission denied" error
- Solution: Make the script executable:
chmod +x deploy-backend.sh
Problem: Script fails with "command not found" errors
- Solution: Ensure prerequisites are installed:
- Node.js:
node --version - AWS CLI:
aws --version - CDK:
cdk --version
- Node.js:
Problem: Script fails with AWS credential errors
- Solution: Configure AWS credentials:
aws configure - Verify: Test with
aws sts get-caller-identity
Problem: Script fails to find correct directory
- Solution: The script can run from either the backend directory (
cd backend) or the parent directory containing the backend folder
The backend is built using AWS CDK with TypeScript, providing:
Core Stacks:
DivingAnalyticsBackendStack: Main application infrastructureDivingAnalyticsFrontendStack: Frontend hosting and authentication
RESTful API design with secure, Cognito-authorized endpoints (examples):
GET /divers- List all diversGET /divers/{id}- Get diver profileGET /divers/{id}/training- Get training dataPOST /training- Upload training dataPUT /training/{id}- Update training dataDELETE /training/{id}- Delete training data
src/
├── components/
│ ├── layout/ # Layout (Header, Sidebar, AppLayout)
│ ├── divers/ # Diver views (SideNav, DiverProfile, etc.)
│ └── divelog/ # Dive log UI (modals, sections)
├── pages/ # Pages (Dashboard, Divers, DiveLog, Auth)
├── services/ # API and storage helpers
├── hooks/ # React Query/data hooks
├── types/ # TypeScript type definitions
└── config.ts, aws-config.ts
- React Query: Server state management and caching
- React Context: Global application state
- Local State: Component-specific state with React hooks
- AWS Cognito handles user authentication
- JWT tokens are automatically managed
- Protected routes ensure authenticated access
The platform leverages Bedrock's Data Automation capabilities for:
Analysis Pipeline:
- Input Processing: Images uploaded to S3
- AI Analysis: Bedrock processes content for diving metrics
- Result Generation: Structured data output with scores and insights
- Storage: Results stored in DynamoDB for quick retrieval
Analysis Capabilities:
- Form and technique assessment
- Scoring based on diving standards
- Comparative analysis with historical data
- Improvement recommendations
To be updated
To be updated
Diving Analytics Platform is an open source project developed by the University of Pittsburgh Health Sciences and Sports Analytics Cloud Innovation Center.
Development Team:
Project Leadership:
- Technical Lead: Maciej Zukowski
- Program Manager: Richard Turnquist and Kate Ulreich
Special Thanks:
- Katie Kasprzak - Head Coach, Pitt Diving
- Darren Kraker - Sr Solutions Architect, Cal Poly Digital Transformation Hub
This project is designed and developed with guidance and support from the Health Sciences and Sports Analytics Cloud Innovation Center, Powered by AWS.
For questions, issues, or contributions, please visit our GitHub repository or contact the development team.
This project is distributed under the MIT License.
MIT License
Copyright (c) 2025 University of Pittsburgh Health Sciences and Sports Analytics Cloud Innovation Center
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Customers are responsible for making their own independent assessment of the information in this document.
This document:
(a) is for informational purposes only,
(b) references AWS product offerings and practices, which are subject to change without notice,
(c) does not create any commitments or assurances from AWS and its affiliates, suppliers or licensors. AWS products or services are provided "as is" without warranties, representations, or conditions of any kind, whether express or implied. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers, and
(d) is not to be considered a recommendation or viewpoint of AWS.
Additionally, you are solely responsible for testing, security and optimizing all code and assets on GitHub repo, and all such code and assets should be considered:
(a) as-is and without warranties or representations of any kind,
(b) not suitable for production environments, or on production or other critical data, and
(c) to include shortcuts in order to support rapid prototyping such as, but not limited to, relaxed authentication and authorization and a lack of strict adherence to security best practices.
All work produced is open source. More information can be found in the GitHub repo.

