Сервис мониторинга недвижимости

Агентству нужен не каталог объявлений, а рабочий контур изменение → объект → проверка → действие → результат. Центральная сущность — карточка наблюдаемого объекта. Главный экран — очередь значимых изменений.

Карточка проекта

Отрасль
Агентство недвижимости: жилой фонд, внутренний мониторинг рынка
Основной рынок
Минск и ближайшие пригороды
Масштаб
~18 000 активных объявлений, 6 разрешённых источников, 45 брокеров, 4 аналитика, 5 руководителей групп
Основная проблема
Изменение цены, снятие или повторная публикация замечают через часы либо не замечают вовсе: история объекта распадается на дубли, реакция живёт в чатах
Ключевое решение
Карточка наблюдаемого объекта, очередь сигналов и контролируемое действие с ответственным, сроком и результатом
Основные пользователи
Аналитик рынка, брокер, руководитель группы, администратор
Срок MVP
12–13 недель до пилота
Технологический стек
Laravel, Inertia, React, TypeScript, PostgreSQL, Redis
Статус проекта
Концепция MVP

Контекст

Кейс — демонстрационная модель продукта. Данные гипотетического клиента, внутренние показатели и ожидаемый эффект используются, чтобы показать реалистичный сценарий разработки, а не отчёт о уже внедрённой системе.

Рынок и задача

Агентство работает с жилой недвижимостью Минска и ближайших пригородов. Сотрудники наблюдают примерно за 18 000 активных объявлений из шести разрешённых источников: партнёрских выгрузок, отраслевых фидов, собственной базы и ссылок, которые брокеры добавляют вручную.

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

До проекта аналитики несколько раз в день открывают сохранённые подборки, сравнивают карточки, переносят изменения в таблицы и отправляют находки в рабочие чаты. Изменение стоимости, снятие объявления или повторное размещение объекта могут быть замечены через несколько часов либо не замечены вовсе. История одной квартиры распадается на дубли, а руководитель не понимает, какие сигналы уже проверены и к каким действиям они привели.

Граница первой версии — мониторинг жилых объектов и реакция команды, без замены CRM и без публичного каталога. Заселение к уже проживающим соседям — другой продукт: проект заселения в комнату с соседями, а не жилой мониторинг продаж и аренды.

Масштаб первой версии

Объявления18 000
Источники6
Брокеры45
Цель обнаружениядо 20 мин
ПоказательЗначение
ГеографияМинск и ближайшие пригороды
Активные объявления~18 000
Разрешённые источники6
Брокеры45
Аналитики4
Руководители групп5
Основной процессСбор изменения → сопоставление → проверка → назначение → действие → результат

Каталог объявлений не нужен: команде нужен единый объект контроля, чтобы изменение не терялось между источником, таблицей, чатом и сводкой.

Роли

Аналитик рынка

Основной пользователь. Разбирает неоднозначные совпадения и потенциально важные изменения: подтверждает, отклоняет, объединяет или разделяет объекты.

Ограничение

Не должен просматривать все 18 000 записей: только исключения и сигналы, которые система не может закрыть сама.

Брокер

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

Ограничение

Не видит весь поток рынка — только релевантные изменения своей зоны.

Руководитель группы

Смотрит отклонения: сигналы высокой важности без реакции, просроченные действия, перегруженных исполнителей.

Ограничение

Не должен собирать сводку по чатам и таблицам.

Администратор

Подключает разрешённые источники, расписание обновлений, права, справочники территорий и базовые правила значимости.

Ограничение

Не меняет аналитические выводы сотрудников.

Как было

Утро аналитика без единого объекта

Рабочий день начинается не с анализа, а с восстановления картины рынка. Аналитик открывает несколько источников, повторяет одинаковые фильтры и просматривает новые карточки. Затем сверяет их с общей таблицей и пытается понять, является ли объявление новым или собственник изменил фотографии и заново разместил тот же объект.

Если цена изменилась, старое и новое значение записываются вручную. Если объявление исчезло, нельзя сразу определить причину: объект продан, снят с рекламы, заблокирован источником или будет опубликован заново. Чтобы передать наблюдение брокеру, аналитик копирует ссылку и комментарий в чат. Через несколько дней связь между сигналом и действием теряется.

