# Made by Ernest — Эрнест, дизайнер и разработчик Эрнест — независимый дизайнер и разработчик из Уфы, автор портфолио Made by Ernest. Проектирует интерфейсы, разрабатывает сайты, интернет-магазины, CMS и CRM, связывает их с внешними сервисами и сопровождает запуск. Основной сайт: https://madebyernest.ru/ Обновлено: 2026-09-05 --- ## Работа Я Эрнест — независимый дизайнер и разработчик из Уфы. Сам веду проекты от исследования и визуальной системы до frontend, backend, интеграций, запуска и поддержки. Работаю напрямую с заказчиком: дизайн и технические решения складываются в один продукт. В портфолио — четыре коммерческих цифровых продукта в продакшене и один независимый концепт. Это описание возможностей и реализованных решений, а не измерение продаж или конверсии. --- ## Услуги - Лендинги. Одна сильная страница для продукта, услуги, события или рекламного запуска. - Сайты для бизнеса. Сайт, который объясняет предложение и помогает выбрать услугу: от знакомства до обращения. Пример: https://madebyernest.ru/work/uley - Каталоги и магазины. Товары, вариации, фильтры, корзина и заказы. Импорт цен и управление остатками в одном кабинете. Пример: https://madebyernest.ru/work/sansara - CRM и кабинеты. Внутренние системы, роли, статусы и рабочие сценарии команды — вместе с клиентским сайтом. Пример: https://madebyernest.ru/work/tsar - Боты и интеграции. Telegram-боты, заявки, уведомления и обмен данными между сайтом и нужными сервисами. Пример: https://madebyernest.ru/work/tsar - MVP и веб-сервисы. Рабочий продукт под собственную логику: модель данных, интерфейс, API и управление контентом. Пример: https://madebyernest.ru/work/plener --- ## С какой задачей ко мне приходить? Когда важны и характер сайта, и то, что происходит после нажатия кнопки. Магазин с обновлением цен — Sansara Store. Доставка с работой команды — «Царь Ролл». Архив с собственным кабинетом — «Пленэр». Эти механики разобраны в кейсах. --- ## Ты делаешь только дизайн или ещё и разработку? Оба этапа. Я проектирую структуру и сценарии, собираю визуальную систему, разрабатываю интерфейс и серверную часть, подключаю интеграции. Состав моей работы указан отдельно в каждом кейсе. --- ## Все проекты в портфолио — клиентские? Четыре проекта представлены как коммерческие продукты в продакшене. «Пиццман» — независимый неофициальный концепт для двух меню, созданный без заказа брендов. В кейсах есть ссылки на оригиналы, реализованные решения и их ограничения. --- ## Как узнать стоимость и сроки? Напишите, что делает бизнес, кому нужен сайт и какой сценарий он должен закрыть. Полезны текущий сайт, примеры и желаемая дата запуска. Объём зависит от контента, каталога, кабинетов и интеграций; обсудим состав работы до старта. --- ## ПИЦЦМАН Независимый концепт для «Пиццмана» и «Маняв»: от рисованных персонажей и гастрономических иллюстраций до поиска блюда, состава и звонка в заведение. Статус: НЕЗАВИСИМЫЙ КОНЦЕПТ. Личный неофициальный проект, созданный без заказа брендов. Роль Эрнеста: Концепция · арт-дирекшн · UX/UI · frontend. Кейс: https://madebyernest.ru/work/pizzman Оригинал: https://e-testtest.ru/ Задача: Меню должно передавать характер кухни и помогать выбирать. У пиццы, домашних блюд и десертов разная подача, но гостю везде нужны понятные категории, цена и подробности. ### Реализованные решения - У каждой кухни — собственная сцена. «Пиццман» построен вокруг крупных иллюстраций, кота и ярких глав меню. У «Маняв» — своя палитра, фотографии и более спокойный ритм. Между ними можно перейти через общий вход. Различия брендов определяют композицию, а не только цвет кнопок. - Печатное меню переведено в логику выбора. Технические категории «Маняв» объединены в понятные гостю разделы. Блюда с общей фотографией собраны в семейства; в карточках сохранены варианты порций, добавки и пищевая ценность, когда они есть в данных. Можно сравнить близкие блюда, не просматривая повторяющиеся фотографии. - Характер не мешает найти блюдо. В обеих витринах работают поиск по названию и описанию, фильтры и подробные карточки. Категории и контент присутствуют в серверном HTML; тяжёлые изображения ниже первого экрана загружаются отложенно. У выразительной страницы есть короткий путь к конкретной позиции. ### Границы и развитие - Меню, а не система заказов. В концепте нет корзины, онлайн-оплаты или передачи заказа на кухню. Его сценарий заканчивается выбором блюда и переходом к телефону или адресу. - Контент обновляется в исходниках. Цены, блюда и составы хранятся в TypeScript и JSON. Собственной редакторской панели и синхронизации с ресторанной системой пока нет. Следующие шаги: - Подключить редактор меню и единый источник цен. - Доработать управление фокусом в карточках блюд и проверить весь путь с клавиатуры. Стек: React + Vinext (две страницы меню и серверный HTML); TypeScript + JSON (блюда, порции, добавки и категории); CSS + локальные медиа (две визуальные системы и иллюстрации). Концепт демонстрирует, как превратить два меню в разные по характеру цифровые продукты. Его результат — работающий интерфейс и арт-дирекшн; коммерческий эффект не измерялся. --- ## SANSARA STORE Магазин техники, в котором выбор конфигурации связан с WooCommerce, цены приходят из рабочей таблицы, а б/у устройства — из публикаций в Telegram. Статус: В ПРОДАКШЕНЕ. Роль Эрнеста: UX/UI · WordPress · WooCommerce · автоматизация. Кейс: https://madebyernest.ru/work/sansara Оригинал: https://sansarastore.ru/ Задача: У одной модели десятки сочетаний памяти, цвета и связи, а каждый б/у телефон — отдельный экземпляр. Задача магазина — сохранить эти различия от карточки товара до заказа и дать команде управлять ими без повторного ввода. ### Реализованные решения - Выбор опирается на реальную вариацию. Цвет, память и тип связи связаны с вариациями WooCommerce. Карточка показывает цену и наличие выбранной конфигурации; подходящие аксессуары подбираются с учётом категории и доступности. Красивый переключатель выбирает конкретный товар для корзины. - Импорт проверяет данные до записи. Модуль цен проверяет строки и SKU, блокирует одновременный запуск и ведёт журнал. При ошибке сохранения предусмотрен откат; прерванный импорт требует проверки перед следующим запуском. Обновление каталога учитывает сбои и ошибочные входные данные. - Б/у телефон остаётся отдельным экземпляром. Публикация Telegram получает устойчивую связь с товаром по ID поста. Повторный импорт обновляет эту позицию. Для устройства задан единичный остаток, запрещён предзаказ, отметка о продаже снимает его с наличия. Повторный запуск не должен создавать ещё один экземпляр того же телефона. ### Границы и развитие - Расписание зависит от окружения. В коде цены обновляются каждые 10 минут, Telegram — раз в час. Фактический запуск зависит от WP-Cron и настройки серверного расписания. - Источникам нужна дисциплина. Импорт Telegram зависит от структуры публичных постов. У витринных экземпляров SKU пока включает номер строки таблицы, поэтому перестановка строк требует отдельной миграции. Следующие шаги: - Ввести постоянный ID для каждого витринного экземпляра. - Свести ошибки и давность двух импортов в один экран контроля актуальности. Стек: WordPress + WooCommerce (контент, вариации, остатки и заказы); Собственная тема + PHP-плагины (витрина, кабинет и импорт каталога); CSV + Telegram + WP-Cron (два источника и расписание обновлений). Витрина и работа команды связаны общей товарной моделью. Сильная часть проекта — не количество карточек, а правила их обновления и сохранение связи между конфигурацией, экземпляром и заказом. --- ## ПЛЕНЭР Онлайн-галерея объединяет произведения, художников, пленэры и коллекции. За музейной подачей — собственная модель данных и кабинет для пополнения архива. Статус: В ПРОДАКШЕНЕ. Роль Эрнеста: UX/UI · разработка · CMS. Кейс: https://madebyernest.ru/work/plener Оригинал: https://plener-russia.ru/ Задача: Работу нужно находить через автора, коллекцию и историю пленэра. Простая папка изображений этого не даёт: произведению нужны описание, техника, год, место, выставочная история и связь с художником. ### Реализованные решения - Произведение — самостоятельная сущность. У картины есть автор, техника, размеры, год, место, описание и выставочная история. Отдельные сущности описывают художников, коллекции и пленэры. Архив сохраняет контекст произведения, а не только файл изображения. - Права связаны с авторством. API проверяет владельца при изменении профиля и произведений. Автор управляет своими материалами; администратор — общим каталогом и его структурой. Пополнение можно распределить между художниками, сохраняя границы редактирования. - Галерея собирается из данных. Каталоги, фильтры и счётчики используют общий API. Изображения можно загрузить из CMS, а карточки произведений связываются с автором без ручной правки его страницы. Добавление контента не требует заново верстать галерею. ### Границы и развитие - Рост архива увеличивает загрузку. Каталог произведений выдаётся целиком, часть фильтрации и подсчётов выполняется в браузере. С увеличением коллекции понадобятся серверные фильтры и постраничная выдача. - Оригиналы требуют бережной подготовки. Загрузка сохраняет изображение без генерации превью. Отложенная загрузка помогает, но не заменяет уменьшенные версии для списка и отдельный оригинал для просмотра. Следующие шаги: - Добавить размеры превью и серверную фильтрацию каталога. - Покрыть права автора, загрузку медиа и публикацию работ интеграционными тестами. Стек: HTML + CSS + JavaScript (галереи, фильтры и просмотр работ); FastAPI + SQLAlchemy (модель архива и проверки прав); SQLite + файловое хранилище (данные произведений и изображения). Получился пополняемый цифровой архив с авторским доступом. Его ценность — связи между материалами и самостоятельная работа с контентом; следующий этап связан с масштабом каталога и обработкой медиа. --- ## УЛЕЙ Сайт семейного центра помогает разобраться в комнатах и пакетах, посмотреть пространство и перейти к записи. Маскоты, фотографии и подбор связывают эмоцию с конкретным предложением. Статус: В ПРОДАКШЕНЕ. Роль Эрнеста: Стратегия · UX/UI · разработка · CMS. Кейс: https://madebyernest.ru/work/uley Оригинал: https://uley-ufa.ru/ Задача: Семья выбирает сразу несколько вещей: размер компании, день, программу и бюджет. Эти условия нужно показать вместе с атмосферой центра, составом пакета и понятным следующим шагом. ### Реализованные решения - Условия собраны вокруг сценария семьи. Подбор разбит на четыре вопроса. В результат вынесены комната, пакет, фотографии и цена для будней или выходных. Страницы пакетов позволяют изучить детали отдельно от квиза. Формат отдыха можно оценить до разговора с менеджером. - Атмосфера помогает представить посещение. Фирменные пчёлы, фотографии комнат, галереи и движение создают узнаваемую среду. Секции ниже первого экрана вынесены в отдельные React-модули. Визуальный рассказ подкреплён изображениями самого пространства. - Повседневный контент вынесен в CMS. Акции, отзывы, видео, партнёры и часть медиа редактируются через API. Общий хук объединяет одновременные запросы контента и обновляет данные после сохранения в админке. Команда может менять материалы сайта через рабочий интерфейс. ### Границы и развитие - Запись находится во внешней системе. Сайт передаёт гостя в YCLIENTS. Собственная очередь бронирований и гарантированная передача ответов квиза в запись в этом решении не реализованы. - Подбор и тарифы требуют доработки. В текущей реализации расчёт может пропускать последний ответ о бюджете. Цены пакетов хранятся в исходниках, поэтому CMS пока не управляет всем предложением. Следующие шаги: - Исправить учёт последнего ответа и проверить все сочетания условий подбора. - Перенести тарифы в единый источник данных и связать выбранный формат с записью. Стек: React + TypeScript + Vite (страницы, подбор и административный интерфейс); Express + SQLite (API контента и локальная база); Framer Motion + Swiper (движение и галереи). Сайт соединяет атмосферу центра, изучение пакетов и переход к записи. Это витрина услуг с подбором и CMS; завершение бронирования остаётся за YCLIENTS. --- ## ЦАРЬ РОЛЛ Витрина доставки связана с кабинетом команды: заказ проходит проверку, сохраняется с историей, движется по этапам и отправляет уведомления в Telegram и MAX. Статус: В ПРОДАКШЕНЕ. Роль Эрнеста: UX/UI · fullstack · CRM · автоматизация. Кейс: https://madebyernest.ru/work/tsar Оригинал: https://xn--80awakja3b0c.xn--p1ai Задача: Принять корзину недостаточно. Нужно проверить её по действующему меню, согласовать заказ, провести его через кухню и доставку, сохранить историю клиента и корректно учесть отмену. ### Реализованные решения - Сервер заново проверяет корзину. Цена берётся из каталога, недоступные позиции исключаются, одинаковые товары объединяются. Количества ограничены, телефон нормализуется, повторная отправка с тем же ключом возвращает существующий заказ. Расчёт и защита от повторного заказа не зависят только от браузера. - Статусы управляют работой и учётом. Нельзя пропустить этап или снова открыть завершённый заказ. История хранит смену статуса и исполнителя. Промокоды и клиентские показатели учитывают подтверждение; отмена корректирует их. Новый заказ не становится подтверждённой выручкой автоматически. - Сохранение предшествует уведомлению. Заказ записывается в SQLite, затем отправляются сообщения. Сотрудники Telegram проходят одобрение владельца и могут менять этапы кнопками. CRM собирает историю заказов по нормализованному телефону. Кабинет остаётся основным рабочим местом, а мессенджер помогает реагировать. ### Границы и развитие - Подтверждение не означает оплату. Оплата согласуется по телефону; платёжный шлюз в исследованном пути заказа не подключён. Операционные показатели нельзя выдавать за банковскую сверку. - Доставке сообщений нужен отдельный контроль. Ошибки отправки уведомлений журналируются. Устойчивой очереди с повторными попытками в этом пути нет; сохранение всего состояния также потребует пересмотра при росте истории. Следующие шаги: - Добавить очередь уведомлений с повторной отправкой и контролем результата. - Перейти от перезаписи общего состояния к отдельным операциям с заказами; проверить нагрузку. Стек: JavaScript + Node.js (витрина, кабинет и серверные правила); SQLite + транзакции (заказы, история и клиентские данные); Telegram + MAX (уведомления и действия сотрудников). Проект охватывает путь от корзины до работы команды. Его сильная сторона — явные правила заказа и учёта; надёжность доставки уведомлений и масштабирование хранения остаются направлениями развития. --- ## Контакт Telegram: https://t.me/madebymes MAX / телефон: +79174091992 На главной показаны презентационные арты. Рабочие сайты открываются по ссылкам в кейсах. Текстовая версия собрана из тех же данных, что и страницы портфолио.