ParkPal is a comprehensive mobile application that serves as a two-sided marketplace for parking spaces. The app connects parking space hosts with drivers looking for convenient parking spots, featuring license plate registration and secure payment processing.
- Add and manage multiple vehicle license plates
- Support for all US states
- Set default license plate for quick booking
- License plate validation and formatting
- Secure storage in user profile
- Secure payment processing with Stripe integration
- Multiple payment methods (Credit/Debit cards, Apple Pay, Google Pay)
- Payment history and transaction tracking
- Automatic booking confirmation upon successful payment
- Refund processing capabilities
- Create and manage parking space listings
- Upload photos and detailed descriptions
- Set pricing per hour
- Configure availability schedules
- Real-time availability updates
- Calendar-based time slot selection
- Real-time availability checking
- Booking confirmation and management
- License plate association with bookings
- Booking status tracking (pending, confirmed, cancelled, completed)
- Role-based authentication (Host/Driver)
- User profiles with contact information
- Public profile viewing
- Secure authentication with Firebase
- In-app messaging between hosts and drivers
- Booking notifications
- Payment confirmations
- Status updates
- Native iOS and Android support
- Responsive design
- Intuitive user interface
- Offline capability for basic features
- Frontend: React Native with Expo
- Backend: Firebase (Authentication, Firestore, Storage)
- Payment Processing: Stripe
- Navigation: Expo Router
- State Management: React Context API
- UI Components: Custom themed components
- Maps: React Native Maps
- Image Handling: Expo Image Picker
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI
- Firebase account
- Stripe account (for payment processing)
-
Clone the repository
git clone https://github.com/yourusername/ParkPalApp.git cd ParkPalApp -
Install dependencies
npm install
-
Configure Firebase
- Create a new Firebase project
- Enable Authentication, Firestore, and Storage
- Update
lib/firebase.tswith your Firebase configuration
-
Configure Stripe (for production)
- Create a Stripe account
- Add your Stripe publishable key to the app
- Set up webhook endpoints for payment processing
-
Update app configuration
- Update
app.jsonwith your app details - Configure bundle identifiers for iOS and Android
- Set up EAS project ID in
eas.json
- Update
npm startnpm run iosnpm run androidnpm run webParkPalApp/
βββ app/ # Main application screens
β βββ (tabs)/ # Tab navigation screens
β βββ auth/ # Authentication screens
β βββ booking/ # Booking management
β βββ listing/ # Listing management
β βββ profile/ # User profile screens
β βββ payments.tsx # Payment history
βββ components/ # Reusable components
β βββ LicensePlateManager.tsx
β βββ PaymentSheet.tsx
β βββ ui/ # UI components
βββ lib/ # Utility libraries
β βββ firebase.ts # Firebase configuration
β βββ payments.ts # Payment processing
β βββ bookings.ts # Booking management
β βββ listings.ts # Listing management
βββ contexts/ # React contexts
β βββ AuthContext.tsx # Authentication context
βββ constants/ # App constants
βββ Colors.ts # Color definitions
-
users
uid: User IDemail: User emailrole: 'host' or 'driver'displayName: Display namedescription: User descriptioncontactInfo: Contact informationlicensePlates: Array of license platescreatedAt: Account creation dateupdatedAt: Last update date
-
listings
id: Listing IDhost_id: Host user IDtitle: Listing titledescription: Listing descriptionaddress: Parking locationprice_per_hour: Hourly rateavailability: Availability scheduleimages: Array of image URLscreatedAt: Listing creation date
-
bookings
id: Booking IDuser_id: Driver user IDhost_id: Host user IDlisting_id: Listing IDstart_time: Booking start timeend_time: Booking end timetotal_price: Total booking coststatus: Booking statuslicense_plate: Associated license platelicense_plate_state: License plate statecreatedAt: Booking creation date
-
payments
id: Payment IDbooking_id: Associated booking IDuser_id: Payer user IDhost_id: Payee user IDamount: Payment amountcurrency: Payment currencystatus: Payment statuspayment_intent_id: Stripe payment intent IDcreatedAt: Payment creation date
-
messages
id: Message IDbooking_id: Associated booking IDsender_id: Sender user IDreceiver_id: Receiver user IDcontent: Message contentcreatedAt: Message creation date
-
Install EAS CLI
npm install -g @expo/eas-cli
-
Login to Expo
eas login
-
Configure EAS
eas build:configure
-
Build for production
# iOS eas build --platform ios --profile production # Android eas build --platform android --profile production
-
Submit to App Store
eas submit --platform ios
-
Submit to Google Play
eas submit --platform android
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Users can read/write their own data
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
// Listings can be read by anyone, written by hosts
match /listings/{listingId} {
allow read: if true;
allow write: if request.auth != null &&
request.auth.uid == resource.data.host_id;
}
// Bookings can be read/written by involved users
match /bookings/{bookingId} {
allow read, write: if request.auth != null &&
(request.auth.uid == resource.data.user_id ||
request.auth.uid == resource.data.host_id);
}
// Payments can be read/written by involved users
match /payments/{paymentId} {
allow read, write: if request.auth != null &&
(request.auth.uid == resource.data.user_id ||
request.auth.uid == resource.data.host_id);
}
}
}- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some 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.
For support, email [email protected] or create an issue in the GitHub repository.
- Push notifications
- Advanced search and filtering
- Real-time map integration
- Social features (reviews, ratings)
- Subscription plans for hosts
- Analytics dashboard
- Multi-language support
- Accessibility improvements
ParkPal - Making parking easier, one space at a time.