Я зробила застосунок для відстеження лабораторних аналізів: досвід інді-деву на айпаді та квест з публікацією в App Store

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Навесні друг розказав мені, як він за допомогою AI створив веб-застосунок, який вже має свою авдиторію. Це змусило мене задуматись, а чому я ще цього не зробила. Знаєте, оця травма «а чого не 12?». Так почався експеримент, який зрештою привів мене до першого застосунку в App Store.

Якось в той момент зійшлися зорі, що навіть ідея застосунку вже висіла в повітрі

Я шукала спосіб зберігати свої медичні аналізи в одному місці, бо здавала їх в різних лабораторіях, клініках. І до початку розробки сталася прям канонічна подія: на прийомі лікарка спитала, який був показник глюкози останній раз, коли я здавала її, я так і не знайшла в телефоні. 1 + 1 = «окей, Claude, розкажи мені, як зробити мобільний застосунок».

Хотілося мати застосунок, де всі результати автоматично впорядковуються, а зміни показників можна побачити на графіку. Так з’явилася VisuVena. Ну як з’явилась — була зачата.

Був використаний не один фреймворк

Перший прототип з’явився як веб-застосунок на Replit, без ноутбука, тільки iPad і браузер, бо свій ноутбук я продала за три місяці до цього. Потім був PWA для Android, який вже три місяці висить в Google Play Market, бо я не знайшла 12 знайомих з Android для внутрішнього тестування, яке зараз обов’язкове на маркеті. На той момент я вже так загорілася, що веба мені було замало — треба писати нативні застосунки! Так в мене з’явився MacBook, Xcode, Claude Code, Apple Developer account. Ну і мене за-Swift-тало.

Якщо подивитися на історію проєкту, вона виглядає приблизно так: React + Vite → PWA → React Native → SwiftUI. Цікавий був «завтик» у Claude, коли iOS застосунок я вирішила переписувати з React Native на SwiftUI — каже мені: «цей підхід може зайняти багато часу, ти ж не знаєш Swift». Відповіла йому, що мені його знати і не потрібно. Ну вибачте, я все ж не мову програмування прийшла сюди вчити.

Вибір стався на користь SwiftUI, бо це нативний UI, SwiftData для локального збереження даних, PDFKit, який в результаті все ж був замінений на AI через негнучкість. Я не хотіла зберігати користувацькі дані, ну щоб оце потім не ускладнювати комплаянси та консенти. Але є нюанс, який важливо визнати чесно: фактично відповідальність за дані була перекладена на самого користувача — йому необхідно періодично вручну бекапити та зберігати бекапи або на телефоні, або в клауді.

AI виявився кращим за regex (неожиданно)

Спочатку намагалася парсити медичні документи через Apple Vision Framework і regex. Теоретично звучить ідеально — нативно, без зовнішніх сервісів, privacy-first. На практиці: кожна лабораторія (Сінево, ДІЛА та інші) має свій формат таблиць, різне розташування колонок, різні назви полів. Regex ламався на кожному новому документі.

Зрештою прийняла інше рішення: відправляємо PDF напряму в Gemini. Він сам читає структуру документа і повертає JSON з показниками, одиницями і референтними значеннями. Backend транзитний — дані з Gemini повертаються в SwiftData.

Публікація в App Store як окремий квест

Потрібно підписати Agreement, заповнити Legal Entity інформацію, надати документи, налаштувати банківські реквізити, заповнити trader status для ЄС. Перший реджект прийшов з чотирма зауваженнями одразу: privacy consent для AI, незаповнені метадані IAP, ціна на скріншоті і неробоча сторінка підтримки. Кожен пункт — банальна неуважність.

Додам, що картинки для App Store генерував ChatGPT, мені довелося купити свій домен, на якому я опублікувала персональний сайт з усіма проєктами, на якому зʼявилася сторінка сапорта VisuVena (покупка домена чисто моя примха, бо не хотіла «жити» на vercel.app).

Зараз буде висновок

За три місяці VisuVena пройшла шлях від ідеї до застосунку в App Store. Для мене це був не просто спосіб створити продукт, яким я сама користуюся. Це був челлендж а-ля «всі роблять, а я шо, гірше». Виходить, що сьогодні одна людина може втілити власну ідею значно швидше, ніж будь-коли раніше.

Я б хотіла сказати, що АІ зробив додаток за мене, але, на жаль, ні — я проводила декілька годин щоденно за розробкою і тестуванням, я приймала рішення щодо функціоналу і UX, навіть UI зазнав декількох ітерацій, бо початково він був «занадто АІ-шний». Також не обійшлося без ситуацій «ой, ти дійсно права, це не буде працювати». Дівчинко моя, я завжди права.

VisuVena доступна в App Store, туть.

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Чи є там показ у % від норми?

Ні, відсотка немає — з досвіду з таким не стикалася. Є показник фактичний та референтні значення і флаг low/high

Проблема виникне на відображенні загальної статистики і трендах. Полягає у тому, що є деякі аналізи (популярні!), які у різних лабах мають трохи інший діапазон. Наприклад, Залізо, у Лабсервіса 11-28, а у Синево 5.83-34.5. На скріні видно, що зелений результат Синево був би рожевим по міркам Лабсервіса, і навпаки. Я раніше гадав, що це просто їх статистика власна, але ні. Різні реагенти, різне обладання, і все, цей аналіз вже в спільний графік не помістиш. А є ще Кортизол, там у Лабсервіса діапазон 171-536 нмоль/л, а у Синево 6.2-19.4 мкг/дл. Що там у ніших лабах твориться навіть не уявляю. Ще пригадаю переможця моєї статистики — міська поліклініка просто написала на якийсь показник «завищений».

Дуже дякую за цей коментар. Насправді я не знала, що один показник може по-різному досліджуватись та мати різні шкали. Додам в додаток нормалізацію.

Підписатись на коментарі