Mommy RefuelТрохи більше простору для тебе.
UK
ОНОВЛЕННЯ ПРОДУКТУ

ШІ-асистент переїжджає на AWS,і повний аудит готовності

Оновлення продукту · 6 хв читання

Один довгий день: Refuel AI отримав постійний дім на AWS, я перевірив весь ланцюжок автентифікації й безпеки від початку до кінця, і вийшли дві збірки TestFlight.

Маркетинговий скриншот App Store із заголовком «Приватний асистент на вашому боці» на тлі екрана Refuel AI.
Маркетинговий екран Refuel AI — зі скриншотів для App Store.

Головне

  • Переніс AI-проксі за Refuel AI з тимчасового self-hosted сервера на AWS Lambda Function URL, з підтримкою Anthropic, OpenAI і Gemini в одному контракті.
  • Виправив реальний баг: власні ключі Info.plist (URL бекенду, підтримки, приватності) тихо не потрапляли в застосунок через те, як Xcode генерує Info.plist.
  • Провів повний аудит готовності до продакшену: доступ до ШІ через автентифікацію, чесні стани помилок замість фейкових відповідей, синхронізована безпека кризових слів на всіх бекендах, і звужений експорт даних.
  • Оновив декларації App Privacy застосунку й публічну політику приватності (EN/UK), бо запити ШІ тепер справді залишають пристрій.
  • Випустив TestFlight-збірки 5 і 7 (1.4.0) і чесно переписав mommyrefuel.com для тестувальників і майбутніх інвесторів.
01

З чого почався день

Self-hosted AI-проксі з двох днів тому працював, але ніколи не мав бути постійним — він жив на інфраструктурі, від якої я не хотів залежати довгостроково, і чисто розмовляв лише з одним провайдером ШІ. 2 вересня 2026 я перебудував його як слід, а решту дня провів, перевіряючи все, що йде за ним — бо функцію ШІ, яка торкається даних про добробут матері, я не готовий випускати на віру.

02

Справжній дім на AWS Lambda

Я побудував невеликий обробник AWS Lambda без зайвих залежностей, за Function URL, який говорить тим самим контрактом, що й решта бекенду, з трьома провайдерами — Anthropic, OpenAI і Gemini. Він запускає детермінований фільтр безпеки до будь-якого виклику моделі, відхиляє будь-який запит з полем, якого він ніколи не повинен бачити, і вимагає bearer-токен на кожен запит, бо публічний Function URL без захисту — це не проксі, а відчинені двері. Заразом я також додав Gemini як третього провайдера і в edge-функцію Supabase, і в попередній self-hosted проксі, щоб архітектура лишалася однаковою всюди, де може працювати ШІ.

Одне рішення хочу проговорити прямо: Gemini за замовчуванням не бере участі в автоматичному fallback. Його безкоштовний рівень може використовувати вміст запитів для покращення продуктів Google, а це неприйнятно для такого чутливого контексту, який відправляє цей застосунок, — якщо явно не увімкнено платний тариф. Тож якщо Anthropic чи OpenAI не спрацюють, застосунок тихо не переповзає на Gemini — він використовує Gemini лише коли це явно обрано, і я задокументував, що саме має змінитися, перш ніж це за замовчуванням стане іншим.

03

Баг, що ховався з першої збірки

Підключаючи застосунок до нового URL Lambda, я знайшов дещо, що було зламано від самого початку: власні налаштування застосунку — URL бекенду, підтримки, приватності — були виставлені як налаштування збірки, але Xcode автоматично генерує Info.plist лише з тих налаштувань, які сам розпізнає. Наші власні ключі просто ніколи не потрапляли в застосунок. Це пояснює маленьку загадку кількома днями раніше: чому нові рядки Support і Privacy, які я підключив 29.08.2026, були мертві. Виправлення — дати застосунку реальний, явний файл Info.plist з цими ключами, перевірений наскрізь на живій Lambda: health-перевірка підтверджує, що ключ налаштовано, відсутній токен дає 401, кризова фраза маршрутизується до шляху безпеки, не діставшись жодної моделі, а заборонене поле відхиляється. Усі чотири перевірки пройшли, перш ніж я довірився цій збірці.

04

Повний аудит готовності до продакшену

Коли AI-проксі став надійним, я зробив крок назад і поставив собі складніше питання: якби це вийшло до реальних людей просто зараз, де б це їх обманювало? Я пройшовся по одинадцяти конкретних пунктах. Кілька вартих згадки: тепер застосунок повертає типізований результат на кожен запит до ШІ замість того, щоб тихо підставляти фейкову відповідь, коли бекенд чи вхід не спрацювали, — ти бачиш «офлайн» або «тимчасова проблема, спробуй ще раз» замість галюцинованої відповіді, що вдає нормальну роботу. Коли налаштована персональна автентифікація через Supabase, вона стає справжнім продакшн-шляхом, з м'яким запрошенням увійти через Apple для гостей замість тихого збою, а гості зберігають усі локальні функції. Я також синхронізував список кризових слів безпеки на клієнті, edge-функції Supabase, self-hosted проксі й AWS Lambda — обидва node-бекенди пропускали близько десятка англійських і українських фраз, а це саме той тип прогалини, який найбільше важить у системі безпеки; додав регресійні тести, щоб це більше тихо не розходилося. З даними — функція account-export витікала два внутрішні поля (push-токен, ID встановлення), яким не було чого робити в персональному експорті даних, тож я їх прибрав і звузив те, що насправді містить експорт пристроїв.

