**Веб-приложение для аналитики рекламных кампаний владельцев сайтов**
Разработал веб-приложение, которое предоставляет владельцам сайтов возможность создавать рекламные кампании и строить подробные отчёты об их эффективности.
Когда проект только запускался, он позиционировался как долгосрочный с большим количеством страниц. Это потребовало принятия архитектурных решений, позволяющих масштабировать кодовую базу без риска перегрузки приложения. Я тщательно спланировал этапы работ и согласовал их с менеджерами. Несмотря на первоначальный скептицизм относительно заявленных мной сроков, к Новому году заказчик получил релиз с 90% запланированного функционала.
Для нужд этого и будущих проектов я разработал общую библиотеку компонентов с возможностью темизации (благодаря Tailwind CSS) и задокументировал её с помощью Storybook для последующих поколений разработчиков. Понимая, что проект будет передан на поддержку junior/middle разработчику, я уделил особое внимание тому, чтобы упростить ему процесс разработки и понимание архитектуры.
Были созданы слои доступа к данным и управления состоянием приложения, а для их интеграции разработан специальный модуль, ставший аналогом RTK Query. Это позволило быстро интегрироваться с API, используя все преимущества механизмов управления состоянием и побочных эффектов.
В результате все модули состояли из надёжного, протестированного кода и бизнес-логики, основанной на проверенных помощниках. Для реализации простых CRUD-операций требовалось минимальное время — буквально пару часов на написание кода. Прочный фундамент был заложен, и junior-разработчик смог легко создавать новые модули из существующих компонентов, как из конструктора. Это значительно снизило затраты на поддержку и развитие проекта, а количество багов оставалось в пределах, комфортных для дальнейшего развития.
И это лишь вершина айсберга. В проекте также был модуль отчётов, разработка которого представляла особый интерес с архитектурной точки зрения: множество графиков, возможность перетаскивания элементов, реализация ленивой загрузки модулей — крупные роуты загружались асинхронно только при обращении к ним.
Я горжусь этим проектом и доволен полученным результатом, но ещё больше — приобретённым опытом.