All projects
SaaS · Service marketplace Case study Active

Evolvo — Multi-Surface Service Booking Ecosystem

Four surfaces — consumer mobile, provider mobile, web dashboard, and a Windows desktop operations app — from one Clean Architecture Flutter codebase backed by Supabase.

My role
Primary Flutter Developer
Period
February 2026 – Present
Related experience
Evolvo Tech

Evolvo Tech builds digital tooling for service-industry businesses. The product connects customers who book services with providers who fulfil them, plus an operations team that manages onboarding and platform health. I own the entire Flutter front-end across four surfaces, all from a single shared codebase.

The four surfaces

Consumer mobile (Android/iOS) — discover, book, and track services with real-time availability via Supabase Realtime; a multi-step booking BLoC with local persistence so in-progress bookings survive backgrounding.

Provider mobile (Android/iOS) — manage availability and respond to bookings. The availability calendar is custom-built with CustomPainter (column-per-day, pixel-per-minute slots) and GestureDetector drag-to-select, handling hundreds of slots without jank.

Windows desktop (operations) — the most technically distinctive surface. Flutter Desktop with sidebar navigation, data tables, two-panel layouts, keyboard shortcuts, right-click menus, window-state persistence, native file pickers for document-heavy onboarding, and MSIX packaging with an auto-update check.

Web dashboard — a Flutter Web target for analytics and higher-level reporting.

Architecture

Feature modules contain the shared data + domain layers; each app_* directory holds a surface’s presentation layer, with build-time flavors selecting the entry point. Roughly 75% of the code is shared; the ~25% divergence is presentation and platform integrations. Supabase provides Postgres, Auth, Realtime (Postgres CDC), and Storage, with Row Level Security enforced at the database.

Technical focus

  • Realtime channel lifecycle — subscribe on feature activation, unsubscribe on disposal, so a booking update reaches consumer, provider, and desktop simultaneously without leaking channels.
  • CustomPainter performanceRepaintBoundary per day column so a single slot change repaints only that column.
  • RLS across roles — a (role × operation × resource) assertion matrix tested before any policy was considered complete.

Result

A production multi-surface ecosystem proving that designing for mobile, web, and desktop from day one is far cheaper than retrofitting — and that Flutter Desktop is production-ready when you respect its platform conventions.