Поточний екран Refuel AI з написом «Як ви насправді? Питайте про будь-що», трьома підказками й полем для повідомлення.
Екран Refuel AI в поточному застосунку — поточний дизайн застосунку.
05

Чесність про те, що відправляє ШІ

Коли запити почали справді залишати пристрій і йти до живого бекенду ШІ, власна декларація App Privacy застосунку перестала бути правдивою — вона й досі казала «дані не збираються», що було правдою до цього дня і стало неправдою після. Я оновив її, щоб описати рівно дві речі, які залишають пристрій: мінімізований набір сигналів настрою, енергії, сну, симптомів і Refuel Score, і текстове повідомлення, яке ти пишеш асистенту, — обидва позначені як не пов'язані з тобою для трекінгу, без використання для реклами. Приватні нотатки, нотатки відновлення й записи щоденника ніколи не залишають пристрій — ця межа закріплена на сервері, а не просто обіцяна в екрані налаштувань. Я оновив і публічну політику приватності на mommyrefuel.com — те саме, простою мовою, англійською й українською, включно з тим, що повідомлення може маршрутизуватися до стороннього провайдера ШІ (Anthropic, OpenAI або Google), і що кризовий текст завжди обробляється на пристрої, перш ніж щось кудись відправляється.

Екран «Приватність і дані», де описано, що саме Refuel AI надсилає до Claude від Anthropic і що ніколи не надсилається, зокрема текст щоденника.
Екран «Приватність і дані» у поточному застосунку — поточний дизайн застосунку.
06

TestFlight-збірки 5 і 7

Збірка 4 (версія 1.4.0) уже пішла в App Store Connect до цього дня; збірка 5 випустила готовий до продакшену бекенд і аудит, описаний вище. Збірка 6 вийшла з перемальованою іконкою застосунку — але виявилося, що вона й досі показувала стару, розмиту версію, бо джерелом іконки було зображення 360px, розтягнуте до 1024. Я перемалював її як справжній вектор, точно повторивши оригінальний дизайн, а не переосмисливши його, і збірка 7 вийшла з чіткою версією, підтвердженою як валідна в App Store Connect.

07

Чесний перепис сайту

Я закінчив день переписом mommyrefuel.com, який усе ще описував застосунок як «прямує до TestFlight» — а він уже кілька днів був у TestFlight. Я прибрав нічим не підкріплений бейдж «на основі науки» на користь «безпека понад усе за задумом», що я справді можу обґрунтувати, додав розділ «зроблено, а не обіцяно» лише з фактами, які можна перевірити (збірки TestFlight, кількість тестів, що проходять, дві мови, нуль рекламних трекерів), і дорожню карту, чесно позначену: що є зараз, що далі, що пізніше, з кожною ціллю, позначеною саме як ціль, а не обіцянка. Додав і короткий, чесний розділ для майбутніх інвесторів — без доходу, без платних користувачів, без заяв про тракшн, сказано прямо, бо оновлення від засновника, яке себе прикрашає, нічого не варте нікому.

08

Де і коли

  • 02.09.2026, 10:54–15:10 — Заголовки Anthropic workspace, підтримка Claude Opus 5, економні моделі за замовчуванням, Gemini/Vertex доданий як третій провайдер ШІ на обох бекендах, закладена (не випущена) архітектура ML для добробуту на пристрої (6c94be2, 925963e, 7f901b1, ab7f5f7, 3df23cb).
  • 02.09.2026, 14:40 — Побудований і задеплоєний AWS Lambda AI-проксі, Function URL, підтримка трьох провайдерів, фільтр безпеки, захист bearer-токеном (dbc1f62).
  • 02.09.2026, 14:52 — Виправлений баг Info.plist на iOS; застосунок тепер справді читає свої URL бекенду/підтримки/приватності; перевірено наживо на AWS Lambda (f45809a).
  • 02.09.2026, 15:17–20:32 — Перекласифіковані декларації App Privacy, оновлена публічна політика приватності EN/UK, написаний посібник з деплою на AWS, Gemini виключений з автоматичного fallback за замовчуванням (c8338d8, 128b936, 2dd8058, c7f6033).
  • 02.09.2026, 20:41–21:13 — Персональна автентифікація через Supabase підключена як перемикач лише конфігурацією для шляху ШІ, плюс посібник з налаштування Sign in with Apple (e6ce352, 126a07e, 79e01d8).
  • 02.09.2026, 21:07–21:08 — Випущений аудит готовності до продакшену: типізовані результати ШІ, продакшн-шлях через автентифікацію, синхронізована безпека кризових слів, звужений експорт даних, задокументований статус VERIFIED/EXTERNAL/BLOCKED (23d301e, 0154076).
  • 02.09.2026, 21:45 — TestFlight-збірка 5 (1.4.0) (9c26074).
  • 02.09.2026, 21:56–22:12 — Іконку застосунку перемальовано як чіткий вектор; збірка 6 коротко вийшла зі старою розмитою іконкою, виправлено у збірці 7, підтверджено як валідну в App Store Connect (8f06674, 920dedf, 556b9f4).
  • 02.09.2026, 22:22 — mommyrefuel.com переписаний: чесний розділ «зроблено, а не обіцяно», позначена дорожня карта, розділ для інвесторів (f4f7109, 51f0e07).
