1// cache first, network second, never an empty screen 2Future<List<Part>> partsFor(Vin vin) async { 3 final cached = _box.get(vin.model); // Hive 4 if (cached != null && !cached.isStale) { 5 return cached.parts; 6 } 7 try { 8 final fresh = await _api.parts(vin); // Dio 9 await _box.put(vin.model, CachedParts(fresh));10 return fresh;11 } on DioException {12 return cached?.parts ?? const []; // offline13 }14}
25,000+ parts · offline-first
Simplified illustration — client code is private
Catalog UIPartsBlocRepository
Hive cacheDio APIVIN check
Drawn reconstruction
$ dynamu catalog --sync✓ 25,000+ parts cached✓ VIN compatibility check✓ offline browsing on
Drawn reconstruction
The problem
Buyers need the exact part for their car, often while standing in a workshop with a weak connection. The catalog is huge, so it has to be correct for the VIN and keep working offline.
What I built and owned
Offline-first browsing of 25,000+ parts cached on the device.
VIN-based compatibility so buyers get the right part the first time.
Clean Architecture with BLoC and a Dio networking layer.
Shipped to Google Play and the App Store — 10,000+ Google Play downloads.
Client product. Store pages are linked; catalog data and backend are not shown.