Офлайн PWA приложение для походов

Задача: сделать простое, автономное приложение для учёта участников экспедиции — в условиях, где нет ни связи, ни интернета.
Целевая аудитория: организаторы горных экспедиций.
Длительность разработки: ~40 часов.

Что приложение должно уметь

  • вести и редактировать список участников
  • быстро отмечать участников через сканирование QR-кодов с браслетов
  • передавать базу данных (или только изменения) между устройствами других организаторов — тоже через QR-коды и тоже без интернета

Не нативка...

Когда заказчик пришёл с идеей, первым делом встал вопрос: на чём делать? Идеально — конечно, нативное мобильное приложение. Но я в данный момент не разрабатываю нативные приложения ни под Android ни под iOS.

После обсуждений решили: делаем PWA — прогрессивное веб-приложение, которое работает в браузере, но при этом умеет работать офлайн, обращаться к камере и запускать сканер QR-кодов. Это был мой первый опыт разработки offline-first приложения, и стало понятно: идея рабочая, технологии позволяют. Ну а дальше — дело техники.

Дизайн и логика

Начал с проектирования: какие сценарии у пользователей, что им нужно на экране, какие кнопки, где и в каком порядке. Нарисовал прототипы, обсудили с заказчиком, утвердили. После этого сразу в код.

Разработка

Для реализации использовал Nuxt 3. До этого я работал с ним в основном при создании сайтов, но было интересно посмотреть, как он себя поведёт в приложении. Повёл отлично — разработка шла быстро, структура проекта получилась чистой и понятной.

Передача базы через QR-коды? Серьёзно?

Да, звучит диковато — но вполне реально. В условиях, где нет Bluetooth, интернета или локальной сети, нужно что-то надёжное и предсказуемое. Так родилась идея передавать данные через QR-коды.

Если нужно передать всю базу — разбиваем её на несколько QR-кодов. Если только изменения — так вообще всё влезает в один. Немного математики, немного сжатия, и всё работает. Не так уж и безумно, как может показаться на первый взгляд.

Что в итоге?

Сейчас приложение проходит финальное тестирование в реальных условиях — где-нибудь в горах, далеко от цивилизации. Уже работает офлайн, умеет сканировать, передавать и обновлять базу. Получился интересный проект, в котором удалось объединить практичность, удобство и нестандартные технические решения.