Photo of Samuel Teixeira
Samuel Teixeira
Tiye (Malawi)
Software Engineer (Flutter, Contract)
Feb 2025 → Jun 2025

Tiye Super App - Taxi, Jobs, and Marketplace in Flutter

Owned delivery of core modules (Taxi, Jobs, Marketplace) in a Flutter super-app, integrating Maps/Geolocation and standardizing a UI → Notifier → Service → Model flow to scale features safely.

Tech Stack

Flutter
Dart
Provider
Dio
Google Maps
Geolocator
flutter_secure_storage
infinite_scroll_pagination

Key Metrics

20 verified commits (extracted slice, Feb–Jun 2025)
5+ modules delivered (Taxi, Jobs, Marketplace, Auth, Search, Media/News, Property)
Integrations: Google Maps/Geolocator, YouTube; OneSignal present in the project (team)

Summary

  • Delivery: end-to-end modules for Taxi (ride-hailing), Jobs (board + application wizard), and major Marketplace evolution (listings, seller tools, negotiation flows).
  • How I unlocked scale: standardized a UI → Notifier → Service → Model flow with defensive parsing and reusable building blocks to keep shipping without breaking screens.
  • Practical effect: the app gained real “product features” (not just screens), with higher-risk integrations (maps/location/uploads) and a more modular codebase by domain.

Over ~4 months, I owned and stabilized critical features in a Flutter super-app, integrating REST APIs and high-coupling modules (maps, ride state, file uploads) under constraints of limited quality infrastructure (tests/CI) and high delivery pressure.

Context

  • Product and users: a multi-domain super-app (services + marketplace) with experiences for end users and role-specific areas (e.g., seller/driver).
  • Why it mattered: Taxi and Marketplace are core retention/monetization loops-without them the app becomes a static showcase.
  • Real constraints: low automated test coverage and limited delivery automation; changes needed to be incremental and production-safe.

Key Challenges

  • Complex state and flows (Taxi): multiple modes (driver/passenger), map synchronization, permissions, and the ride lifecycle.
  • Scaling without “spaghetti”: parallel features in the same app under time pressure, where rework is expensive.
  • Inconsistent API payloads: large domains (Marketplace/Property) requiring robust, null-tolerant parsing to prevent crashes.

What I did

  • Taxi & Ride-hailing: delivered the full flow (screens + state + integrations) with Google Maps and Geolocator, including notifier/service organization and reusable map components.
  • Jobs (board + apply): built listings, details, and a multi-step application wizard (including file upload), designed for reuse and iterative expansion.
  • Marketplace + Search + Seller tools: evolved listings with pagination/infinite scroll, improved search, and strengthened services/models to support seller dashboards and negotiation flows.
  • Auth & Roles: reinforced authentication with secure local storage and role-based access (User/Seller/Driver), reducing friction around session/token handling.
  • Media/News: integrated a media/news area with YouTube consumption.

Decisions & Trade-offs

  • Provider/ChangeNotifier as the active state pattern: kept domain logic out of screens via Notifiers and dependency injection through Providers.
    Trade-off: without strong architecture/tests, it requires discipline to avoid logic drifting back into UI.
  • Defensive model parsing (especially Marketplace/Property): prioritized tolerance to unstable payloads (nulls/missing fields).
    Trade-off: more “boring” mapper code, but fewer crashes and fewer urgent hotfixes.
  • Integrations first, polish later: maps/location/uploads are risk multipliers; tackling them early reduced rework.
    Trade-off: some visual/UX refinement is deferred until core flows are stable.

Results

  • Measured (engineering): 20 verified commits in the extracted slice (Feb–Jun 2025), with larger deliveries per commit.
  • Concrete technical proxies:
    • Taxi ride lifecycle with Maps/Geolocation integration and role-dependent flows (driver/passenger).
    • Jobs module with listing/detail and a multi-step application flow (including upload).
    • Marketplace evolution with pagination, search improvements, and seller-oriented tools/flows.
    • Role-based auth using secure local storage, plus Media/News integration with YouTube.
  • Operational impact: clearer separation by domain/feature (state + services + models), making it easier to keep multiple streams moving without stalling the app.

Note: sensitive product metrics (users/GMV/ride volume) were not accessible; technical evidence can be shared in a redacted “proof pack” upon request.

What I’d do differently

  • Add real tests (unit + widget/integration) and define a minimum non-negotiable baseline per feature (notifier + service + parsing).
  • Introduce CI/CD (build + lint + tests + checks) to reduce regressions and speed up delivery.
  • Remove unused dependencies or plan a migration with a clear strategy (e.g., keep the current pattern or migrate state incrementally with tests).