Прототип веб-платформы автоматизации аренды недвижимости с интеграцией государственных систем идентификации (ЕСИА), Росреестра и IoT-устройств. Разработан в рамках дипломного исследования "Исследование архитектурных и программных решений веб-платформы автоматизации процессов аренды недвижимости с интеграцией ЕСИА, сервисов осреестра и IoT-устройств" (Королёв Ю.А.)
/listings— каталог объявлений: поиск, фильтры, сортировка, карта (Яндекс.Карты), пагинация/listings/[id]— карточка объявления с галереей и формой бронирования/favorites— избранные объявления/architecture— диаграмма архитектуры платформы (§3.1 диплома)/recommendations— практические рекомендации по проектированию
- Вход по email/паролю
- OAuth: Google, GitHub (при наличии env-переменных)
- ЕСИА — мок Госуслуг (OIDC/OAuth 2.0, §4.1 диплома)
- Сброс и смена пароля (Nodemailer)
/bookings— мои бронирования со state machine (§3.1) и timeline-компонентом/bookings/[id]/access— цифровой ключ (QR-код, код доступа, временное окно, §4.3)/messages— сообщения с арендодателем/notifications— уведомления платформы/settings— профиль, смена пароля, роль хоста, статус ЕСИА-верификации
/host/listings— управление объявлениями (CRUD, фото)/host/listings/newи/host/listings/[id]/edit— форма объявления с картой/host/listings/[id]/verify— верификация права собственности через Росреестр (§4.2)/host/bookings— входящие заявки: подтверждение, отклонение, завершение
/admin/users— список пользователей, управление ролями/admin/listings— объявления с inline-верификацией через Росреестр/admin/bookings— все бронирования, управление статусами/admin/events— аудит-журнал событий аренды (§3.4 диплома)
| Слой | Технология |
|---|---|
| Frontend + BFF | Next.js 16, React 19, TypeScript, SCSS Modules |
| Аутентификация | next-auth v4 (JWT), ESIA mock (OIDC) |
| База данных | Supabase PostgreSQL |
| Кэш / сессии | Redis (опционально) |
| Событийная шина | RabbitMQ (опционально, через amqplib) |
| Карты | Яндекс.Карты API |
| Nodemailer | |
| Стор | Zustand (минимально, для темы/sidebar) |
Платформа реализует событийно-ориентированную архитектуру, описанную в дипломной работе:
- BFF (Backend for Frontend) — Next.js App Router выступает единой точкой входа для пользовательского интерфейса
- Domain Events — ключевые переходы состояний фиксируются в
rental_event_log(аудит-журнал) и опционально публикуются в RabbitMQ через Outbox-паттерн - Интеграция с Росреестром — anti-corruption layer с нормализацией кадастровых номеров и Interpretation Engine (5 статусов: verified / not_verified / inconclusive / technical_failure / manual_review_required)
- Интеграция с ЕСИА — OIDC-поток с обработкой state/nonce, валидацией JWKS, записью события
user.esia_verified - IoT-доступ — Device Registry, Access Policy Manager, цифровой ключ с QR для подтверждённых бронирований (§4.3)
- State machine аренды — расширенные статусы процесса:
initiated → ownership_pending → ownership_verified → contract_ready → payment_pending → access_granted → active → completed
Интерактивная диаграмма доступна на странице /architecture запущенного приложения. Подробная документация — в ARCHITECTURE.md.
Скопируйте .env.example в .env.local и заполните значения.
NEXT_PUBLIC_SUPABASE_URL="https://your-project.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="your-anon-key"
SUPABASE_SERVICE_ROLE_KEY="your-service-role-key"
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="generate-with-openssl-rand-base64-32"NEXT_PUBLIC_YANDEX_MAPS_API_KEY=""ESIA_MOCK_ENABLED="true"GOOGLE_CLIENT_ID=""
GOOGLE_CLIENT_SECRET=""
GITHUB_ID=""
GITHUB_SECRET=""Укажите оба значения для провайдера или оставьте оба пустыми.
SMTP_HOST="smtp.gmail.com"
SMTP_PORT="587"
SMTP_SECURE="false"
SMTP_USER=""
SMTP_PASS=""
SMTP_FROM="noreply@homesharing.ru"REDIS_URL=""RABBITMQ_URL=""
RABBITMQ_EXCHANGE="homesharing.events"# 1. Зависимости
npm install
# 2. Создать .env.local из примера
cp .env.example .env.local
# Заполнить обязательные переменные
# 3. Запустить миграции в Supabase (см. раздел ниже)
# 4. Запустить dev-сервер
npm run dev
# Открыть http://localhost:3000Гостевой сценарий начинается с /listings.
Авторизованные пользователи попадают на / (дашборд).
Выполните SQL-файлы из директории sql/ в Supabase → SQL Editor в указанном порядке:
| Файл | Описание |
|---|---|
sql/add_rosreestr_fields.sql |
Поля верификации через Росреестр в таблице listings |
sql/create_rental_event_log.sql |
Аудит-журнал событий аренды (§3.4) |
sql/add_rental_process_status.sql |
Расширенные статусы процесса аренды (§3.1) |
sql/create_iot_access.sql |
Реестр IoT-устройств и политики доступа (§4.3) |
sql/add_esia_fields.sql |
Поля ЕСИА-верификации в таблице User (§4.1) |
sql/create_messages_notifications.sql |
Сообщения и уведомления (§3.2) |
Подробнее о схеме Supabase — в SUPABASE_SETUP.md.
npm run dev # dev-сервер с hot reload
npm run build # production сборка
npm run start # запуск production сборки
npm run lint # ESLint
npm run typecheck # tsc --noEmit
npm test # тестыnext-auth— единый источник истины для состояния сессии- Конфигурация:
src/shared/lib/auth.ts - Credentials-аутентификация читает пользователей из Supabase (
Userтаблица, bcrypt) - OAuth-провайдеры активируются при наличии полной пары env-переменных
- ЕСИА-провайдер:
src/shared/lib/esiaProvider.ts— мок OIDC на базе/api/mock-esia/* - После входа через ЕСИА публикуется событие
user.esia_verifiedв аудит-журнал
Платформа включает мок-провайдер идентификации (Госуслуги / ЕСИА):
- Установите
ESIA_MOCK_ENABLED=trueв.env.local - Нажмите «Войти через ЕСИА» на странице входа
- Выберите тестовую личность на
/esia/login - После успешного входа в аудит-журнал записывается событие
user.esia_verified
Основные хелперы:
src/shared/utils/supabase/client.ts— браузерный клиентsrc/shared/utils/supabase/server.ts— серверный клиент (cookies)src/shared/utils/supabase/service.ts— сервисный клиент (service role key)
getServiceClient() использует SUPABASE_SERVICE_ROLE_KEY для серверных операций (API routes, admin).