[{"data":1,"prerenderedAt":39},["ShallowReactive",2],{"blog-en":3},{"posts":4,"fallback":38},[5,17,28],{"path":6,"slug":7,"key":7,"title":8,"description":9,"date":10,"tags":11,"cover":15,"minutes":16},"/blog/en/offline-first-flutter-supabase","offline-first-flutter-supabase","Offline-first with Flutter and Supabase: an outbox, not spinners","How MoneyKoi works offline-first with Flutter and Supabase: SQLite as the source of truth, an outbox with retries and a single delta sync back from the server.","2026-10-31T00:00:00.000Z",[12,13,14],"Flutter","Supabase","Offline-First","/images/blog/offline-first-flutter-supabase/cover.en.webp",10,{"path":18,"slug":19,"key":20,"title":21,"description":22,"date":10,"tags":23,"cover":26,"minutes":27},"/blog/en/receipt-scanner-flutter-ml-kit","receipt-scanner-flutter-ml-kit","rksv-qr-code-auslesen","A receipt scanner in Flutter: ML Kit, RKSV QR codes, no LLM","How MoneyKoi's receipt scanner in Flutter reads Austrian RKSV QR codes, extracts line items with ML Kit and per-shop parsers, and checks the total on the phone.",[12,24,25],"ML Kit","OCR","/images/blog/rksv-qr-code-auslesen/cover.en.webp",11,{"path":29,"slug":30,"key":30,"title":31,"description":32,"date":10,"tags":33,"cover":36,"minutes":37},"/blog/en/supabase-rls-multi-tenant","supabase-rls-multi-tenant","Supabase RLS for multi-tenant apps: one header, two rules","Supabase RLS for multi-tenant apps: how MoneyKoi checks the active tenant with a header and a pre-request hook, and secures reads and writes differently.",[13,34,35],"PostgreSQL","Security","/images/blog/supabase-rls-multi-tenant/cover.en.webp",8,false,1793537119120]