Advanced volleyball serve-receive analytics for coaches and players
Features • Installation • Usage • Technology • Contributing
This repository is for portfolio demonstration purposes only.
- ✅ You MAY: View the code for educational purposes
- ✅ You MAY: Reference techniques and approaches in your own work
- ❌ You MAY NOT: Copy, modify, or distribute this code
- ❌ You MAY NOT: Use this code in commercial projects
- ❌ You MAY NOT: Create derivative works
Copyright © 2026 Tyler Roukey. All Rights Reserved.
Developer: Tyler Roukey
Email: perfectpassapphelp@gmail.com
PerfectPass is a comprehensive iOS app designed for volleyball coaches and players to track, analyze, and improve serve-receive performance. With real-time tracking, detailed analytics, and intuitive visualizations, PerfectPass transforms raw passing data into actionable insights.
Serve-receive is one of the most critical skills in volleyball, yet tracking performance has traditionally been time-consuming and imprecise. PerfectPass solves this by providing:
- Real-time tracking during practice sessions
- Comprehensive analytics with heat maps and trend analysis
- Player-specific insights to identify strengths and areas for improvement
- Team performance metrics to track progress over time
- Exportable reports for sharing with coaches and athletes
- Quick Start - Begin tracking in seconds with intuitive team selection
- Multi-Player Grid - Track multiple passers simultaneously
- Instant Scoring - Rate passes from 0-3 with a single tap
- Real-Time Stats - View live averages and pass counts as you track
- Configurable Tracking - Choose which metrics to track:
- Zone (where serve came from: 1, 6, 5)
- Contact Location (3x3 body grid: High/Waist/Low × Left/Mid/Right)
- Contact Type (Platform vs. Hands)
- Serve Type (Float vs. Spin)
- Pass quality distribution (Perfect/Good/Medium/Ace)
- Zone performance heat maps
- Body contact location heat maps
- Player-by-player breakdowns
- Session duration and pass counts
- Performance trend charts showing improvement over time
- Aggregate statistics across all sessions
- Top performer rankings
- Team-wide heat maps for zone and body contact
- Historical session comparison
- Individual career statistics
- Session-by-session performance tracking
- Zone and contact location breakdowns
- Performance trends over time
- Comparison with team averages
- Team Branding - Choose from 7 mascot colors with matching themes
- Personalized Rosters - Add players with numbers and positions
- Flexible Tracking - Enable/disable specific tracking metrics per session
- Custom Mascots - Fun volleyball-themed mascot designs for each team
- PDF Reports - Generate comprehensive session and team reports
- Multi-page layouts with heat maps and charts
- Player spotlights highlighting top performers
- Professional formatting for presentations
- CSV Export - Export raw data for external analysis
- Share Integration - Native iOS sharing to Messages, Mail, AirDrop, etc.
- iOS 17.0+
- Xcode 15.0+
- Swift 5.9+
- SwiftUI & SwiftData
-
Clone the repository
git clone https://github.com/yourusername/perfectpass.git cd perfectpass -
Open in Xcode
open PerfectPass.xcodeproj
-
Build and Run
- Select your target device or simulator
- Press
Cmd + Rto build and run
PerfectPass uses native iOS frameworks:
- SwiftUI - Modern declarative UI framework
- SwiftData - Persistent data storage
- Charts - Native chart visualizations
- PDFKit - PDF generation for reports
No external dependencies or package managers required!
- Launch PerfectPass
- Tap the "+" button on the home screen
- Follow the setup wizard:
- Enter team name
- Choose volleyball type (6v6 indoor)
- Select mascot color and background
- Add players with names, numbers, and positions
- Tap "Create Team" to finish
- From the home screen, tap "Quick Start" on your team
- Select which players will be passing (4-6 recommended)
- Configure tracking options:
- Enable Zone to track serve origin
- Enable Contact Location for body heat maps
- Enable Contact Type for platform vs. hands analysis
- Enable Serve Type for float vs. spin tracking
- Tap "Start Session" to begin
- Tap on a player's tile when they receive a serve
- Rate the pass quality:
- 3 - Perfect (In-system, setter has all options)
- 2 - Good (Playable, setter has most options)
- 1 - Medium (Out of system, limited options)
- 0 - Ace (No touch or unplayable)
- Real-time stats update automatically
- Tap "End Session" when finished
- Navigate to the "Team Stats" tab
- Select a team to view aggregate statistics
- Tap on a session to see detailed breakdown
- Export reports as PDF or CSV for sharing
- SwiftUI - Declarative UI framework
- SwiftData - Persistent data storage with @Model
- Combine - Reactive programming for data flow
- PDFKit - PDF generation and rendering
- Charts - Native charting framework
- MVVM Pattern - Clear separation of concerns
- SwiftData Models - Type-safe data persistence
- ObservableObject - Reactive state management
- Environment Objects - Dependency injection
- Modular Views - Reusable component architecture
@Model
class Session {
var teamName: String
var startTime: Date
var endTime: Date?
var trackZone: Bool
var trackContactLocation: Bool
var rallies: [Rally]
// ... computed properties
}
@Model
class Rally {
var playerId: UUID
var passScore: Int // 0-3
var zone: String?
var contactLocation: String?
var timestamp: Date
}- Real-time updates using @Published properties
- Relationships between Teams, Players, Sessions, and Rallies
- Computed properties for analytics (averages, percentages, trends)
- Efficient filtering with SwiftData queries
- Custom PDF rendering using Core Graphics
PerfectPass/
├── Models/
│ ├── Team.swift
│ ├── Player.swift
│ ├── Session.swift
│ ├── Rally.swift
│ ├── DataStore.swift
│ └── AppSettings.swift
├── Views/
│ ├── LiveTrack/
│ │ ├── LiveTrackView.swift
│ │ ├── SelectPassersView.swift
│ │ ├── ConfigureFieldsView.swift
│ │ └── LiveSessionGridView.swift
│ ├── Stats/
│ │ ├── ProgressView.swift
│ │ ├── TeamsListView.swift
│ │ ├── SessionDetailView.swift
│ │ └── PlayerDetailView.swift
│ ├── TeamCreation/
│ │ └── CreateTeamSheet.swift
│ └── Components/
│ ├── PlayerTile.swift
│ ├── PassScoreButtons.swift
│ ├── SpeechBubble.swift
│ └── ZoneCell.swift
├── Helpers/
│ ├── ExportManager.swift
│ └── Colors_Extension.swift
├── Assets/
│ └── Mascots/
│ ├── headband-Purple.png
│ ├── headband-Blue.png
│ └── ...
└── App/
└── PerfectPassApp.swift
- iPad optimization with multi-column layouts
- Apple Watch companion app for quick tracking
- iCloud sync across devices
- Advanced filtering and search
- Custom pass scoring systems
- Video integration for play-by-play analysis
- Team comparison and benchmarking
- Multi-coach collaboration features
- Advanced machine learning predictions
- Tournament mode with bracket management
We welcome contributions from the volleyball and iOS development communities!
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature' - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow Swift style conventions
- Write clear commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
- Use SwiftLint for consistent formatting
- Follow MVVM architecture patterns
- Prefer composition over inheritance
- Use meaningful variable and function names
- Add comments for complex logic
# Run unit tests
xcodebuild test -scheme PerfectPass -destination 'platform=iOS Simulator,name=iPhone 15'- Automated UI testing for critical user flows
- Manual testing checklist for each release
- Volleyball Community - Thanks to coaches and players who provided feedback
- SwiftUI Community - For excellent tutorials and resources
- Beta Testers - For helping identify bugs and suggest improvements
