В мире — миллионы заражений сифилисом и ВИЧ, и цифра растёт. Но мой пост не об этом.
Я решил техническую задачу: как сделать медицинский образовательный инструмент, который работает офлайн, не требует бэкенда и не собирает данные пользователей, используя веб‑технологии JS. Ведь в медицине приватность — это требование.
Код открыт, лендинг и игры доступны по ссылке.
При разработке я ориентировался на:
1. Анонимность — без сервера, без регистрации и сбора данных.
2. Мультиязычность. Без перезагрузки страницы.
3. Оптимизация. Возможность выбирать 30/60fps при двойном клике на старт (сбалансированный/производительный режимы)
Архитектура
index.html (лендинг)
├── /syph/index.html
└── /hiv/index.html
└── /…/..
Особенность реализации
1. Ускоренная игровая механика. Сжатие времени: 30 секунд = 24 часа
Ускорение в 2880 раз нужно, чтобы игрок за 5 минут ощутил неделю терапии. В реальной жизни, вирусная нагрузка растёт медленно, и последствия пропуска таблетки видны не сразу. В игре — уже через 30 секунд. Это и есть педагогическая цель: показать, как быстро всё идёт к критической точке при нерегулярном приёме либо его отсутствии. Иммунитет со временем восстанавливается, но медленно.

2. Упрощенные схемы лечения
Для удобства, сделал одну кнопку, запускающую прием лекарства. В реальности, схемы могут быть более индивидуальными и сложными.
3. Количество инфекционных агентов
2³⁰ — миллиард. Примерно столько в организме, через месяц после заражения. Сколько отрисовывать на экране? В симуляторе, одна трепонема символизирует целую популяцию,а старт начинается с 3–5 объектов. Почти сразу можно заметить, что чем раньше начинается лечение, тем выше вероятность успеха.

4. При переключении вкладок: таймер идёт, а отрисовка останавливается
Для MVP — решил оставить как есть. Это — поведение браузера.
Планы
Добавить уровни сложности. В сложном режиме:
Запуск не с 3–5 единиц, а со 100 единиц
Вероятность перехода в спящую форму: 50%
Время в спящем режиме: 100–300 s.
const CONFIG = {
gameday_s: 60,
division_period_real_s: 30,
divisionAnim_s: 1.2,
startCount: 1,
startCountMin: 3, // минимальное количество бактерий при запуске
startCountMax: 5, // максимальное количество бактерий при запуске
maxSpirals: 1500,
killMaxCharges: 2,
killCooldownBetweenUses_s: 30,
sleepProbabilityOnKill: 0.3, // вероятность перехода в защитную L-форму
sleepDurationRange_s: [60,180], // время нахождения в спящей L-форме
lodThreshold: 150,
maxDetailedTubularSegments: 200,
minRenderIntervalMs: 1000/30,
highPerfRenderIntervalMs: 1000/60,
dynamicRenderScale: 0.75,
lowRenderScale: 0.5,
perfSamplingMs: 2000,
autoThrottleFPSDropThreshold: 40,
instancedBatchSize: 500
};Как вам идея? Будет ли она полезна в 2026 году, пока не изобрели вакцину?





















