A parking enforcement tracking app for UC Davis students. Get real-time alerts when TAPS is spotted at your parking structure, check probability predictions, and help the community by reporting sightings.
Website: tapoutparking.info
TapOut helps UC Davis students avoid parking tickets by:
- Real-time Alerts: Get notified instantly when TAPS is spotted at your parking lot
- Check In/Out: Register when you park to receive location-specific notifications
- Community Reports: Report TAPS sightings to warn fellow parkers
- Reliability Voting: Upvote/downvote reports to help identify accurate sightings
- AI Predictions: View probability predictions based on time, day, historical data, and academic calendar
- 3-Hour Reminders: Automatic reminder to check out if you forget
- Register your device and verify your UC Davis email
- Check in when you park at a structure (e.g., Hutchinson)
- Receive alerts if someone spots TAPS at your lot
- Report sightings when you see TAPS to help others
- Vote on reports to indicate reliability (thumbs up/down)
- Check out when you leave
- Framework: Python FastAPI
- Database: PostgreSQL with SQLAlchemy (async)
- Authentication: JWT tokens + UC Davis email verification
- Notifications: APNs push notifications + in-app polling fallback
- Background Tasks: APScheduler for checkout reminders
- Containerization: Docker & Docker Compose
backend/
βββ app/
β βββ api/ # API endpoints
β β βββ auth.py # Device registration, email verification
β β βββ parking_lots.py # Lot listing and details
β β βββ parking_sessions.py # Check in/out
β β βββ sightings.py # Report TAPS sightings
β β βββ feed.py # Recent sightings feed + voting
β β βββ notifications.py # In-app notification polling
β β βββ predictions.py # AI probability predictions
β βββ models/ # SQLAlchemy database models
β βββ schemas/ # Pydantic request/response schemas
β βββ services/ # Business logic
β β βββ auth.py # UC Davis email verification, JWT
β β βββ notification.py # APNs + polling notifications
β β βββ prediction.py # ML probability model
β β βββ reminder.py # 3-hour checkout reminders
β βββ config.py # Environment configuration
β βββ database.py # Database connection
β βββ main.py # FastAPI application entry
βββ tests/ # Comprehensive test suite (83 tests)
βββ Dockerfile
βββ docker-compose.yml
βββ requirements.txt
| Endpoint | Method | Description |
|---|---|---|
/api/v1/auth/register |
POST | Register device, get JWT token |
/api/v1/auth/verify-email |
POST | Verify UC Davis email |
/api/v1/lots |
GET | List all parking lots |
/api/v1/lots/{id} |
GET | Get lot details with stats |
/api/v1/sessions/checkin |
POST | Check in to a lot |
/api/v1/sessions/checkout |
POST | Check out from current lot |
/api/v1/sightings |
POST | Report TAPS sighting |
/api/v1/feed |
GET | Get recent sightings (3 hrs) with votes |
/api/v1/feed/{lot_id} |
GET | Get feed for specific lot |
/api/v1/feed/sightings/{id}/vote |
POST | Upvote/downvote a sighting |
/api/v1/predictions/{lot_id} |
GET | Get TAPS probability prediction |
/api/v1/notifications/unread |
GET | Poll for new notifications |
# With Docker (recommended)
cd backend
docker-compose up --build
# API available at http://localhost:8000
# Docs at http://localhost:8000/docs# Local development
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reloadcd backend
source venv/bin/activate
pytest tests/ -vCopy .env.example to .env and configure:
SECRET_KEY=your-secret-key-here
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/db
# Optional: APNs for push notifications
APNS_KEY_ID=
APNS_TEAM_ID=
APNS_KEY_PATH=
APNS_BUNDLE_ID=- Framework: SwiftUI (iOS)
- Design: Retro/pixelated, gamified UI
The app has two main tabs:
- Red "I saw TAPS" button: Report a sighting (with confirmation popup)
- Green "I parked at ___" button: Check in to receive notifications
- Transforms to Yellow "I am leaving ___" after check-in
- 3-hour automatic reminder if you don't check out
- Probability Display:
- Animated counter (0-100%)
- Color-coded: π’ Green (<33%) | π‘ Yellow (33-66%) | π΄ Red (>66%)
- Recent Feed:
- Sightings from last 3 hours
- Ordered by timestamp (newest first)
- Thumbs up/down voting for reliability
- Shows upvote/downvote counts and net score
Currently tracking:
- Hutchinson Parking Structure
More locations coming soon!
We'd love to hear from you! Whether you have bug reports, feature requests, or just want to say hi:
- Email: ucd.tapout@gmail.com
- GitHub Issues: github.com/tapout/app/issues
- Claude Code
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by UC Davis students, for UC Davis students.