Personal utility app for expats
Arab Expat
An offline-first Android app that helps expats in Saudi Arabia track documents, overtime, spending, remittances and their labor rights.
- Role
- Full-stack developer: audit and rebuild
- Platforms
- Mobile, Backend & API
- Status
- Preparing for closed beta
- Timeline
- 2026
- Mobile app
- Business system
Recreated from source, demo dataOverview
Arab Expat is a personal utility app for expatriate workers in Saudi Arabia. It brings five everyday jobs into one Android app: a document vault with expiry reminders, attendance with a Saudi Labor Law overtime estimator, a wallet with VAT tools and ZATCA receipt scanning, a remittance tracker, and an offline library of official labor and traffic law articles.
The app works in English, Arabic, Urdu and Hindi, with right-to-left layouts for Arabic and Urdu. It stores data in an encrypted local database first, so it keeps working without a connection, and syncs with a Laravel API when it can.
I started from an existing online-only prototype. I audited it, then rebuilt the Flutter app and the Laravel backend module by module, hardened security and verified a release build. The product is not on Google Play yet: it is ready for a controlled closed beta once the owner supplies an SMS sender, hosting, a signing key and a privacy policy.
Built for: Expatriate workers in Saudi Arabia, for example from Pakistan, India, Bangladesh and Egypt, who manage Iqama and other documents, shift work, budgets and money sent home, often in Arabic, Urdu or Hindi rather than English.
The problem
Expats in Saudi Arabia juggle Iqama, driver's license and insurance expiry dates (often shown in Hijri), unclear overtime entitlements, VAT on receipts, remittance costs and labor rights written in language that is hard to follow. Each of these usually lives in a different place, or nowhere.
The prototype I inherited was online-only, and my audit found 61 critical and high issues, including an authentication bypass, OTP codes written to logs, money stored as floating-point numbers, and invented exchange rates and law text. An app that holds identity documents also has to meet Google Play and Saudi PDPL expectations for sensitive data.
The solution
I rebuilt the app around an offline-first design. Every change is written to an encrypted SQLCipher database on the phone and queued in an outbox. A sync engine replays the queue against the Laravel API with idempotency keys and version checks, then pulls server changes from a per-user change feed. If the server rejects a change, for example because of a version conflict, it appears on a Sync issues screen where the user can re-apply or discard it.
The server stays authoritative for money and legal calculations. Overtime is computed from versioned, source-cited labor rule sets and shown with a full breakdown and an "estimate only" note. Identity fields and document scans are encrypted at rest with rotatable keys, and responses mask them by default.
I also removed everything the prototype had made up. Exchange rates now come from a named source with attribution, and law text is copied word for word from the official Bureau of Experts portal, with a "legal review pending" badge until a lawyer checks it.
Main features
Document vault and reminders
Tracks Iqama, driver's license, Istimara, insurance and other documents, with Umm al-Qura Hijri dates. Scans are encrypted per file and viewed in the app. Expiry reminders come from scheduled server jobs and from local notifications on the phone.
Attendance and overtime
Clock in and out, log breaks and overnight shifts, and set up schedules and contracts. Overtime is estimated server-side from versioned rule sets based on Article 107 of the Labor Law, with optional Ramadan hours and public holidays.
Wallet, budgets and VAT
Multiple wallets with balances derived from a ledger, transfers between them, monthly budgets with alerts, reports and duplicate-receipt detection. The VAT calculator handles inclusive, exclusive, zero-rated and exempt amounts.
ZATCA receipt scanner
Scans the QR code on Saudi e-invoices with the camera and decodes its TLV data. The same strict parser runs in the app and on the server, tested against official ZATCA examples.
Remittance tracker
Logs money sent home, with recipients, history and analytics, and debits the matching wallet. It tracks transfers only and never moves money. Reference exchange rates show their source and are flagged when stale.
Offline law library
A "Know your rights" library of 52 labor and traffic law articles copied from laws.boe.gov.sa with links to the source. Full-text search works offline in English, Arabic and Urdu, with bookmarks and updates synced as deltas.
Sign-in and account control
Sign-in by phone number with one-time codes, plus biometric app lock, a list of signed-in devices with remote logout, a JSON export of personal data, and account deletion that removes files and personal records.
Four languages, RTL layouts
English, Arabic, Urdu and Hindi, with bundled IBM Plex Sans and Noto Nastaliq Urdu fonts so every script renders properly. Layouts mirror for Arabic and Urdu, and a dark mode is included.
Inside the product
Screens marked "recreated from source" were rebuilt from the app's code with demo data, so no client data is shown. The rest are from the software itself.
Recreated from source, demo data
Recreated from source, demo data
Recreated from source, demo data
Recreated from source, demo dataDevelopment and architecture
The Android app is built with Flutter. Screens talk to repositories, repositories write to an encrypted local Drift database that acts as the source of truth while offline, and an outbox feeds a sync engine that calls the API over Dio. Background sync runs through WorkManager.
The backend is a Laravel 13 REST API on PHP 8.5 with Sanctum tokens. Requests go through form requests into actions and services, targeting MySQL 8 for production and using SQLite for tests, with a queue worker, a scheduler and adapters for SMS, exchange rates and push. An OpenAPI spec, checked by a test, documents the API.
The app is not deployed yet. I built and verified unsigned release bundles, and a deployment guide targets a VPS hosted in Saudi Arabia.
- Offline-first sync
- I used a generic outbox that replays normal REST calls, so there is one validation path. Idempotency keys stop duplicates, row versions return a conflict instead of overwriting, and a gap-free change feed lets the app pull exactly what it missed.
- Decimal money everywhere
- Amounts are never floats. The server uses BcMath, the app uses a decimal type, amounts travel as strings, and the database stores DECIMAL columns, so balances and VAT always add up.
- Encryption at rest
- Passport, national ID and border numbers use field-level XChaCha20-Poly1305 encryption with key IDs and a rotation command. Document scans are encrypted per file and served through five-minute signed links that re-check ownership.
- Protecting the phone side
- The local database is encrypted with SQLCipher, cached files with AES-GCM, screens with personal data block screenshots, Android backups are off, and release builds only talk HTTPS.
- Source-cited labor rules
- Overtime rules live in versioned rule sets that cite the law they come from. Each result stores the rule set and the inputs used, so an estimate can always be explained later.
- Authorization tested across the API
- A matrix test covers all 121 API operations. Reading another user's data returns 404, and any new route without an access rule fails the test suite.
- Release readiness
- I brought known dependency advisories from 35 to 0 and upgraded the barcode scanner so the release build meets Android's 16 KB page-size requirement.
Technology
- Flutter
- Dart
- Laravel
- PHP
- MySQL
- SQLite
- Android
- Drift
- SQLCipher
- Laravel Sanctum
- Pest
- Larastan
Results
- Backend tests passing
- 1,064Backend tests passingRun on both SQLite and MariaDB 10.4
- Flutter tests passing
- 469Flutter tests passing
- Critical and high audit findings closed
- 61Critical and high audit findings closedFrom my audit of the original prototype
- Dependency security advisories
- 35 to 0Dependency security advisories
Related projects

Engineering consultation marketplace app
Estasher
A bilingual iOS and Android marketplace where clients in Saudi Arabia book consultations and request offers from verified engineers and engineering offices.
- Mobile app
- SaaS product
- Business system
- Web application

Home-services booking marketplace
Just Book
A home-services marketplace where customers book verified providers, with one Flutter app, a Laravel API, an admin panel and websites.
- Mobile app
- Web application
- SaaS product
- Business system

Private location journal for Android
GeoPrints
An Android travel diary that automatically logs your stays, routes and photos, with all location history kept on your phone.
- Mobile app
Have a software idea or a business process that needs a proper system?
Tell me what you are trying to fix. I will reply with honest questions, a practical plan and a realistic estimate.