BeautyPad - CRM для мастеров красоты с шифрованием персональных данных клиентов
CRM для мастеров красоты и массажа: запись клиентов, медицинские карты, финансы - через приложение специалиста и веб-запись для клиента. В медкартах лежат аллергии, противопоказания и контакты, то есть данные, которые нельзя терять и нельзя показывать чужому. Когда делаешь такой продукт один, безопасностью занимается тот же человек, что и вёрсткой, и отдельной команды, которая придёт и проверит, не будет.
Четыре уровня защиты
Изоляция по владельцу на уровне базы. Row-level security в PostgreSQL: мастер физически не может прочитать чужие записи, даже если запрос в приложении написан с ошибкой. Проверка не в коде, где её легко забыть, а в самой базе.
Шифрование чувствительных полей алгоритмом AES-256-GCM. Дамп базы, утёкший бэкап или доступ к диску не дают ничего читаемого.
Слепой индекс. Шифрование ломает поиск: по зашифрованному полю нельзя сделать обычный запрос. Решение - хранить рядом детерминированный отпечаток значения, по которому ищется точное совпадение без расшифровки всей таблицы.
Неизменяемый журнал действий. Кто, что и когда открывал или менял - записи только добавляются. В продукте с медицинскими данными это не бюрократия, а единственный способ ответить на вопрос «кто это удалил» через полгода.
Устройство
Монорепозиторий на Turborepo держит вместе бэкенд, мобильное приложение специалиста и веб-запись клиента, с общим пакетом типов и бизнес-логики. Один разработчик и три приложения - это ровно тот случай, когда общий контракт между ними экономит недели: изменил тип на бэкенде, компилятор сам показал все места, где приложения перестали сходиться.
97,5% коммитов мои: 79 из 81 за время активной разработки, оставшиеся два - автокоммиты вспомогательных инструментов.