Kinori — privacy-first веб-приложение для построения и управления генеалогическими деревьями, хранения семейного архива (фото/документы) и совместной работы через ограниченный просмотр по ссылке, запрос доступа, модерацию и предложения правок (suggestions).
- Мульти-пользовательский сервис: каждый пользователь может создавать несколько деревьев.
- Приватность по умолчанию: деревья приватные.
- Share-ссылка с LIMITED VIEW:
- видны только умершие;
- без медиа;
- без точных дат (допускаются только годы);
- UI показывает, что есть дополнительные данные после доступа.
- Запрос доступа (AccessRequest):
- пользователь логинится и отправляет запрос;
- владелец/модератор подтверждает → открывается FULL VIEW.
- Роли: Owner / Moderator / Viewer.
- Suggestions (предложения правок):
- Viewer может предлагать изменения;
- Moderator принимает/отклоняет (аналог pull request).
- Медиаархив:
- загрузка изображений и PDF (в будущем аудио/видео);
- привязка файлов к персонам.
- Уведомления: in-app + email + Telegram (если подключён).
- OpenAPI + DTO
- Mock API (MSW)
- Webpack сборка + i18n/RTL каркас
- UI дерева на мок-данных
- Auth (JWT access+refresh, reset password)
- Trees / Persons / Relationships + Subtree API
- ShareLink limited view + AccessRequest approve/reject
- Suggestions + модерация
- Media (pre-signed upload, link to person)
- Notifications: in-app + email + Telegram
- GEDCOM import (приоритет) + export
- Расширение модели фактов/источников
- Превью/миниатюры и фоновые задачи
- (опционально) роль Editor
- Variant A: tree-scoped persons — персона живёт только внутри конкретного дерева (
PersonпринадлежитTree). - Front-first — UI строится на моках и контракте; backend подключается по стабильному API.
- Privacy-by-default — живые люди скрываются в limited view; есть правило “живой/умерший” с порогом
X. - Subtree loading — визуализация дерева подгружает части графа по запросу (
depthUp/depthDown), не “всё дерево сразу”.
- показываем: только умерших, имена, пол, годы (если известны), связи между умершими
- скрываем: живых полностью, медиа, точные даты, расширенные данные
- показываем все данные, включая медиа и полные даты (с учётом точности)
- React + TypeScript
- Webpack (кастомная сборка) (HMR/Fast Refresh, code splitting, assets)
- i18n + RTL (арабский) с самого начала
- MSW для моков
- Tree UI: react-flow (MVP)
- Node.js + NestJS
- PostgreSQL + Prisma
- Redis (опционально, полезно для rate limit / очередей уведомлений)
- S3-compatible (AWS S3 / Cloudflare R2 / MinIO для dev)
- Upload через pre-signed URL
- VPS + Docker Compose + Nginx