Второе мнение: как я вайбкодил тренажёр для родов, готовясь стать отцом

Когда жена была на седьмом месяце, мы пошли на курс подготовки к родам. Никакой готовой методологии там прямо не декларировали — но, слушая лекции, я заметил паттерн в том, как лектор разбирал кейсы. По сути, каждый разбор сводился к одной и той же схеме: что предлагает врач → в каком состоянии мать и ребёнок → какие последствия у отказа или откладывания вмешательства. По каждой комбинации этих факторов лектор предлагал то или иное действие.
Мне стало интересно, откуда растёт эта схема, и я сделал небольшой деск-ресерч. Оказалось, что это не изобретение конкретного лектора, а отражение метода ПРАН и в целом международных стандартов информированного согласия в родах:
- Польза — зачем это именно мне сейчас?
- Риски — какие риски у вмешательства?
- Альтернатива — есть ли другой способ?
- Ничего — что будет, если подождать?
Дальше сработала чисто инженерная деформация: я решил систематизировать эту логику в виде графа — просто чтобы разложить по полочкам, какая комбинация «предложение врача + состояние + риск ожидания» к какому действию ведёт. Из этого графа родилась идея справочника.
А трансформация справочника в тренажёр случилась благодаря жене — она заметила, что кейсы по структуре один в один похожи на билеты на экзамене по вождению: ситуация → варианты действий → разбор, почему один вариант верный, а другой нет. Так родилась идея тренажёра: не просто справочная информация, а симулятор, где надо принять решение и получить разбор.
Я «обучил» его на открытых источниках (клинические протоколы, международные гайдлайны) и материалах курса. (за доступ и разрешение на транскрипцию отдельное спасибо Кристине) Так за несколько вечеров вырос Second Opinion— мобильное веб-приложение, полностью навайбкоженное в Claude Code.
Что получилось
Три инструмента, которые открываются в браузере:
1. Справочник (akusher_prod_v5.html) — тот самый граф в интерактивном виде, на случай если нужно быстро найти что-то прямо в родах: 11 сценариев с маркерами-чеклистами, таймер безводного периода, счётчик схваток, дыхательный тренажёр, шкала нормы КТГ, словарик терминов. Входная точка каждого сценария — не симптом, а предложение врача: именно с этой фразы начинается реальная развилка в палате, так что и в приложении сценарий стартует с неё.
2. Тренажёр (trainer.html) — симулятор для подготовки до родов: 35 клинических ситуаций, где нужно решить — подождать или согласиться на вмешательство.
3. Учебник (textbook.html) — интерактивный конспект курса, 41 урок с квизами.
Важное решение, которое я принял осознанно, собирая тренажёр: сценарии сбалансированы — в 17 случаях правильный ответ «подождать», в 18 — «согласиться». Легко было бы сделать тренажёр в духе «врачи всегда что-то впаривают, отказывайся от всего» — но это ровно та установка, которая вредит в реальных родах не меньше, чем слепое доверие. Я хотел натренировать не рефлекс отказа, а рефлекс вопроса. Вот как выглядит один сценарий изнутри:
{
id: 23, topic: 'Крупный плод', title: 'Кесарево из‑за «крупного ребёнка»',
variants: [{
doctor: '“По УЗИ ребёнок крупный — около 3800 граммов. Лучше сделать кесарево.”',
facts: [
{ icon: '👶', text: 'Оценка веса по УЗИ: ~3800 г (погрешность ±500 г)' },
{ icon: '🤰', text: 'Таз нормальных размеров, нет диабета' },
{ icon: '💓', text: 'КТГ в норме' }
],
correct: 'wait',
feedback: {
wait: { correct: true, text: 'Оценка веса по УЗИ имеет погрешность ±500 г. Кесарево по весу обсуждается при >4500 г.' },
act: { correct: false, text: 'УЗИ‑оценка неточна. Нет диабета, таз нормальный — показаний нет.' }
},
pran: ['Какова точность оценки веса по УЗИ?', 'При каком весе действительно показано кесарево?']
}]
}
Этот конкретный сценарий ещё аукнется в статье — держите его в голове.
Как это вайбкодилось
Весь стек — чистые HTML/CSS/JS, без сборки и зависимостей. Можно было собать агента с RAG скажете вы, тогда вариативность и полнота ответов была бы выше, но это не лень, а осознанное требование: справочник должен открыться в браузере телефона в палате роддома без вайфая, одним двойным тапом по файлу.
Git-лог честно показывает, что это не был один вечер вдохновения, а последовательность итераций:
```
18 июня — Initial commit: add app and README
18 июня — Add interactive decision-making trainer (7 сценариев)
19 июня — Add inline glossary tooltips for medical terms
26 июня — Expand trainer to 35 balanced scenarios (17 wait / 18 act)
06 июля — Simplify decision trainer to 2 choices; add breathing, positions, CTG tools
06 июля — Reorganize UI for usability: navigation, accessibility, touch targets
06 июля — Add interactive textbook: 41-lesson course companion with quizzes
06 июля — Add local search across справочник и учебник
06 июля — Make Android app fully self-contained
```
Первый граф на 7 сценариев был совсем черновым. Дальше — тренажёр разросся до 35 кейсов, добавил глоссарий по наведению на термин, полнотекстовый поиск сразу по 13 разделам справочника и 41 уроку учебника (индекс учебника зашит прямо в страницу, чтобы работать офлайн). Все эти внедрения были результатами коридорок в перерывах на самих курсах.
Мне было важно, чтобы справочник был доступен офлайн, а навигация — нативной, а не «сайтом в браузере». Поэтому я обернул всё в Android WebView (Kotlin, minSdk 24) и настроил GitHub Actions, чтобы каждый пуш в main собирал APK и клал его в артефакты билда. Ни бэкенда, ни аналитики, ни единого байта, уходящего с телефона — все данные только в памяти браузера. Для такой темы это было принципиально.
Вайбкодинг тут раскрылся ровно так, как и должен: я не писал ни строчки JS вручную, зато провёл, наверное, вдвое больше времени, формулируя сценарии — вычитывая протоколы, сверяясь с открытыми источниками, споря с самим собой, что в кейсе правильный ответ, а что миф. Инструмент печатал код, я формулировал медицинскую и логическую суть.
Это, честно говоря, самая черновая из версий, которую можно докручивать бесконечно — но вполне жизнеспособный MVP, который мы успели опробовать не в теории.
А потом наступила ночь родов
Тренажёр — это тренажёр. Он не предсказывает, что случится именно с вами. У жены были долгие, но слабые схватки — раскрытие дошло до полного, а сила схваток не росла. Врач сначала предложил немного окситоцина — логично, стандартный первый шаг при слабости родовой деятельности. Схватки от него не участились.
Дальше выяснилось то, чего ни один из 35 сценариев тренажёра не описывает буквально: ребёнок встал неправильно. Смена позы, отдых — ничего не помогало. Ситуацию прояснило неожиданное везение: у нас на руках было МРТ таза, сделанное заранее, и по нему стало видно, что путь перекрывает копчик.
Мы задали вопросы по ПРАН — не потому что тренажёр научил именно этому диагнозу (такого сценария там просто нет), а потому что за несколько недель формулировки въелись в рефлекс: «какая польза именно сейчас», «что если подождать ещё». Ответы были однозначными: механическое препятствие, отдых уже пробовали, дальнейшее ожидание не решает проблему, а увеличивает риски. Согласились на кесарево — и не пожалели ни секунды. Ребёнок родился на 500 граммов тяжелее, чем показывало УЗИ — при таком раскладе он реально мог просто застрять в родовых путях.
Вот и та самая ирония со сценарием №23 из кода выше: там «правильный ответ» — не бояться кесарева из-за возможной ошибки УЗИ в ±500 г и не соглашаться на операцию просто «на всякий случай». В нашем случае реальность попала ровно в эту же цифру погрешности — но с другим знаком: 500 граммов оказались решающими, потому что накладывались на механическое препятствие, а не существовали сами по себе. Тренажёр не ошибся — ошибиться там было негде, это два разных сценария. Но он честно научил главному: цифра сама по себе ничего не решает, решает совокупность факторов, и вопрос всегда один и тот же — «какая польза именно сейчас для матери и ребенка».
Итог
Сын родился месяц назад. Растёт, как говорится, не по дням, а по часам — в буквальном смысле богатырь. Роды прошли не так, как мечталось на курсе (максимально естественно), но именно понимание происходящего — а не слепое согласие или слепое сопротивление — позволило нам принять решение спокойно и осознанно, а не в панике.
Репозиторий открыт: [github.com/aleksskuga/second-opinion](https://github.com/aleksskuga/second-opinion). Если у вас или ваших близких скоро роды — форкайте, дополняйте своими сценариями, собирайте свой APK. Это не медицинское устройство и не замена врачу — это просто структура для разговора с ним. Иногда эта структура приводит к выводу «ждать». А иногда — как в нашем случае — к однозначному «делать, не откладывая». Тренажёр одинаково хорошо готовит к обоим исходам, и, кажется, это единственное, что от него вообще требовалось.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.