В 2022-м мы окончательно задолбались.
Каждый новый проект все по кругу: таблички, формы, фильтры, CRUD. Всё снова, как в Groundhog Day. Копипастить старое было больно, собирать с нуля – ещё хуже. И главное, ощущение абсурда: 2022 год, а мы продолжаем лепить админки вручную, будто на дворе 2015.
Окей, логичный шаг – найти готовое решение.
Мы правда пытались не изобретать велосипед
Первым делом пошли смотреть на CMS. Попробовали Strapi – мощный зверь, но если вам просто нужно бэку выдать пару CRUD’ов, то тянуть за собой целую экосистему с философией и особым образом жизни, это как стрелять из базуки по воробьям.
Дальше, дизайн-системы вроде Salesforce Lightning, Fluent UI и Fusion Design. Компоненты красивые, но по факту это просто UI-кирпичики. Всю бизнес-логику, связи между сущностями, обработку данных всё равно пишешь сам. Хотели сэкономить время, а получили “ты теперь ещё и архитектурой займись”.
React-Admin показался перспективным. Но мы быстро поняли, что он хочет, чтобы ты делал вещи его способом. А мы хотели делать их по-своему. Онбординг тяжёлый, кастомизация сложная, UI на любителя. Как часто бывает: сначала кажется, что ты взял инструмент, а потом он берёт тебя.
Мы поняли: компромиссы – это медленно
Ни одно из решений не дало нужного нам баланса:
быстро поднять админку
без боли кастомизировать под проект
не увязнуть в чужих ограничениях
не затащить в проект тонну лишнего кода.
Тогда и родилась мысль: «Окей, а если сделать своё? Но только по уму. Без оверинжиниринга, зато с учётом всего, что нас бесило раньше.»
Так родился Admiral.
А теперь — техподробности, чтобы не думали, что мы тут пилили кнопку «войти»
Admiral – это небольшой, но крепкий фреймворк для сборки админок на React + TypeScript.
Он не тащит за собой монолит, не требует магии и лишней философии. Это скорее набор умных заготовок, который можно быстро натянуть на любой REST-бэкенд.
Что под капотом:
Готовые компоненты для CRUD, с возможностью их переопределения (если у вас есть душевная боль, которую хочется выразить в форме таблички)
Поддержка тем и стилизация под бренд клиента (даже если у него логотип Comic Sans)
Локализация без боли – используем i18next
Респонсив – работает не только на 1440px
Всё это в одной связке, без лишних зависимостей и свистелок.
Мы не делали MVP за выходные. Это заняло год и ~700 часов. Потихоньку вытаскивали повторяющиеся куски, оборачивали в компоненты, добавляли конфиги, писали доку.
Теперь Admiral работает в проде уже в 10+ проектах и каждый раз экономит нам часы, нервы и нецензурщину в коде.
TL;DR
Если вам каждый раз приходится собирать админку заново, у нас для вас есть подарок.
Admiral: https://github.com/dev-family/admiral
Мы будем рады фидбеку – как конструктиву, так и язвительным комментариям (всё-таки Хабр). Залетайте, пробуйте, кастомизируйте.
Может, пора перестать мириться с костылями?
cpud47
Не очень понял, чем ваше решение лучше альтернатив (того же RA). Всё же, если и делать анонс, то хотя бы покажите это решение (showcase), чем оно хорошо. Пока выглядит как локальная либо для решения конкретно ваших проблем.
Например, беглый просмотр вызвал вопросы:
Зачем-то полезли в аутентификацию и прибили гвоздями к своей самописной либе. Более того, требуете хранить токен в localStorage (что как бы не очень затея)
Все также нет возможности кастомизировать ui (ну кроме css - но это везде)
Требуете запуск в корне приложения (что если я хочу админку как часть моего приложения)
По сути, требуете фиксированную структуру урл. Даже пример делаете на своём апи, а не на каком-то публичном.
И это я даже не начал смотреть на собственном основной функционал - уверен, там тоже полезут вопросы.
Короче, выглядит как банальный NIH