Восемь шагов одной находки

  1. Открыть сохранённые фильтры в нескольких источниках.
  2. Просмотреть десятки похожих объявлений.
  3. Найти вероятные новые объекты и изменения.
  4. Сверить адрес, параметры, фотографии и телефон с таблицей.
  5. Добавить новую строку или исправить существующую.
  6. Отправить сообщение нужному брокеру.
  7. Позже уточнить, заметил ли брокер сигнал и что сделал.
  8. Подготовить для руководителя сводку вручную.
Как было: источники, таблица и чаты дают четыре версии одной ситуации

Где теряется контроль

1
Новое объявление ≠ новый объект

Одна квартира появляется несколько раз: от собственника, от разных агентов, после снятия и повторной публикации. Сравнение идентификаторов источника создаёт ложные сигналы.

2
Изменение не связано с решением

Снижение цены остаётся сообщением без владельца, срока и результата. Неясно, кому передали сигнал и связался ли брокер с собственником.

3
История живёт на уровне объявления

При повторном размещении старое объявление исчезает, новое начинает историю заново. Для объекта нужна непрерывная последовательность снимков.

4
Весь поток выглядит одинаково важным

Техническое исправление описания и исчезновение эксклюзивного предложения попадают в одну массу. Аналитик тратит внимание на шум.

5
Руководитель получает запоздалую картину

В сводке видно количество найденных изменений, но не качество работы с ними: что не проверено, у чего нет ответственного, что просрочено.

Источник, таблица, чат, сводка

четыре версии одной ситуации

Нужен единый контур

изменение → объект → проверка → действие → результат

Корневая причина — отсутствие единого жизненного цикла наблюдаемого объекта. Пока изменения, проверка и реакция существуют отдельно, команда управляет сообщениями, а не объектами.

Концепция

Основа сервиса — не лента объявлений, а карточка наблюдаемого объекта: публикации, история параметров, сигналы, решения сотрудников и следующее действие.

Замкнутый процесс

  1. Сервис получает очередную версию данных из разрешённого источника.
  2. Сопоставляет публикацию с существующим объектом или создаёт кандидата.
  3. Вычисляет изменения относительно последнего подтверждённого состояния.
  4. Применяет правила значимости и формирует сигнал.
  5. Аналитик подтверждает неоднозначные совпадения и ложные изменения.
  6. Подтверждённый сигнал попадает брокеру по территории, типу объекта или подписке.
  7. Брокер фиксирует действие и результат.
  8. Руководитель контролирует только сигналы без реакции, просроченные задачи и повторяющиеся отклонения.

Система не принимает коммерческие решения за сотрудника. Она определяет, что изменилось, собирает доказательства и предлагает приоритет. Решение о контакте, корректировке подбора или изменении статуса остаётся у брокера либо аналитика. Жизненный цикл здесь — у сигнала изменения, а не у карточки гарантийного дефекта: там единица работы — замечание после передачи квартиры, здесь — рыночное событие до сделки.

Контур процесса: изменение связывается с объектом, проверяется и заканчивается результатом

Из чего состоит рабочая карточка

Центральная карточка отделяет физический объект от его публикаций. Это позволяет хранить непрерывную историю даже при смене источника или идентификатора объявления. Это рыночная история публикаций, а не эксплуатационный паспорт уже введённого дома: УК ведёт осмотры и оборудование, агентство — снимки объявлений.

СущностьНазначение
Объект недвижимостиУстойчивая запись о квартире или доме: нормализованный адрес, параметры, статус наблюдения
ПубликацияКонкретное объявление в источнике с внешним идентификатором и автором
Снимок состоянияНабор значений публикации на момент проверки — не техпаспорт коммерческой недвижимости, а версия объявления
СигналЗначимое изменение, требующее проверки или реакции
ПодпискаУсловия, по которым сотрудник получает релевантные сигналы
ДействиеРешение сотрудника, срок, статус и результат реакции

Если уверенности в совпадении недостаточно, система не объединяет записи молча. Она создаёт задачу аналитика с двумя карточками рядом и объясняет признаки сходства. Ошибочное объединение двух квартир искажает всю последующую историю.

