A next-generation smart parking ecosystem built with Flutter, powered by Appwrite, and designed for the Ethiopian market.
Features β’ Architecture β’ Getting Started β’ Screenshots β’ Apps
ParkMe Plus revolutionizes urban parking in Ethiopia by connecting drivers with available parking spots in real-time. Built as a Flutter monorepo, it delivers three interconnected applications that work seamlessly together:
- π User App - Find, book, and pay for parking instantly
- π₯οΈ Admin App - Manage locations, monitor revenue, analyze data
- π± Attendant App - Scan QR codes, validate bookings, manage spots
- Real-Time Availability - See live parking spots on interactive Mapbox maps
- Smart Search - GPS-powered location finder with distance calculation
- Instant Booking - Reserve your spot in seconds with QR code generation
- Ethiopian Payments - Pay with Telebirr, CBE Birr, or international cards via Chapa
- Booking History - Track all your parking sessions and receipts
- Navigation - Get directions to your reserved parking spot
- Live Dashboard - Real-time occupancy tracking and revenue monitoring
- Location Management - Add/edit parking locations with Mapbox integration
- User Analytics - Comprehensive user behavior and booking insights
- Revenue Reports - Detailed financial analytics and transaction history
- Spot Control - Dynamic spot assignment (A1-A20, B1-B20 system)
- QR Scanner - Fast check-in/check-out with mobile_scanner
- Booking Validation - Verify payments and booking status instantly
- Spot Management - Real-time spot availability updates
- Offline Support - Continue operations during connectivity issues
parkme-plus/
βββ packages/
β βββ shared/ # π Shared Package (Core Business Logic)
β β βββ models/ # Data models with JSON serialization
β β β βββ booking/ # Booking, BookingHistory
β β β βββ parking/ # ParkingLocation, ParkingSpot
β β β βββ payment/ # Payment, ChapaPayment
β β β βββ user/ # User, UserProfile, UserPreferences
β β β βββ vehicle/ # Vehicle model
β β βββ services/ # Business logic services
β β β βββ auth/ # Authentication (Appwrite)
β β β βββ database/ # Database operations (CRUD)
β β β βββ payment/ # Chapa payment integration
β β β βββ maps/ # Mapbox service
β β β βββ booking/ # Booking management
β β β βββ storage/ # File storage (Appwrite)
β β β βββ realtime/ # Real-time subscriptions
β β βββ config/ # Configuration
β β β βββ appwrite_config.dart
β β β βββ mapbox_config.dart
β β β βββ payment_config.dart
β β βββ widgets/ # Reusable UI components
β β βββ theme/ # Design system
β β
β βββ apps/
β βββ user_app/ # π± User Mobile App
β βββ admin_app/ # π₯οΈ Admin Web Dashboard
β βββ attendant_app/ # π² Attendant Tablet App
β
βββ melos.yaml # Monorepo configuration
βββ .env # Environment variables
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Flutter 3.19+ | Cross-platform UI framework |
| State Management | Riverpod 2.5+ | Reactive state management |
| Backend | Appwrite Cloud | Database, Auth, Storage, Realtime |
| Maps | Mapbox Maps Flutter | Real-world interactive maps |
| Payments | Chapa API | Ethiopian payment gateway |
| QR Codes | qr_flutter, mobile_scanner | QR generation & scanning |
| Navigation | go_router 14+ | Declarative routing |
| Monorepo | Melos | Multi-package management |
π Prerequisites
Before you begin, ensure you have:
- β
Flutter SDK
>=3.19.0(Install Flutter) - β
Dart SDK
>=3.3.0(comes with Flutter) - β Melos CLI for monorepo management
- β Appwrite Cloud Account (Sign up free)
- β Mapbox Account (Get free token)
- β Chapa Test Account (Ethiopian payment gateway)
π¦ Step 1: Install Melos
dart pub global activate melosπ₯ Step 2: Clone & Bootstrap
git clone https://github.com/BeamlakTamirat/parkme-plus.git
cd wepark
melos bootstrapThis command will:
- Install dependencies for all packages
- Link local packages together
- Generate necessary files
π Step 3: Configure Environment Variables
Create .env files in each app directory with the following structure:
# Appwrite Configuration
APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
APPWRITE_PROJECT_ID=your_project_id_here
APPWRITE_API_KEY=your_api_key_here
# Mapbox Configuration
MAPBOX_ACCESS_TOKEN=pk.your_mapbox_token_here
MAPBOX_STYLE_URL=mapbox://styles/mapbox/streets-v12
USE_MAPBOX=true
MAPBOX_DEFAULT_ZOOM=15.0
# Chapa Payment Configuration (Test Mode)
CHAPA_SECRET_KEY_TEST=CHASECK_TEST-your_secret_key
CHAPA_PUBLIC_KEY_TEST=CHAPUBK_TEST-your_public_key
CHAPA_WEBHOOK_SECRET=your_webhook_url
# App Configuration
ENVIRONMENT=development
DEBUG_MODE=trueπ‘ Tip: Copy
.env.exampleto.envand fill in your credentials
βοΈ Step 4: Setup Appwrite Backend
-
Create Appwrite Project
- Go to Appwrite Cloud
- Create new project named "ParkMe Plus"
- Copy your Project ID
-
Create Database & Collections
Database: wepark_db Collections: - users (User profiles and preferences) - parking_locations (Parking lot information) - bookings (Parking reservations) -
Configure Authentication
- Enable Email/Password authentication
- Set session duration to 365 days
- Configure password requirements
-
Set Permissions
- Users: Read/Write own documents
- Admins: Full access
- Attendants: Read bookings, Update bookings
βΆοΈ Step 5: Run the Apps
# User Mobile App (Android/iOS)
cd packages/apps/user_app
flutter run
# Admin Web Dashboard
cd packages/apps/admin_app
flutter run -d chrome
# Attendant Tablet App
cd packages/apps/attendant_app
flutter runπ οΈ Melos Commands
# π¦ Install dependencies for all packages
melos get:all
# π§ͺ Run tests across all packages
melos test:all
# π Analyze code quality
melos analyze
# π§Ή Clean all packages
melos clean:all
# ποΈ Build all applications
melos build:all
# π― Build specific apps
melos build:user-app # Build user mobile app (APK)
melos build:admin-web # Build admin web dashboard
melos build:attendant-app # Build attendant tablet appπ― Ready to test? Use these credentials to explore all three apps!
π§ Email: testadmin@gmail.com
π Password: testadmin
| Feature | Description |
|---|---|
| πΊοΈ Manage Locations | Add, edit, delete parking locations |
| π₯ Control Users | View, suspend, or promote users |
| π¨β |
Assign ONE attendant to ONE location |
| π° Revenue Analytics | Real-time revenue tracking & reports |
| π Dashboard | Live metrics across all locations |
| βοΈ System Settings | Configure pricing, hours, amenities |
π‘ Pro Tip: Admins can reassign attendants between locations anytime!
π§ Email: testattendant@gmail.com
π Password: testattendant
π Assigned: Bole Airport Parking (500 spots)
| Feature | Description |
|---|---|
| π· QR Scanner | Lightning-fast check-in/checkout |
| πΊοΈ Parking Grid | 3D view of all spots (A1-A20, B1-B20) |
| β Verify Bookings | Validate user reservations |
| π Shift Reports | Track daily performance |
| π Live Alerts | Expiring bookings, new arrivals |
β οΈ Important: Each attendant is assigned to ONE location only. Admins can change assignments.
π± Download the User App
β Create your account (Email + Password)
β
Start booking parking spots!
| Feature | Description |
|---|---|
| π Find Parking | Search by location, price, availability |
| π Book Spots | Reserve parking in advance |
| π³ Pay Securely | Multiple payment methods via Chapa |
| π« Get QR Code | Digital ticket for check-in |
| π View History | All past bookings and receipts |
| β Rate & Review | Share parking experiences |
ParkMe Plus supports 6 payment methods through Chapa - Ethiopia's leading payment gateway:
| Method | Description | Test Credentials |
|---|---|---|
| π± Telebirr | Most popular mobile money in Ethiopia | 0900112233 |
| π¦ CBE Birr | Commercial Bank of Ethiopia wallet | 0900123456 |
| π² M-Pesa | Safaricom mobile money | 0700123456 |
| π€ COOPPay-eBirr | Cooperative Bank eBirr wallet | 0900881111 |
| Method | Description | Test Credentials |
|---|---|---|
| π³ Visa | International credit/debit cards | Card: 4200 0000 0000 0000CVV: 123Expiry: 12/34 |
| π³ Mastercard | International credit/debit cards | Card: 6200 0000 0000 0000CVV: 123Expiry: 12/34 |
- β PCI-DSS Compliant
- β End-to-end encryption
- β Instant payment verification
- β Automatic refunds for early checkout
- β Transaction history & receipts
π‘ Note: All test credentials work in development mode. Use real credentials in production.
{
"name": "string",
"email": "string",
"phone": "string",
"role": "string", // "user", "admin", "attendant"
"profileImageUrl": "string",
"createdAt": "datetime",
"updatedAt": "datetime"
}{
"name": "string",
"address": "string",
"latitude": "double",
"longitude": "double",
"totalSpots": "integer",
"availableSpots": "integer",
"hourlyRate": "double",
"isActive": "boolean",
"amenities": "string", // Comma-separated
"attendantId": "string", // ONE attendant per location
"createdAt": "datetime",
"updatedAt": "datetime"
}{
"userId": "string",
"parkingLocationId": "string",
"spotNumber": "string",
"vehiclePlateNumber": "string",
"startTime": "datetime",
"endTime": "datetime",
"totalAmount": "double",
"status": "string", // "pending", "active", "completed", "cancelled"
"paymentStatus": "string", // "pending", "paid", "failed"
"qrCode": "string",
"transactionId": "string",
"createdAt": "datetime",
"updatedAt": "datetime"
}Primary Orange: #FF9500
Dark Orange: #E68600
Light Orange: #FFB347
Background: #F8F9FA
Text Dark: #1A1A1A
Text Light: #6C757D
Success: #28A745
Error: #DC3545
Warning: #FFC107- Headings: SF Pro Display (iOS) / Roboto (Android)
- Body: System default with fallbacks
- Monospace: Courier New (for codes)
- Consistent 16px border radius
- Elevation shadows for depth
- Smooth animations (200-300ms)
- Responsive layouts for all screen sizes
- Platform: iOS & Android
- Screens: 16 screens including auth, maps, booking, payment
- Features: Real-time maps, QR codes, payment integration
- State: Riverpod providers for auth, bookings, locations
- Platform: Web & Android
- Screens: Dashboard, locations, users, bookings, analytics
- Features: CRUD operations, charts, real-time monitoring
- Responsive: Desktop & tablet optimized
- Platform: Android tablets
- Screens: Dashboard, QR scanner, booking details, spot management
- Features: Fast QR scanning, offline mode, simple UI
- Optimized: Large touch targets for tablet use
- π Appwrite Authentication - Secure session management
- π‘οΈ Payment Security - PCI-compliant via Chapa
- π API Key Protection - Environment variables only
- π₯ Role-Based Access - User, Admin, Attendant roles
- π Data Validation - Input sanitization on all forms
- π HTTPS Only - Encrypted data transmission
Track key metrics:
- π Revenue Analytics - Daily, weekly, monthly reports
- π Occupancy Rates - Real-time and historical
- π€ User Behavior - Booking patterns and preferences
- π° Payment Success - Transaction success rates
- β±οΈ Performance - App load times and API response
# Build Android APK
cd packages/apps/user_app
flutter build apk --release
# Build iOS IPA
flutter build ipa --release
# Build App Bundle (Google Play)
flutter build appbundle --releasecd packages/apps/admin_app
flutter build web --release
# Deploy to Firebase Hosting, Vercel, or Netlify- Appwrite Cloud - Managed hosting (recommended)
- Self-Hosted - Docker deployment on your server
πContributions are welcome!
This project is licensed under the MIT License - see the LICENSE file for details.
Built with β€οΈ in Ethiopia
Report Bug β’ Request Feature β’ Documentation