5. Property & Municipality Portal
5.1 Architecture
graph TD
subgraph APP["📱 KRG Property App — Flutter 3.x"]
direction LR
SEARCH["🔍 Property\nSearch"] ~~~ TRANSFER["🏠 Transfer\nRequests"] ~~~ PERMIT["📋 Building\nPermits"]
MAP["🗺️ GIS\nMap Viewer"] ~~~ PAY["💳 Payments\n& Fees"] ~~~ DOCS["📄 Document\nVault"]
TRACK["📊 Application\nTracker"] ~~~ NOTIF["🔔 Notif.\nCenter"]
end
subgraph CORE["Flutter Core"]
direction LR
RVP["Riverpod 2.x"] ~~~ HIVE["Hive / Isar"] ~~~ DIO["Dio + Interceptors"] ~~~ SEC["Secure Storage"]
end
APP --> CORE
CORE --> BFF["⚡ BFF Layer — Laravel 13 (PHP 8.4)\nAggregates APIs · Formats for Mobile/Web"]
BFF --> KONG["🚪 Kong API Gateway"]
KONG --> MS["Property Microservices"]
5.2 Mobile App Features
| Module | Description | Tech |
| Property Search | Search by address, owner, parcel ID; view property details | Meilisearch + PostGIS |
| GIS Map Viewer | Interactive map with parcel boundaries, zoning layers, satellite imagery | OpenLayers + GeoServer tiles |
| Transfer Requests | Initiate buy/sell, track progress, upload documents, digital signatures | Camunda BPMN workflow |
| Building Permits | Apply for construction/renovation permits, upload plans, track review | Dynamic forms (JSON Schema) |
| Payments & Fees | Pay transfer tax, permit fees, property tax; view receipts | FIB, Qi, NassPay, AsiaPay, FastPay |
| Document Vault | Store title deeds, permits, building plans, contracts | Encrypted MinIO + local cache |
| Application Tracker | Real-time status of all submitted applications | WebSocket push updates |
| Notifications | Push notifications for status changes, payment reminders, deadlines | ntfy/UnifiedPush + APNs/FCM (delivery only) |
| Appointments | Book, reschedule for in-person services (inspections, disputes) | Calendar + push reminders |
| Rental Registry | Register/lookup rental contracts, tenant info | Laravel CRUD service |
5.3 Web Portal
| Layer | Technology |
| Framework | Next.js 14+ (React 18, App Router) |
| UI Library | Tailwind CSS 4 + Shadcn/UI + Radix Primitives |
| Map Component | OpenLayers 9 with GeoServer tile layers |
| State Management | Zustand + TanStack Query |
| Forms | React Hook Form + Zod validation |
| i18n | next-intl (Kurdish Soranî, Kurdish Kurmancî, Arabic, English) |
| RTL Support | Tailwind RTL plugin + CSS logical properties |
| Auth | NextAuth.js v5 → Keycloak OIDC |
Web-Specific Features
- Full cadastral map viewer with layer controls (parcels, zoning, buildings, addresses)
- Bulk property search for agents and legal professionals
- Side-by-side document comparison for transfer reviews
- Print-ready title deed and certificate generation
5.4 Admin Dashboard (Municipality Staff)
| Layer | Technology |
| Framework | Laravel 13 (PHP 8.4) — Filament 3 Admin Panel |
| Frontend | Livewire 3 + Alpine.js + Tailwind CSS |
| Workflow Engine | Camunda 8 (BPMN) embedded via API |
| Map Admin | OpenLayers + GeoServer admin for parcel editing |
| Reports | Laravel Excel + Metabase embeds |
| Audit Logging | Spatie Activity Log + Kafka producer |
| Permissions | Spatie Laravel-Permission + Keycloak sync |
Admin Dashboard Modules
| Module | Description |
| Application Queue | View, assign, process incoming applications (transfers, permits, valuations) |
| Property Management | Create, edit, merge/split properties; manage ownership records |
| Parcel Editor | Edit parcel boundaries on GIS map; approve subdivision requests |
| Inspection Scheduler | Assign inspectors, schedule field visits, review inspection reports |
| Valuation Panel | Run ML-assisted valuations, override with manual assessment |
| Reporting | Transaction volumes, processing times, revenue, pending cases |
| Citizen Communication | Send notifications, respond to inquiries, manage appointments |