Back to projects
Service MarketplaceClient ProjectRecent

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

FlutterFirebaseFirestoreCloud FunctionsFCMGetXi18n (EN/ES)PayPhone

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.