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 performance —
RepaintBoundaryper 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.