Главный экран — очередь изменений

Домашним экраном аналитика становится не обзорный dashboard, а рабочая очередь. Большую часть дня пользователь последовательно разбирает события, поэтому интерфейс оптимизирован под принятие решения, а не под наблюдение за графиками. Та же логика рабочей очереди, но другая единица: система размещения персонала закрывает заселение сотрудника, здесь — рыночный сигнал по лоту.

В верхней части — быстрые фильтры: «Новые объекты», «Изменение стоимости», «Снято», «Повторно опубликовано», «Возможный дубль», «Изменены характеристики». Рядом — территория, тип объекта, источник, уровень значимости и статус проверки.

Основная таблица содержит время обнаружения, тип изменения, адрес и краткие параметры, предыдущее и новое значение, уровень значимости, уверенность сопоставления, назначенного сотрудника, срок реакции и статус.

По выбору строки справа открывается контекстная панель без перехода на новую страницу: две версии карточки, связанные публикации, история последних событий и действия «Подтвердить сигнал», «Отклонить», «Объединить объекты», «Назначить брокеру». Такой паттерн «очередь + боковая панель» часто закладывают в разработку CRM на Laravel.

Цвет используется только как сигнал состояния. Красный — просрочка или критичная ошибка, янтарный — необходимость проверки, синий — новое событие, зелёный — подтверждённая обработка. Тип изменения всегда дублируется текстом и пиктограммой.

Очередь аналитика: разобрать сигнал, увидеть разницу и назначить действие

Руководителю не нужна полная техническая лента. Его экран показывает отклонения: сигналы высокой важности без реакции, просроченные действия и повторные события без решения. Управление по исключениям знакомо и управлению сетью парковок, только единица работы здесь — рыночное изменение, а не инцидент на площадке. Та же идея контроля отклонений, но не уборка: контроль качества клининга закрывает факт смены, здесь — реакцию брокера на сигнал.

Непрерывная история вместо набора ссылок

В шапке карточки — адрес, тип объекта, статус наблюдения, ответственный и следующее действие. Ниже — вкладки «История», «Публикации», «Сигналы», «Действия» и «Данные».

На вкладке «История» события собраны в одну шкалу: первая фиксация, вторая публикация, подтверждение совпадения, изменение стоимости, назначение брокеру, снятие, повторное появление с другим идентификатором, результат проверки.

Сервис сохраняет снимки и вычисленную разницу, а не только текущее значение. Для снятых публикаций различаются «Не обнаружено при проверке», «Источник сообщил о завершении» и «Ошибка источника». Эти состояния нельзя автоматически трактовать как совершённую сделку.

Ключевые сценарии

Подтверждение нового объекта

Публикация не находит надёжного совпадения. Аналитик проверяет адрес, параметры и похожие карточки. Если совпадений нет — подтверждает создание объекта. Новый объект появляется один раз и сразу попадает релевантным сотрудникам.

Проверка возможного дубля

Совпадают адрес и площадь, различаются этаж и часть фотографий. Аналитик видит карточки рядом и выбирает «Это один объект» либо «Разные объекты». Решение попадает в журнал и уточняет правила сопоставления.

Реакция на значимое изменение

Изменение стоимости превышает порог или объект связан с клиентским подбором. После подтверждения сервис назначает действие брокеру и срок реакции. Изменение становится контролируемым действием, а не сообщением в чате.

Снятие и повторное размещение

Публикация пропадает. Сначала ставится «Не обнаружена»; после повторной проверки — «Снято». Похожая публикация с новым идентификатором возвращается в прежнюю карточку объекта.

Контроль необработанных сигналов

Руководитель видит события высокой значимости без реакции, просрочки и накопившиеся очереди. Он переназначает действие или запрашивает комментарий, не просматривая закрытые сигналы.

MVP

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

В первой версии

Пользователи, роли и разграничение доступа
До шести разрешённых источников через адаптеры импорта
Нормализация адресов и основных характеристик
Правила сопоставления и ручная проверка неоднозначных дублей
Снимки состояния и история изменений
Очередь сигналов с фильтрами, значимостью и статусами
Подписки по территории, типу объекта и адресам
Назначение действия, срок реакции и фиксация результата
Контроль отклонений для руководителя
Уведомления в системе и по email для срочных подтверждённых сигналов

