Open Finapp
Разработка

Офлайн и PWA

Как Финапка работает офлайн как прогрессивное веб-приложение.

Установка PWA

Финапка - прогрессивное веб-приложение (PWA). Его можно установить на устройство для нативного опыта:

  • Десктоп - значок установки в адресной строке
  • Мобильные - «Добавить на главный экран» из меню браузера

Приложение открывается в автономном режиме (standalone) без интерфейса браузера.

Офлайн

Финапка работает по принципу offline-first. Все данные лежат в локальной базе SQLite в браузере (на основе PowerSync, хранится в IndexedDB). Транзакции, кошельки и категории можно создавать, редактировать и удалять без интернета - чтение и запись всегда идут сначала в локальную базу, поэтому интерфейс не ждёт сети.

Как синхронизируется запись

Любая запись сразу попадает в локальную SQLite и фиксируется во встроенной очереди отправки PowerSync. Пока вы офлайн, очередь просто ждёт.

При восстановлении связи PowerSync автоматически и по порядку отправляет очередь на сервер (Supabase). Здесь нет ручной очереди и нет временных клиентских ID, которые нужно переотображать - каждая строка несёт сгенерированный на клиенте UUID, одинаковый и на устройстве, и на сервере.

Если сервер навсегда отклоняет запись (например нарушение row-level security или ограничения), это изменение отбрасывается, чтобы не блокировать очередь, и приложение показывает тост об ошибке синхронизации - чтобы вы знали, что локальная копия теперь опережает сервер.

Как чтение остаётся актуальным

Приложение подписано на локальную базу. Любое изменение - от вашей записи или от входящей синхронизации с другого устройства - перезапускает нужные запросы и обновляет интерфейс. Одна и та же подписка отвечает и за первичную загрузку, и за живые обновления, поэтому второе устройство видит ваши изменения вскоре после их синхронизации.

Стратегия синхронизации

PowerSync реплицирует строки каждого пользователя инкрементально: после первой полной синхронизации передаются только изменения (вставки, обновления и удаления) для таблиц, на которые вы подписаны. Курсы валют - общий поток только для чтения, доступный всем пользователям. Стратегию не нужно выбирать под тип данных - она инкрементальна для всего.

Единственное исключение - демо-режим: у него нет бэкенда, и он сохраняет данные в localforage, чтобы перезагрузка работала без входа.