SlotParking is an iOS SwiftUI app for discovering nearby parking lots, tracking live spot availability, and supporting basic owner, attendant, and admin workflows for lot operations.
The current build is centered on Detroit-area parking and venues, with a driver-facing map/list experience and optional Firebase-backed data for realtime updates.
- Browse parking lots on a map or in a list
- Search lots by name or address
- View pricing, address, and available spot counts
- See distance from each lot to nearby Detroit venues
- Register a new lot through a multi-step owner onboarding flow
- Let attendants update available spot counts
- Review and approve pending lots in a debug-only admin panel
- Support mock data for local development and Firebase for live data
- Swift
- SwiftUI
- MapKit
- Combine
- Firebase Auth
- Firebase Firestore
- Firebase Messaging / Apple Push Notifications
Users can browse approved lots in either a map or list view, search lots, and open lot details.
Owners can submit a lot with:
- Basic lot information
- Map pin placement
- Photo upload/cropping
- Simple phone verification flow
Submitted lots are marked as pending until approved.
Attendants can sign in and update spot counts using simple in/out controls.
In DEBUG builds, an admin panel can review all lots and approve pending listings.
SlotParking/
├── SlotParking/
│ ├── Models/
│ ├── Services/
│ ├── Utils/
│ ├── ViewModels/
│ ├── Views/
│ ├── Assets.xcassets
│ ├── ContentView.swift
│ ├── SlotParkingApp.swift
│ └── GoogleService-Info.plist
└── Products/
- Xcode
- iOS Simulator or physical iPhone
The app can run with mock data when Firebase packages are not available. This is the simplest way to explore the UI and workflows locally.
Mock mode includes:
- Seeded parking lots
- Demo attendant login support
- Local pending/approval flow through the mock service
DevConfig.swift exposes ADMIN_SERVER_BASE_URL. If you point that value to a local backend, the app will fetch approved lots from that server and POST newly registered lots for approval.
Firebase is optional but supported. To enable it:
- Create a Firebase project.
- Register the iOS app and add
GoogleService-Info.plistto the target. - Add the Firebase packages used by the app:
FirebaseAuthFirebaseFirestoreFirebaseFirestoreSwiftFirebaseMessaging(optional)
- Configure Firestore with a
lotscollection.
The app already calls FirebaseApp.configure() on launch when Firebase is available.
For more detail, see README_FIREBASE.md.
- Approved lots are shown to drivers.
- Newly registered lots default to
pending. - The admin panel is intended for development/debug workflows.
- The current venue and sample lot data are Detroit-focused.
- Production-grade owner and attendant authentication
- Stronger Firestore security rules
- Reservation and payment support
- Better admin moderation tools
- Richer notifications and live event-based pricing