Осознанно отложено

Публичный каталог и кабинеты клиентов
Автоматический обзвон и интеграция с телефонией
Двусторонняя синхронизация со всеми CRM
Сложная прогнозная аналитика
Анализ изображений и текстов с помощью ИИ
Мобильное приложение
Расширенная геоаналитика по полигонам и маршрутам
Автоматическое изменение карточек во внешних системах

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

Что система делает автоматически

Автоматизация строится на прозрачных правилах. Для каждого сигнала пользователь может увидеть, почему он создан и почему получил определённую значимость.

ПравилоАвтоматическое действиеИсключение
Новая версия публикации отличается от предыдущейСохранить снимок и вычислить изменённые поляИгнорировать технические поля и перестановку фотографий без изменения состава
Совпадают нормализованный адрес и устойчивые параметрыПредложить связь с существующим объектомПри конфликте этажа, площади или типа — отправить случай аналитику
Публикация отсутствует в одном циклеСтатус «Не обнаружена»Не считать снятой до повторной проверки или явного статуса источника
Сигнал соответствует подпискеОпределить получателя и рабочую группуПри нескольких возможных ответственных — очередь руководителя
Изменение превышает порог значимостиПовысить приоритет и сократить срок реакцииАналитик может понизить приоритет с обязательной причиной
Срок действия истёкОтметить просрочку и показать руководителюРуководитель переназначает или закрывает с объяснением
Один источник временно недоступенПовторить загрузку и показать состояние интеграцииНе создавать массовые сигналы о снятии до восстановления источника

Приоритет не является непрозрачным «умным рейтингом». В MVP он считается по понятным факторам: тип и величина изменения, территория, связь с подпиской, активность объекта и срок с момента обнаружения.

Откуда поступают данные

MVP работает только с источниками, для которых у организации есть разрешённый способ получения данных:

  1. регулярные партнёрские XML- или JSON-выгрузки;
  2. импорт файлов по согласованному формату;
  3. синхронизация с собственной базой агентства;
  4. ручное добавление ссылки или карточки брокером.

Для каждого источника хранятся происхождение записи, время получения и технический статус. Если источник меняет структуру данных, импорт останавливается изолированно: уже сохранённая история объектов остаётся доступной.

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

UX, стек и план

Очередь как рабочий стол

Аналитик одновременно работает с таблицей, фильтрами, панелью сравнения и локальным состоянием выбранной строки. Цвет ячейки сопровождается подписью статуса: янтарный означает «нужна проверка», а не «объект плохой». Просрочка видна отдельно от нового события.

Архитектура

Для MVP подходит единое Laravel-приложение в форме модульного монолита: бизнес-логика, фоновые процессы, интерфейс и интеграционные адаптеры разделены на предметные модули, но живут в одном контуре.

Client

  • Inertia
  • React
  • TypeScript
  • рабочая очередь
  • панель сравнения

React используется внутри Laravel через Inertia, а не как отдельный SPA. TypeScript снижает риск ошибок в структурах снимков и различий между состояниями. Отдельный публичный REST API на первом этапе не нужен: сессионная аутентификация Laravel.

Application

  • Laravel
  • модульный монолит
  • роли
  • импорт
  • сопоставление
  • сигналы

Модули: пользователи и доступ; источники и импорт; объекты и публикации; сопоставление; мониторинг снимков; подписки и сигналы; действия и контроль; отчёты и аудит.

Data

  • PostgreSQL
  • объекты
  • публикации
  • снимки
  • JSONB
  • trigram

Полнотекстовый и trigram-поиск закрывают адреса и похожие записи без отдельного поискового движка на модельном объёме 18 000 объявлений.

Queue

  • Redis
  • Horizon
  • импорты
  • повторные попытки

Redis обоснован потоком регулярных импортов: задания разных источников выполняются параллельно, повторяются после временных ошибок и не блокируют интерфейс.

Infrastructure

  • Nginx
  • PHP-FPM
  • Scheduler
  • workers
  • резервные копии

