
Сервис для создания генеалогического древа
Разработали онлайн-сервис для составления родословной и создания генеалогического древа.Клиент
Группа компаний «Единая среда» уже 15+ лет проводит оцифровку объектов городской среды. В 2023 году получила заказ от органов власти на формирование баз данных о местах захоронений. В процессе накопления информации собственник решил, что собранные публичные данные могут приносить пользу людям.
Поэтому в 2024 году родилась идея создать дочерний проект – построение генеалогического древа и поиск родственников. Что-то вроде социальной сети, но с фокусом на более глубоких вещах – на памяти и истории, а не на сиюминутных лайках и повседневном общении.
Программы и сервисы для составления родословной давно перестали быть редкостью. Эти сервисы умеют строить деревья в онлайн-формате, но никак не помогают с практической точки зрения – поддерживать память об ушедших или заботиться о захоронениях.
Вызовы
Предстояло разработать двустороннюю платформу с одним важным дополнением – функционалом для построения древа.
Веб-сервис связывает обычных людей (заказчиков услуг) с профильными организациями. Мы уже делали ИТ-экосистему, поэтому здесь все было знакомо: личные кабинеты для пользователей и подрядчиков с отдельными функционалом, фильтры для поиска исполнителей, интеграции с платежными сервисами.
Однако с построением древа мы столкнулись впервые. Новое и необычное – вот что привлекло больше всего, и мы с энтузиазмом взялись за работу.

Время – деньги
Самый частый вызов в нашей работе – бюджет и сроки, и этот кейс не стал исключением.

Сложный интерактивный интерфейс
В основе древа – концепция узлов и линий. При этом нужно визуализировать не только формальную генетическую связь, но и родственные узы.
Плюс не просто провести линию от предка к потомкам, а предоставить пользователям способ указать больше информации о конкретном человеке. А еще организовать поиск родственников – живых, умерших или когда информации минимум.
Какие задачи мы решали при разработке функционала древа:
Задача #1. Визуализация поколений
У каждого человека есть биологические отец и мать – это парная связь (на первом этапе не брали исключения вроде усыновления или ЭКО). Его биологические родители, в свою очередь, тоже имеют каждый свою парную связь.
Чтобы древо отражало эти связи, нужно подобрать алгоритм для создания модели данных. В дискретной математике для подобных задач используются графы – системы из вершин с ребрами. Мы тоже применили графы: вершины – это родственники, ребра – связи, соединяющие их. Такая визуализация поколений позволила правильно располагать предков и потомков и верно выстраивать связи между ними.
Но отобразить граф на плоскости оказалось недостаточно – на тестовых моделях ребра сдвигались в произвольном порядке и нарушали логику связей. Чтобы поколения находились строго на своих уровнях, мы добавили алгоритм расположения вершин.
Задача #2. Создание сложных структур
Следующая ступень – сделать так, чтобы горизонтальные ребра не пересекались и не меняли уровень в сложных случаях: кровнородственные браки, усыновление, полигиния или полиандрия, ЭКО без участия одного из родителей. То есть когда одна из связей графа утеряна и восстановить ее нельзя.
Здесь мы использовали алгоритм моделирования планарных графов – уложили графы на плоскость и исключили пересечения ребер не по вершинам.
Задача #3. Кастомный UI/UX
Применение библиотек ускоряет разработку, но вносит ограничения в кастомизацию, что сильно сказывается на UI/UX. Проект древа сложный и предполагал индивидуальный дизайн. Мы использовали React Flow, однако бо́льшую часть компонентов все равно пришлось делать самостоятельно.
Задача #4. Вертикальный поиск и масштабирование
Чтобы искать дальних родственников, нужно «научить» древо строить вертикальные связи. Для этого понадобятся данные из архивных служб, ДНК-лабораторий и подобных компаний.
Мы подготовили все необходимое для интеграции с базами данных: быстрая обработка запросов, повышенная гибкость, масштабируемость и отказоустойчивость. Когда генеалогические центры и агентства начнут регистрироваться на сервисе и предлагать сопутствующие услуги, у бизнеса не возникнет проблем из-за простоев, связанных с наплывом посетителей или объемом хранимой информации.
Задача #5. Рекомендательная система
Внедрили систему рекомендаций как еще один способ поиска родственников. Пользователь выбирает в своем древе карточку и нажимает опцию «Рекомендовать».
Совпадения ищутся среди деревьев других пользователей по комбинации параметров, доступных для публичного просмотра: имени, отчеству, фамилии, дате рождения. Если возможный родственник найден и отсутствует в древе отправителя запроса, сервис предложит его добавить.
Итог. Функционал древа
– Поиск родственников не только по фамилии, но и по ДНК.
– Вычисление степени родства.
– Количество персон в одном древе не ограничено.
– Приглашение к участию в составлении древа родственников по ссылке или email.
– Возможность связать семейные древа разных пользователей целыми ветвями.
– Загрузка и хранение документов любого типа (фото, видео, сканы), добавление документа к человеку, семье, событию.
– Составление цифровых фотоальбомов с функцией комментирования.
– Поиск захоронений с получением полной информации о месте захоронения – вплоть до фото и координат на карте.
– Продвинутая конфиденциальность – пользователи сами выбирают, какую информацию о своих близких они хотели бы опубликовать в открытом доступе.
Технологии
Бэкенд
Golang
Фронтенд
React
База данных
ClickHouse
База данных
PostgreSQL
Библиотека
React Flow
Брокер сообщений
NATS
Результат
В первые четыре месяца работы мы рисовали прототипы, утверждали user scenario и писали подробное техзадание. На саму разработку ушло еще шесть месяцев – действительно быстро для столь крупного проекта.
Клиент получил готовый сайт с возможностью поиска, двумя типами личного кабинета (пользователь и админ-панель для владельцев), а также то, над чем мы трудились особенно кропотливо – функционал генеалогического древа.
Сочетание практической услуги с глубокой эмоциональной и исторической составляющей стало основой проекта. Старшее поколение уходит, а с ними уходят и те самые связи, которые потом не восстановить. Благодаря сервису пользователи не только ищут родственников, но и сохраняют информацию для потомков. Мы рады, что смогли прикоснуться к созданию чего-то по-настоящему значимого: получилась настоящая капсула времени.
столько заняла разработка: от создания макетов до релиза готового сервиса.
Что происходит дальше:
Мы получаем запрос, обрабатываем его в течение 24 часов и связываемся по указанным вами e‑mail или телефону для уточнения деталей.
Подключаем аналитиков и разработчиков. Совместно они составляют проектное предложение с указанием объемов работ, сроков, стоимости и размера команды.
Договариваемся с вами о следующей встрече, чтобы согласовать предложение.
Когда все детали улажены, мы подписываем договор и сразу же приступаем к работе.