Muhammad Arslan
Нанять меня
Назад к проектам

VCM

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

Роль: Lead front-end engineerСроки: 2025-2026Тип: Web app (B2B SaaS)

React 19

React Router 7

Vite

TypeScript

SCSS

Jotai

SWR

Firebase Cloud Messaging

Дашборд собственника VCM с тестовым комьюнити, примером баланса и заявками на обслуживание

Обзор

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

Проблема

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

Моя роль и подход

Я руководил разработкой фронтенда: архитектурой приложения, общим слоем данных, переиспользуемыми UI-паттернами и ролевой структурой, связывающей систему воедино. Будучи ведущим контрибьютором кодовой базы, я задал стандарты, которым следовали остальные этапы разработки. Моим приоритетом было избежать типичной для подобных приложений ловушки — повторного написания логики таблиц, фильтров и форм под каждую новую сущность. Вместо этого я разработал компактный набор надежных примитивов и оболочку с разграничением прав, благодаря чему внедрение нового рабочего процесса стало вопросом композиции, а не изобретения с нуля.

Стек технологий

ФреймворкReact 19 with React Router 7
РазработкаVite
ЯзыкTypeScript
СтилизацияSCSS, organised per feature
СостояниеJotai for app-wide state (auth, sidebar, selected property, notifications)
ДанныеSWR over a shared Axios client, with automatic auth handling
УведомленияFirebase Cloud Messaging
ОтчетностьRecharts for dashboards; @react-pdf/renderer and CSV utilities for exports

Ключевые особенности

Два ролевых интерфейсараздельные оболочки для администратора и собственника, которые направляют пользователей в нужный раздел и контролируют права доступа.
Навигация с учетом прав доступабоковая панель формируется на основе фактических прав каждого пользователя, поэтому люди видят только то, с чем им разрешено работать.
Общий слой данныхединый конвейер запросов добавляет заголовки авторизации и устройства, кэширует с помощью SWR и корректно перенаправляет пользователя на страницу входа при истечении сессии.
Переиспользуемые функциональные примитивытаблицы списков с пагинацией, поля фильтрации с привязкой к URL, модальные формы, карточки графиков, загрузка файлов и кнопки экспорта, из которых собирается всё приложение.
Охват операционных задачзаявки на обслуживание, бронирование удобств и календарь комьюнити, финансовые экраны (платежи, выписки, счета, напоминания), управление пользователями и объектами, а также отчетность.
Push-уведомленияFirebase Cloud Messaging со всплывающими уведомлениями внутри приложения.
Экспорт в PDF и CSVдля финансовых процессов и формирования отчетов, требующих выгрузки в автономный или готовый к подаче формат.

Галерея

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

Сложности и решения

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

Другой постоянной потребностью было состояние, устойчивое к реальным условиям. Я реализовал пагинацию и фильтрацию списков через параметры URL (query string), что делает представления удобными для отправки по ссылке, сохраняет естественную работу кнопок браузера «Назад» и «Вперед» и удерживает состояние таблиц при перезагрузке страниц. Я централизовал аутентификацию в общем состоянии и на уровне запросов, сохранив функциональные компоненты легковесными, а также внедрил предохранители ошибок (error boundaries), состояния загрузки и корректное перенаправление при истечении сессии, чтобы насыщенный дашборд никогда не падал молча.

Результат

VCM — это единый фронтенд, полноценно закрывающий обе стороны управления комьюнити. Операционные команды ведут полный жизненный цикл объектов из одного рабочего пространства администратора, а жильцы самостоятельно оплачивают счета, создают заявки, оформляют бронирования и просматривают документы. Благодаря архитектуре на общих примитивах и обо��очке с учетом прав доступа, кодовая база масштабируется по мере добавления новых рабочих процессов, не утяжеляясь с каждым из них.

Столкнулись с похожей продуктовой задачей?

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

Услуги разработки SaaS
Заполнить бриф проекта
Все проектыСледующий проектZED (My Islamic Reminders)
VCM: Платформа для управления недвижимостью и комьюнити (фронтенд на React) | Muhammad Arslan