Мониторинг нужен, чтобы рано увидеть остановившийся импорт. WebSocket, объектное хранилище медиа, микросервисы и Kubernetes на первом этапе не добавляются.

Ключевые технические решения

  1. Адаптер на каждый источник. Изменение одного формата не затрагивает остальные импорты и предметную модель.
  2. Неизменяемые снимки состояния. Новая загрузка не перезаписывает историю; различия вычисляются между версиями.
  3. Двухуровневое сопоставление. Детерминированные признаки формируют кандидатов, неоднозначные случаи подтверждает аналитик.
  4. Идемпотентный импорт. Повторная обработка одной выгрузки не создаёт дубли сигналов и действий.
  5. Явный журнал решений. Объединение объектов, изменение приоритета и закрытие сигнала сохраняются с пользователем, временем и причиной.
Модульный монолит: очередь и сравнение состояний в Inertia, правила и импорт в Laravel

Надёжность и качество данных

Доступ ограничивается рабочими группами и ролями. Брокер видит объекты и сигналы своей зоны, аналитик — очередь проверки, руководитель — действия команды, администратор — настройки источников. Критичные действия пишутся в аудит.

  • контроль количества записей относительно обычного диапазона;
  • карантин для выгрузки с массовыми неожиданными изменениями;
  • повторные попытки при временной недоступности;
  • запрет массового создания сигналов о снятии при сбое источника;
  • уведомление администратора о задержке обновления;
  • повторная обработка выгрузки без дублей.

Pest покрывает нормализацию, сопоставление, переходы статусов, расчёт значимости, идемпотентность импорта и правила просрочки. Playwright — разбор сигнала, подтверждение дубля, назначение действия, фиксацию результата и контроль просрочки.

План на 12–13 недель

Проект внедряется не сразу на всю организацию, а через ограниченный рабочий контур. Срок до пилота — 12–13 недель.

0 нед 13 нед пилот
  1. 2 нед
    1

    Подготовка и правила данных

    Форматы двух приоритетных источников, единый вид районов и типов объектов, обязательные поля, примеры дублей. Вместе с аналитиками фиксируются первые правила значимости и причины закрытия сигналов.

  2. 5–6 нед
    2

    Базовый продукт

    Импорт, объекты, публикации, снимки, сопоставление, очередь изменений и карточка объекта. На тестовых выгрузках проверяется, что повторная загрузка не создаёт дубли и что временное исчезновение источника не превращается в массовое снятие.

  3. 3 нед
    3

    Действия и пилот

    Подписки, маршрутизация, сроки, уведомления и экран руководителя. Пилот: один аналитик, пять брокеров, один руководитель, два источника, одна категория и два района.

  4. 2 нед
    4

    Настройка процесса

    Разбор ложных сигналов, пороги, права, упрощение частых действий. Параллельное ведение старой таблицы — только на контрольный период, затем архив.

После пилота источники и рабочие группы подключаются поочерёдно. Для каждой новой территории проверяются качество адресов, доля неоднозначных совпадений и нагрузка на аналитика. Масштабирование останавливается, если очередь проверки растёт быстрее, чем команда успевает её разбирать.

Метрики

Показатели ниже — целевые диапазоны демонстрационного сценария, а не результаты реального внедрения. Базовая линия собирается две недели до пилота, затем сравнивается с четырьмя неделями стабильной работы пилотной группы.

МетрикаМодельное состояние доЦель пилотаКак измеряется
Медианное время от получения изменения до обнаружения сотрудником1,5–3 часадо 20 минутВремя появления данных в источнике и время создания сигнала
Ручные переходы между инструментами на одно изменение6–82–3Наблюдение за типовым сценарием
Доля сигналов высокой значимости без назначенного ответственного15–25%менее 5%Статусы сигналов на конец рабочего дня
Доля объектов с непрерывной историей после повторной публикации45–60%более 85%Выборка повторных публикаций
Медианное время подготовки оперативной сводки руководителя40–60 минутменее 10 минутХронометраж подготовки одной сводки
Доля неоднозначных дублей, обработанных в срокне измеряетсяболее 90%Журнал задач аналитика

