Як один реальний біль перетворився на iOS-продукт для швидкої бізнес-комунікації
У малого бізнесу рідко болить «технологія заради технології». Болить рутина: одні й ті самі повідомлення, копіювання з нотаток, ручні правки дати/часу/послуги, постійне перемикання між месенджерами.
Саме так і народився TypeOnce.
Я бачив, як моя дружина — власниця салону краси — щодня відправляє однакові тексти клієнтам: підтвердження запису, нагадування, уточнення деталей. Змінюються лише дрібні частини, але часу це з’їдає непропорційно багато.
Так з’явилась ідея зробити інструмент, який працює всюди, де є поле вводу: у месенджерах, пошті, нотатках, CRM-інструментах у браузері.
Тобто не черговий «текстовий менеджер», а кастомна клавіатура для iOS, яка вставляє готові, структуровані повідомлення в будь-який застосунок.
Переглянути додаток в App Store
Що вирішує TypeOnce для бізнесу
TypeOnce закриває три ключові задачі:
— прибирає хаос із копіюванням і ручним редагуванням;
— прискорює щоденну комунікацію без втрати якості;
— стандартизує повідомлення команди (менше помилок, стабільний tone of voice).
Результат простий: менше механіки — більше сервісу.

Продуктовий сценарій: один шаблон, багато ситуацій
Користувач створює шаблон один раз, а далі:
1. обирає його прямо в клавіатурі;
2. заповнює лише змінні частини;
3. отримує фінальний текст за кілька секунд.
Замість ручного редагування повідомлень — керована підстановка параметрів.
Технічна архітектура: чому це стабільно і масштабовано
1) Єдина система з двох рантаймів: App + Keyboard Extension
TypeOnce має:
— основний iOS-додаток (керування шаблонами, параметрами, структурами);
— keyboard extension (використання шаблонів у сторонніх застосунках).
Дані між ними синхронізуються через спільний контейнер (App Group) і єдину SQLite-базу.
Тобто те, що створено в app, одразу доступно в клавіатурі.
2) Strict unidirectional flow на базі TCA
В архітектурі використано The Composable Architecture (TCA):
— кожна фіча має свій State, Action, Reducer;
— бізнес-логіка живе в reducer’ах, а не у View;
— залежності інжектяться через @Dependency, що спрощує тестування та контроль ефектів.
Це дає передбачуваний флоу:
Intent/Action -> Reducer -> Effect/DB -> New State -> UI.
3) Чому зв’язка TCA + SQLiteData виявилась найкращою
Persistence-рівень побудований на SQLiteData (Point-Free) + GRDB.
І саме ця зв’язка дуже органічно лягає на TCA:
— читання даних через @FetchAll добре вбудовується у feature-state;
— запис у БД контролюється з reducer’ів через dependency, а не через View-контекст;
— динамічні запити і міграції залишаються прозорими;
— одна модель роботи і для app, і для extension.
На відміну від цього, SwiftData більш View-oriented (@Query, modelContext через environment).
Для чистої reducer-first архітектури це часто створює тертя: persistence-поведінка тяжіє до UI-шару, а в TCA навпаки хочеться, щоб UI був максимально «тонким».
У нашому кейсі саме SQLiteData + TCA дала стабільність, контроль і комфорт розробки без помітних компромісів.
4) Клавіатура теж на TCA і shared feature-підході
Клавіатура в TypeOnce — не «окремий маленький додаток на швидку руку».
Вона використовує той самий архітектурний принцип:
— KeyboardFeature з власним State/Action/Reducer;
— shared-підхід до доменних моделей і бізнес-логіки;
— параметричні сценарії (picker/multipicker/random/date) також проходять через reducer pipeline;
— збірка фінального тексту відбувається через окремий composer-сервіс.
Це критично для підтримуваності: логіка не дублюється між app і extension, а розвивається як єдина система.
Функціональні фішки, які дають бізнес-ефект
— шаблони та папки для швидкої організації сценаріїв;
— динамічні параметри: picker, multipicker, random, date;
— системні теги на кшталт позиції курсора й вставки з буфера;
— дії до/після вставки (очистити текст, закрити клавіатуру тощо);
— preview-режим клавіатури для тестування сценаріїв;
— аналітика та crash-reporting для контрольованого покращення продукту.
Чому це цікаво компаніям і маркетингу
TypeOnce — це швидкий «побутовий automation layer» для команд, що багато пишуть вручну:
— салони, клініки, сервісні команди, support, sales;
— менше часу на однотипні відповіді;
— менше помилок у комунікації;
— швидший онбординг співробітників;
— краща консистентність бренду в текстах.
Простіше кажучи: операційна економія щодня, без складних інтеграцій.
Висновок
TypeOnce виріс із реальної щоденної проблеми й став інструментом, який помітно підвищує швидкість робочої комунікації.
Технічно проєкт побудований на сильному фундаменті (TCA + SQLiteData + keyboard extension), а продуктово — вирішує зрозумілу і масову задачу.
Якщо вам цікаві продукти на стику UX-швидкості, мобільної архітектури й прикладної автоматизації, TypeOnce — саме такий кейс.
Корисні посилання
— App Store: typeonce — Quick Keyboard
— Point-Free: SQLiteData 1.0
— Point-Free: SQLiteData / SharingGRDB intro
— SwiftData caveats: SwiftData pitfalls (Wade Tregaskis)
— SwiftData production considerations: Fatbobman analysis
3 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівреальна біль)), біль-іменник чоловічого роду
Ще раз переконуюся, що свої 6 балів з української мови в школі я отримав заслужено 😅
Дякую, що виправили!
цікаво!!