09

Що це означає, якщо ти користуєшся застосунком

Якщо ти писала до Refuel AI після цього дня, твоє повідомлення пройшло довший шлях, ніж раніше, — до проксі, який контролюю я, а звідти до одного провайдера ШІ, ніколи більше одного, ніколи Gemini, якщо це явно не налаштовано. Якщо щось із твоїм входом чи з'єднанням не спрацювало, ти бачила чесне повідомлення замість вигаданої відповіді. А якщо ти написала щось схоже на кризову ситуацію, це було перехоплено до того, як дісталося хоч якоїсь моделі, на кожному без винятку шляху бекенду, англійською й українською.

Екран «Refuel AI» у поточному застосунку Mommy Refuel, з делікатними підказками і полем для повідомлення.
Екран «Refuel AI» у поточному застосунку, вересень 2026.

Питання, які ставлять мами

Куди насправді йде моє повідомлення до Refuel AI?

До проксі на AWS, яким керую я; він спершу застосовує перевірку безпеки, а потім передає мінімізований контекст і твоє повідомлення одному провайдеру ШІ (Anthropic, OpenAI або Gemini — лише якщо це явно налаштовано). Приватні нотатки, нотатки відновлення й записи щоденника ніколи не відправляються.

Що таке баг Info.plist простими словами?

Власні налаштування застосунку, такі як URL бекенду й підтримки, були налаштовані способом, який Xcode автоматично не переносить у застосунок. У проєкті вони виглядали встановленими, але під час роботи тихо були відсутні. Виправлено, давши застосунку явний файл Info.plist.

Чи відправляє застосунок мій приватний щоденник до ШІ?

Ні. Ця межа закріплена на стороні сервера автотестами, а не просто налаштуванням — приватні нотатки, нотатки відновлення й записи щоденника виключаються ще до того, як формується запит.

Що станеться, якщо бекенд ШІ недоступний?

Ти побачиш чесне повідомлення «офлайн» або «тимчасова проблема, спробуй ще раз». Застосунок ніколи тихо не вигадує відповідь і не видає її за нормальну роботу асистента.

Чи додали TestFlight-збірки 5 і 7 нові функції?

Збірка 5 випустила описану вище роботу з готовності до продакшену. Збірки 6 і 7 стосувалися однієї зміни: виправлення іконки застосунку, щоб вона рендерилася чітко, а не розмито; збірка 7 — виправлена версія.

Доступність може залежати від встановленої версії застосунку. Статуси підтверджені засновником на момент публікації.

ЩЕ З БЛОГУУсі статті ↗︎
Екран онбордингу з питанням «Де ви зараз?» і варіантами: вагітність, післяпологовий період, планування або підтримка когось.

Чому я запускаю цей блог від першого дня Mommy Refuel

Я запускаю блог на mommyrefuel.com — справжні статті про материнство і добробут, і цей щоденник змін від мого імені, англійською і українською, а ще цього тижня ми розповідаємо про Mommy Refuel ширше.

Сергій Рогачов
Екран Refuel AI з підказками на кшталт «Чому мій бал сьогодні нижчий?» та «Допоможи підготуватися до лікаря».

Just talk: скажи або напиши, а Mommy Refuel розкладе по місцях

Без форм і меню — просто скажіть або напишіть про свій день, а Mommy Refuel запропонує, куди це віднести. Що саме зберегти, вирішуєте ви. Ось як це працює і чому я зробив саме так.

Сергій Рогачов
Екран підтвердження «Ви зробили чек-ін сьогодні» із зеленою галочкою і кнопкою «Зробити чек-ін знову».

20 вересня: виправляю реальний баг із мовою, білди 23-24

Один баг 20 вересня турбував мене більше за інші: зміна мови могла залишити половину екрана старою мовою. Ось у чому була причина, як я це виправив і що ще вийшло того дня.

Сергій Рогачов
ДЛЯ ЛЮДИНИ ВСЕРЕДИНІ МАТЕРИНСТВА

Зроби місце
для себе.

Отримати безкоштовний застосунок