Дополнительно на вручную проверенной выборке измеряются доля корректных автоматических связей и доля пропущенных дублей. Если качество ниже согласованного порога, система чаще отправляет случаи на ручную проверку и не компенсирует ошибку более агрессивным объединением.

Риски и выводы

Риски

РискВероятностьВлияниеСнижение
Источник меняет формат или прекращает выгрузкуСредняяВысокоеИзолированные адаптеры, журнал импорта, раннее уведомление, отсутствие зависимости от одного источника
Низкое качество адресов создаёт лишние дублиВысокаяВысокоеНормализация, словарь адресов, порог уверенности и ручная проверка
Аналитик получает слишком много малозначимых сигналовСредняяВысокоеПилотные правила, группировка однотипных изменений, разбор причин отклонения
Сотрудники продолжают вести параллельную таблицуСредняяСреднееОграниченный контрольный период, импорт стартовой истории, единые правила фиксации результата
Ошибочное объединение разных объектов искажает историюСредняяВысокоеДвухуровневое сопоставление, запрет автообъединения при конфликте полей, возможность отмены
Условия использования данных ограничивают мониторингСредняяВысокоеПроверка разрешений до подключения, происхождение данных, отключаемый адаптер
Массовый сбой источника создаёт ложные событияСредняяВысокоеКарантин аномальной выгрузки, повторная проверка, запрет массового снятия

Развитие после подтверждения процесса

Следующие функции имеют смысл только после того, как накоплена качественная история объектов и сотрудники стабильно фиксируют результаты действий.

  1. Связь с клиентскими подборами. Сигнал показывается брокеру, если объект соответствует активным критериям клиента. Решение о добавлении в подбор остаётся за сотрудником.
  2. Геоаналитика предложения. Изменение количества активных объектов, времени экспозиции и структуры предложений по районам. PostGIS — только после реальных пространственных сценариев.
  3. Помощь в разборе дублей. ИИ сравнивает описания и изображения и предлагает вероятность, что две публикации относятся к одному объекту. Это не замена правилам MVP, а сценарий AI-автоматизации бизнес-процессов на накопленной проверенной выборке: модель ищет сходства и противоречия, аналитик всегда подтверждает объединение. Типовые фотографии, похожие планировки и переписанные описания остаются источником ошибок.
  4. Краткая сводка изменений объекта. Черновик по событиям карточки без внешних фактов; сотрудник проверяет текст перед сохранением.
  5. Интеграция с основной CRM. Передавать подтверждённый итог действия, а не весь технический поток наблюдений.

Как меняется процесс

Было

  • аналитик вручную повторяет одинаковые поиски;
  • один объект существует как несколько ссылок и строк;
  • изменение передаётся сообщением без владельца;
  • снятие объявления трактуется на глаз;
  • руководитель собирает сводку по чатам;
  • история заканчивается при повторной публикации;
  • все события конкурируют за внимание.

Станет

  • сервис собирает изменения, аналитик разбирает исключения;
  • публикации объединены в непрерывную карточку объекта;
  • сигнал получает статус, ответственного и срок реакции;
  • система различает отсутствие, подтверждённое снятие и сбой источника;
  • руководитель видит необработанные и просроченные отклонения;
  • новый идентификатор продолжает историю прежнего объекта;
  • приоритет объясняется прозрачными правилами и подписками.

Главное изменение — не ускорение просмотра объявлений. Сервис создаёт управляемый контур наблюдения: событие обнаруживается, связывается с объектом, проверяется, получает владельца и заканчивается зафиксированным решением. У агентства появляется не просто больше данных о рынке, а воспроизводимый процесс работы с изменениями.

Человеку остаётся часть работы, где нужен контекст и профессиональное решение. Машине передаются повторяющиеся операции: сбор состояний, сравнение версий, маршрутизация и контроль сроков. Аналитик занимается качеством сигналов, брокер — действиями по релевантным объектам, руководитель — отклонениями, которые требуют вмешательства.

Обсудить проект

Нужна разработка сервиса мониторинга объявлений, очереди изменений и карточки объекта, MVP на Laravel + Inertia — см. разработку на Laravel. Другие концепции — в каталоге решений (раздел «Решения» в навигации выше).

Связаться