Книги и аудиокниги в одном приложении, даже без интернета
Читает EPUB, FB2 и PDF и проигрывает аудиокниги MP3 и M4B. Книги хранятся в телефоне и открываются без интернета, во встроенном магазине 20 бесплатных классических книг.
Личный проект Mykhailo Plokhin. Устанавливается из браузера на Android и iPhone.
Next.js · TypeScript · IndexedDB · OPFS · Service Worker



Задача
Большинство читалок умеют либо текст, либо аудио, просят аккаунт или ломаются на настоящих файлах: странные кодировки, папки в архивах, MP3 без глав.
- Русские FB2 бывают в windows-1251 или koi8-r, и часто с неверной пометкой.
- Аудиокнига — это обычно папка файлов или ZIP из приложения «Файлы» на iPhone.
- Читать и слушать одну книгу — значит держать в согласии две позиции.
Как устроено
Всё работает в браузере. Файлы проходят через одни и те же парсеры, откуда бы они ни пришли — с телефона или из магазина; записи хранятся в IndexedDB, большие файлы — в приватной файловой системе браузера.

Ключевые решения
Каждое решение и альтернатива, которую оно обошло.
Разбирать книги в браузере, без сервера
Книги не покидают устройство, а бэкенд не нужно ни держать, ни оплачивать.
Потоковое чтение ZIP
Папка аудиокниги, сжатая на iPhone, может весить гигабайты. Чтение записей потоком не держит их в памяти — включая архивы ZIP64 и русские имена файлов.
Большие файлы в приватной файловой системе
Origin Private File System хранит большие файлы без ограничений старых хранилищ; старый iOS Safari откатывается на IndexedDB.
Одна позиция для текста и аудио
Если у книги есть аудиоверсия, при переключении место переносится по главе и по тому, насколько далеко вы в ней были.
Цифры
Boowie работает: откройте его на телефоне и добавьте на главный экран. Все цифры здесь проверены в коде или в рабочем приложении.
| Показатель | Что значит | Основание |
|---|---|---|
| 5Форматы | EPUB, FB2, PDF, MP3 и M4B, а также ZIP-архивы с ними.Проверено | Проверено |
| 20Бесплатных книг | Книги из общественного достояния во встроенном магазине; аудиокниги озвучены RHVoice.Проверено | Проверено |
| OfflineРаботает | Service worker кэширует приложение, а книги хранятся на устройстве.Проверено | Проверено |
- Проверено
- — Проверено в коде или на рабочей версии
Нужно что-то похожее?
Опишите задачу в паре строк. Ответит человек из команды.
Обсудить проект