Разработка и AI

Приложение выдачи топлива — от кликабельного прототипа до APK на планшете

Мобильное приложение для водителей автотопливозаправщика · Android-планшеты · работает без связи

Топливо выдают там, где нет интернета — на карьерах и стройплощадках. Поэтому приложение спроектировано офлайн-first: все операции пишутся в локальную базу и уходят на сервер сами, когда связь появляется. Водитель не ждёт сети и не теряет данные.
8
экранов в прототипе
полный цикл смены
31
тест синхронизации
включая обрывы и дубли
2 058
единиц техники
в офлайн-справочнике
APK
собран и протестирован
на реальном планшете
Кликабельный прототип

Прототип собран до написания приложения, чтобы проверить логику смены на кликах. Все переходы рабочие: вход по PIN, старт смены, выдача, получение топлива, правки и закрытие.

Выдача топлива — кликабельный прототип
Открыть в отдельном окне ↗

Прототип рассчитан на планшет в горизонтальной ориентации — на широком экране удобнее. PIN для входа: 1234. Внутри также доступны схема потока экранов и спецификация адаптации.

Как устроено
1. Операция на планшете
2. Локальная база SQLite
3. Очередь на отправку
4. Сервер, когда есть связь
Экран никогда не ждёт сеть: запись считается сохранённой в момент подтверждения на планшете. Отдельная очередь — под фотографии накладных, они тяжелее и догружаются независимо от самих операций.
Офлайн-first — полный цикл смены работает без единого запроса в сеть
Очередь операций — отправка с повторами, устойчивая к обрыву связи посреди передачи
Отдельная очередь фото — накладные догружаются независимо, не блокируя операции
Справочник на борту — 2 058 единиц техники и 42 организации доступны офлайн
Остаток считается сам — от объёма в цистерне вычитается каждая выдача
Свой бэкенд — отдельный сервер с базой, HTTPS и автоперезапуском процессов
Что было сложным
01
Синхронизация
Офлайн-приложение ломается не на экранах, а на пограничных случаях: операция ушла дважды, связь оборвалась в середине загрузки фото, одно повреждённое событие роняет весь пакет. Ядро синхронизации закрыто 31 автотестом — отдельно на каждый такой сценарий.
02
Тест на живом устройстве вместо симулятора
Собранный APK прогонялся на настоящем планшете. Нашлось 10 проблем — от поля ввода, где шрифт не помещался в контейнер, до неверной подписи ошибок сети. 9 исправлено в следующей сборке. Проверка на устройстве дала больше, чем весь предыдущий прогон в эмуляторе.
Путь проекта
Прототип · Бэкенд на сервере · Приложение · Сборка APK · Тест на планшете · Пилот
Технологии

Мобильная часть, сервер и инфраструктура — всё делалось самостоятельно, включая настройку боевого сервера.

React Native · Expo
TypeScript
SQLite на устройстве
Node.js · Express
PostgreSQL
Nginx · HTTPS
EAS Build · APK
Автотесты
Что стоит за этим кейсом
01
Сначала прототип, потом код
Логику смены проверили на кликабельном прототипе до первой строчки приложения — дешевле переставить экран, чем переписать реализацию
02
Тесты там, где действительно больно
31 тест на синхронизацию — участок, где ошибка означает потерянные данные
03
Доведено до устройства в руках
Не демо на ноутбуке: собранный APK, установленный на планшет, найденные на нём баги и следующая сборка с исправлениями