Skip to main content
Status: ✅ Implemented
Last Updated: 2025-10-18
Version: 2.0.0
Related: Offline-First POS, Hybrid Sync

🎯 Overview

Pure Local Architecture adalah evolusi dari offline-first strategy yang memastikan 100% data read dari Isar dengan background sync menggunakan SWR (Stale-While-Revalidate) pattern.

Key Principles

  1. Always Local First: Semua read operation dari Isar DB (< 10ms)
  2. Background Sync: API calls non-blocking, update Isar silently
  3. No Loading Spinner: UI selalu show data, never wait for API
  4. Offline = Online: Consistent UX regardless of network state

🏗️ Architecture

Flow Diagram


📊 Implementation Status


💻 Code Implementation

Service Pattern Template

Real Implementation Examples


🎨 UI Pattern

No Loading Spinner

JANGAN show loading spinner untuk data refresh!

Isar Stream for Auto-Update

Pull-to-Refresh


🚀 Benefits

User Experience

⚡ Instant Load

Data muncul < 10ms dari Isar, tidak ada loading spinner

📱 Offline = Online

UX konsisten, app selalu berfungsi tanpa network

🔄 Auto-Update

Background sync silent, user tidak perlu manual refresh

🎯 No Blocking

User bisa langsung interaksi, tidak tunggu API

Developer Experience

🧪 Easy Testing

Mock Isar lebih mudah daripada mock API

🐛 Better Debugging

Data selalu ada di local, mudah inspect

📝 Simple Code

Tidak ada complex fallback logic

🔧 Maintainable

Single source of truth (Isar)

Performance

  • Fast: Isar query < 10ms vs API 100-500ms
  • Reduced API Calls: Background only, tidak setiap screen
  • Battery Friendly: Less network activity
  • Scalable: Isar handle millions of records

📋 Migration Checklist

From API-First to Pure Local

  • Service Layer
    • Tambah _getDataLocalOnly() method
    • Tambah _triggerBackgroundRefresh() method
    • Refactor getData() → pure local + SWR
    • Tambah connectivity check
    • Tambah error handling
  • UI Layer
    • Remove loading spinner untuk refresh
    • Add Isar stream untuk auto-update
    • Show empty state (bukan loading) jika Isar kosong
    • Add pull-to-refresh (optional)
  • Testing
    • Test offline mode (airplane mode)
    • Test online mode (background refresh)
    • Test first launch (empty Isar)
    • Test auto-update (Isar stream)

Offline-First POS

Complete offline-first architecture

Hybrid Sync Strategy

Hybrid sync patterns

Delta Sync

Real-time incremental updates

Offline Quick Start

5-minute quick start guide

📚 Code References

Backend (Go)

  • internal/domains/*/service.go - Service layer
  • internal/domains/*/repository.go - Repository layer
  • internal/domains/*/handler.go - HTTP handlers

Mobile (Flutter)

  • lib/core/*/service.dart - Service layer dengan SWR
  • lib/core/*/repository.dart - Repository layer
  • lib/database/isar/entities/*.dart - Isar entities
  • lib/features/*/bloc/*.dart - Bloc state management

🎯 Best Practices


🎓 Summary

Pure Local Architecture + SWR adalah pattern yang memastikan:
  1. ✅ 100% data dari Isar (instant load)
  2. ✅ Background sync (silent update)
  3. ✅ No loading spinner (always show data)
  4. ✅ Offline = Online (consistent UX)
Result: App yang super fast, always works, dan auto-update tanpa user intervention.
Dokumentasi ini adalah living document. Update sesuai dengan evolusi implementation.