Skip to content

BeamlakTamirat/parkme-plus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

72 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ…ΏοΈarkMe Plus - Smart Parking System

Where Finding Parking Becomes Effortless

Flutter Dart Appwrite Mapbox License

A next-generation smart parking ecosystem built with Flutter, powered by Appwrite, and designed for the Ethiopian market.

Features β€’ Architecture β€’ Getting Started β€’ Screenshots β€’ Apps

πŸš€ Download Latest Release

Download Latest Release

🎯 What is ParkMe Plus?

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

✨ Features

🌟 For Drivers (User App)

  • 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

πŸŽ›οΈ For Operators (Admin Dashboard)

  • 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)

πŸ“² For Attendants (Tablet App)

  • 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

πŸ—οΈ Architecture

Monorepo Structure

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

Technology Stack

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

πŸš€ Quick Start

πŸ“‹ Prerequisites

Before you begin, ensure you have:

πŸ“¦ 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 bootstrap

This 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.example to .env and fill in your credentials

☁️ Step 4: Setup Appwrite Backend
  1. Create Appwrite Project

    • Go to Appwrite Cloud
    • Create new project named "ParkMe Plus"
    • Copy your Project ID
  2. Create Database & Collections

    Database: wepark_db
    
    Collections:
    - users (User profiles and preferences)
    - parking_locations (Parking lot information)
    - bookings (Parking reservations)
    
  3. Configure Authentication

    • Enable Email/Password authentication
    • Set session duration to 365 days
    • Configure password requirements
  4. 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

πŸ” Test Credentials & Access Levels

🎯 Ready to test? Use these credentials to explore all three apps!

πŸ‘¨β€πŸ’Ό ADMIN ACCESS - Full Control


πŸ“§ Email:    testadmin@gmail.com
πŸ”‘ Password: testadmin

✨ What Admins Can Do:

Feature Description
πŸ—ΊοΈ Manage Locations Add, edit, delete parking locations
πŸ‘₯ Control Users View, suspend, or promote users
πŸ‘¨β€βœˆοΈ Assign Attendants 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!

πŸ‘¨β€βœˆοΈ ATTENDANT ACCESS - Location Specific


πŸ“§ Email:    testattendant@gmail.com
πŸ”‘ Password: testattendant
πŸ“ Assigned: Bole Airport Parking (500 spots)

✨ What Attendants Can Do:

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.

πŸ‘€ USER ACCESS - Self Registration


πŸ“± Download the User App
βž• Create your account (Email + Password)
βœ… Start booking parking spots!

✨ What Users Can Do:

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

πŸ’³ Payment Methods (Powered by Chapa)

πŸ’° Available Payment Options


ParkMe Plus supports 6 payment methods through Chapa - Ethiopia's leading payment gateway:

πŸ“± Mobile Wallets

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

πŸ’³ International Cards

Method Description Test Credentials
πŸ’³ Visa International credit/debit cards Card: 4200 0000 0000 0000
CVV: 123
Expiry: 12/34
πŸ’³ Mastercard International credit/debit cards Card: 6200 0000 0000 0000
CVV: 123
Expiry: 12/34

πŸ”’ Security Features

  • βœ… 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.


πŸ”§ Configuration Deep Dive

πŸ“Š Appwrite Collections Schema


users Collection

{
  "name": "string",
  "email": "string",
  "phone": "string",
  "role": "string",  // "user", "admin", "attendant"
  "profileImageUrl": "string",
  "createdAt": "datetime",
  "updatedAt": "datetime"
}

parking_locations Collection

{
  "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"
}

bookings Collection

{
  "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"
}

🎨 Design System


Color Palette

Primary Orange: #FF9500
Dark Orange: #E68600
Light Orange: #FFB347
Background: #F8F9FA
Text Dark: #1A1A1A
Text Light: #6C757D
Success: #28A745
Error: #DC3545
Warning: #FFC107

Typography

  • Headings: SF Pro Display (iOS) / Roboto (Android)
  • Body: System default with fallbacks
  • Monospace: Courier New (for codes)

Components

  • Consistent 16px border radius
  • Elevation shadows for depth
  • Smooth animations (200-300ms)
  • Responsive layouts for all screen sizes

πŸ“± The Ecosystem


User Mobile App

  • 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

Admin Web Dashboard

  • Platform: Web & Android
  • Screens: Dashboard, locations, users, bookings, analytics
  • Features: CRUD operations, charts, real-time monitoring
  • Responsive: Desktop & tablet optimized

Attendant Tablet App

  • 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

πŸ”’ Security & Privacy


  • πŸ” 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

πŸ“Š Analytics & Monitoring


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

πŸš€ Deployment


Mobile Apps

# 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 --release

Web Dashboard

cd packages/apps/admin_app
flutter build web --release
# Deploy to Firebase Hosting, Vercel, or Netlify

Backend

  • Appwrite Cloud - Managed hosting (recommended)
  • Self-Hosted - Docker deployment on your server

πŸ“Έ Screenshots

image

🀝 Contributing

πŸ€Contributions are welcome!

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Built with ❀️ in Ethiopia

Report Bug β€’ Request Feature β€’ Documentation