ServiceX / ServiceX Pro
Three-app ecosystem — client app, fixxer provider app, and admin panel. It includes a six-phase real-time job lifecycle, escrow payments, dual-language support, client and fixxer verification flows, and atomic Firestore transactions.
Project Summary
My Role
Lead Flutter + Firebase Developer
Tech Stack
Challenge
The client needed a fully operational two-sided service marketplace for the Ecuadorian market — connecting clients who need home services (plumbing, electrical, cleaning) with verified local service providers called "Fixxers." The platform had to support real-time job matching, bilingual operation in English and Spanish, verified identity for both sides, and an escrow payment system that protected clients until work was confirmed complete. Three separate apps — client app, provider app, and admin panel — needed to work together on one Firebase backend.
Solution
I built three Flutter apps sharing a single Firebase backend: the ServiceX client app, the ServiceX Pro fixxer app, and a Flutter Web admin panel. The core is a Firestore-based job lifecycle with six phases: job created → fixxer discovers and quotes → client accepts quote → booking confirmed → job executed → review and payment release. Every state transition uses atomic Firestore transactions to prevent race conditions and double-booking. Key technical decisions: Dual-mode payment: clients pay upfront into escrow, released to the fixxer only after job completion, integrated with PayPhone — Ecuador's primary gateway. Real-time fixxer map: Firestore listeners update fixxer positions live, with Haversine distance sorting to surface the nearest available providers. EN/ES bilingual: enum-based translation extensions across all three apps, with locale switching persisted per user. Tiered fixxer access: verification levels gate which job categories a fixxer can accept, enforced in both the app and Cloud Functions. Cloud Functions handle all lifecycle notifications: job posted, quote received, booking confirmed, job started, payment released — with FCM dispatched to both client and fixxer. Auth: email/password, Google Sign-In, and Apple Sign-In for both apps, with skippable multi-step onboarding and profile completion prompts.
Outcome
Delivered a fully functional three-app marketplace ecosystem — client app, provider app, and Flutter Web admin panel — with real-time job flow, escrow payments, bilingual support, and identity verification on both sides. The iOS build was submitted to the App Store via Codemagic CI/CD. The client received a production-ready product with a Firestore seed script for test data, complete FCM notification coverage across all six job phases, and an admin panel for user management and booking oversight.
What I worked on
Architected the three-collection Firestore schema: job_requests → quotes → bookings, with atomic transactions on all state transitions.
Built the full six-phase service lifecycle in both client and provider apps, from job creation through payment release.
Implemented real-time fixxer map with Haversine proximity sorting and live Firestore position updates.
Built auth flows for both apps: email/password, Google Sign-In, Apple Sign-In, multi-step skippable onboarding, and profile completion banners.
Integrated PayPhone gateway with dual-mode escrow and direct payment support.
Wrote all Cloud Functions for lifecycle FCM notifications to client and fixxer on every phase transition.
Built EN/ES i18n with enum translation extensions and per-user locale persistence.
Managed iOS App Store submission via Codemagic CI/CD due to macOS version constraints.
Built Flutter Web admin panel for user management, fixxer verification review, and booking oversight.