2026-09-27projects/petzy.mdpetzy.md

Petzy: дневник здоровья для кота, который реагирует на всё

≈ 3 минуты

У меня живёт бенгальский кот Саймон. Здоровье у него очень чувствительное к окружающей среде: что-то меняется вокруг, и это отзывается. Ветеринар на приёме спрашивает, когда был последний приступ, сколько длился и что ел в тот день. И ты стоишь и вспоминаешь: вроде во вторник, минуты две.

Заметки в телефоне такое не тянут: записи расползаются, фильтровать нечем, показать врачу нечего. Готовые приложения для питомцев либо про напоминания о прививках, либо про магазин корма. Про приступы астмы и тип стула там ничего нет.

Так летом 2025-го появился Petzy, сначала телеграм-ботом, а в декабре стал приложением. С тех пор в нём больше четырёхсот коммитов, из них 211 за один сентябрь, и это проект, которым я сейчас живу больше всех остальных.

Это PWA: открываешь в браузере телефона, добавляешь на главный экран, дальше работает как приложение, в том числе офлайн. На главном экране плитки по типам событий. Встроенных восемь: дневная порция с весом корма, вес, приступ астмы с длительностью, ингаляцией и причиной, дефекация с типом, цветом и кормом, смена лотка, закапывание глаз, чистка зубов, чистка ушей. Свои типы заводятся конструктором: название, иконка, поля с границами значений, и какой график по ним строить, счётчик событий или значение во времени. Плитки переставляются и прячутся, у каждой формы свои значения по умолчанию, чтобы запись занимала пару касаний.

Лекарства ведутся курсами: расписание, дозы, виджет «следующая доза» на главном, push-напоминание, когда пора дать. Остаток считается в днях, приложение предупреждает, что запас кончается, и пополняется кнопкой, когда купил пачку: размер пачки подставляется сам. Документы лежат рядом с питомцем: справки, анализы, снимки МРТ и КТ архивами до 500 мегабайт, со сроком годности и напоминанием, когда прививка или справка истекает.

История с фильтром по типу, графиком по выбранному типу над списком, правкой задним числом и экспортом в CSV, TSV, HTML или Markdown, чтобы таблицу можно было просто показать врачу. Если записанное значение, вес или порция, резко выбивается из последних записей, приходит push. Питомцев может быть несколько, у каждого фото и вид, и карточка спрашивает только то, что подходит животному. Доступ к питомцу можно открыть близким: совладелец видит то же самое, а в ленте видно, кто что записал.

Под капотом React с TypeScript и Vite, antd-mobile для интерфейса, React Query для кеша, service worker для офлайна и Web Push. Бэкенд Flask с MongoDB под gunicorn, всё за Nginx в Docker Compose. Файлы, снимки и фото лежат в S3-совместимом хранилище, туда же раз в сутки уходит дамп базы: сначала проверка, что архив читается обратно, потом загрузка, и только потом удаление старых, хранятся три последних. Копия на диске сервера теряется вместе с диском, поэтому бэкапы живут снаружи.

Это для людей с животным, которому нужно долгое наблюдение. Если это про тебя, заполняешь .env, поднимаешь docker compose, и дневник живёт на своём сервере.

Приложение нужно мне, чтобы на приёме показать вместо того, чтобы вспоминать.