Background Sync
Feature Detail
Description
Background Sync manages the asynchronous synchronization of queued mutations between the offline local database and the backend REST API. The service runs on a retry-backoff schedule to handle transient network failures gracefully. It maintains a persistent sync queue in the local database and ensures all pending mutations are eventually delivered to the server, providing a seamless experience when connectivity is restored after periods of offline use on both iOS and Android.
Sources & reasoning
Line 302 explicitly lists "sync queue with retry/backoff" as part of the core offline architecture. The blueprint assigns dedicated components BackgroundSyncService and RetryBackoffScheduler to this feature, confirming it is distinct from the outbox storage layer. Blueprint marks it [MVP], consistent with offline-first being a Phase 1 foundational requirement across all organizations.
-
docs/source/likeperson.md · line 302Offline-first persistence (Drift + SQLCipher encrypted local DB, mutation outbox, sync queue with retry/backoff, ID mapping for offline-created entities, conflict resolver)
Analysis
Background sync is the operational backbone that makes offline-first viable in production. Without reliable background synchronization, data captured offline requires manual user action to upload, leading to missed syncs and data loss. Peer mentors with intermittent connectivity need confidence that registered activities will reach the backend without intervention. The retry-backoff scheduler prevents API overload during reconnection storms and ensures individual record failures do not block the entire queue. This reliability directly supports accurate Bufdir reporting, as unsynced activities would create gaps in the data Org Admins export from the Admin Web Portal.
Implemented as a Flutter background isolate or WorkManager task (BGTaskScheduler on iOS, WorkManager on Android) that polls the SyncQueueRepository for pending mutations. The retry scheduler uses exponential backoff with jitter to avoid thundering herd on reconnection. Each sync attempt updates the queue record's retry count and last-attempt timestamp. Successful mutations are marked complete and pruned from the queue on a configurable retention schedule. The service integrates with the connectivity stream to trigger an immediate sync pass on network restoration while respecting platform background execution time limits enforced on both iOS and Android.
Quality Assurance
Peer Mentor (primary) · Coordinator (same flow)Peer Mentor
Quick UAT
- Sett enheten i flymodus. Logg inn i Meander-appen som Peer Mentor og Äpne Aktiviteter-fanen.
- Registrer en ny aktivitet (f.eks. telefonsamtale, 30 min) og lagre. Bekreft at aktiviteten vises i listen med et ventende synkroniseringsikon.
- Naviger til Innstillinger â Synkroniseringsstatus og bekreft at Ă©n post vises som «Venter pĂ„ sending».
- Deaktiver flymodus og gjenopprett nettverkstilkobling. Vent opptil 30 sekunder uten Ă„ gjĂžre noe.
- Bekreft at synkroniseringsikonet forsvinner fra aktiviteten og at «Venter pÄ sending»-telleren i Innstillinger viser null.
- Ă pne Admin Web Portal i en nettleser (koordinator eller admin) og bekreft at aktiviteten er synlig i aktivitetsoversikten.
Quick UAT â Accessibility
-
Sett enheten i flymodus. Logg inn i Meander-appen som Peer Mentor og Äpne Aktiviteter-fanen.
- Screen reader Sidetittel «Aktiviteter» annonseres ved lasting; statuslinje annonserer «Flymodus aktivert».
- Keyboard / focus Tab-rekkefĂžlge: bunnavigasjon â liste; Aktiviteter-fane nĂ„s med Ă©n Tab.
- Focus visibility Synlig fokusring pÄ bunnavigasjonselementer; tab-ikon er merket «Aktiviteter».
-
Registrer en ny aktivitet (f.eks. telefonsamtale, 30 min) og lagre. Bekreft at aktiviteten vises i listen med et ventende synkroniseringsikon.
- Screen reader «Aktivitet lagret» annonseres etter lagring; synkroniseringsikonet har label «Ikke synkronisert».
- Touch target Lagre-knapp â„ 24Ă24 CSS px; synkroniseringsikon â„ 24Ă24 CSS px.
- Contrast Synkroniseringsikon formidler status via ikon + label, ikke farge alene; 4.5:1 for label-tekst.
-
Naviger til Innstillinger â Synkroniseringsstatus og bekreft at Ă©n post vises som «Venter pĂ„ sending».
- Screen reader Listelement annonseres som «Venter pÄ sending, 1 post».
- Keyboard / focus Innstillinger nÄs via hamburgermenyen med Tab + Enter; Synkroniseringsstatus nÄs med piltaster.
- Focus visibility Synlig fokusring pÄ Innstillinger-knappen og pÄ statuslinjen i listen.
-
Deaktiver flymodus og gjenopprett nettverkstilkobling. Vent opptil 30 sekunder uten Ă„ gjĂžre noe.
- Screen reader Nettverksgjenopprettelse fÞrer ikke til pÄtrengende annonsering; statuslinje melder stille tilstandsendring.
- Zoom Synkroniseringsstatusseksjonen er lesbar ved 200% zoom uten horisontal scroll.
-
Bekreft at synkroniseringsikonet forsvinner fra aktiviteten og at «Venter pÄ sending»-telleren i Innstillinger viser null.
- Screen reader Oppdatert teller «0 poster venter» annonseres automatisk av live region.
- Live region «Synkronisering fullfÞrt. Alle aktiviteter er sendt.» annonseres via polite live region.
- Contrast «FullfÞrt»-tilstand skilles fra «Venter» via ikon-shape + label, ikke kun farge.
-
Ă pne Admin Web Portal i en nettleser (koordinator eller admin) og bekreft at aktiviteten er synlig i aktivitetsoversikten.
- Keyboard / focus Ingen mobil a11y-krav; verifisering skjer i nettleserkontekst.
- Contrast Aktivitetsraden i portalen har 4.5:1 kontrast for all informasjonstekst.
Role Boundaries
3 role(s) must NOT access this feature-
Organization Administrator
Organisasjonsadministrator logger kun inn i Admin Web Portal og har ikke tilgang til mobilappen; bakgrunnssynkronisering er ikke tilgjengelig for denne rollen.
-
Global Administrator
Global administrator har ikke mobil-innlogging; et forsÞk pÄ Ä logge inn i mobilappen omdirigeres til admin-portalen og gir ingen tilgang til synkroniseringsfunksjoner.
-
Prospective Organization Representative
Prospektive organisasjonsrepresentanter har kun tilgang til det offentlige salgswebstedet; mobilappen og bakgrunnssynkronisering er utilgjengelig.
Expected End State
Aktiviteten er persistert pÄ serveren og vises i Admin Web Portal; synkÞen pÄ enheten er tÞmt og RetryBackoffScheduler har ingen ventende forsÞk.
Components (21)
Shared Components
These components are reused across multiple features
User Stories
No user stories have been generated for this feature yet.