Существует заметный пробел на рынке B2B-роботов. Когда руководитель предприятия ищет уборочного робота, а оператор склада оценивает автономные мобильные роботы (AMR), они сталкиваются с фрагментированным ландшафтом. Нет единой платформы для сравнения моделей разных производителей. Приходится посещать десятки сайтов, заполнять контактные формы и ждать дней ради получения цен. Эта проблема характерна для рынков коммерческих дронов, роботов доставки и промышленной автоматизации. Решением стал GrabaRobot — каталог-сравнитель, охватывающий 25 категорий, от уборочных и сервисных роботов до паллетайзеров и робособак.
Архитектура стека: минимализм и эффективность
Для реализации был выбран максимально простой и экономичный стек:
- Next.js 15 (App Router) для рендеринга и маршрутизации.
- SQLite (через
better-sqlite3) в качестве базы данных. - Tailwind CSS v4 для стилизации.
- Vercel для хостинга.
Ключевая особенность — полное отсутствие сервера базы данных, ORM или выделенного API-слоя. Всё строится вокруг файла SQLite, который поставляется вместе со сборкой проекта. Запросы к данным выполняются напрямую из серверных компонентов Next.js.
Почему SQLite, а не PostgreSQL?
Для каталога продукции, который обновляется еженедельно, а не ежечасно, SQLite оказался идеальным выбором.
- Нулевая инфраструктура: файл
.dbнаходится прямо в репозитории. - Мгновенное чтение: запросы выполняются без сетевой задержки, за доли миллисекунды.
- Простота миграций: достаточно запустить SQL-скрипты.
- Бесплатность: никаких расходов на управляемую базу данных.
Есть и компромисс — отсутствие конкурентной записи. Однако в данном контексте это не проблема, поскольку все данные о продуктах обновляются через предварительные скрипты, а не пользовательский ввод в реальном времени.
Структура данных и поддержка локализации
Схема базы данных поддерживает 25 категорий, 270 производителей и 501 продукт. Основные таблицы включают categories, products, manufacturers и scenes (для контекста использования, например, "коммерческий" или "бытовой").
Наиболее интересной является реализация интернационализации (i18n). Вместо того чтобы добавлять в каждую таблицу колонки вроде name_en, name_es, description_fr, используется единая таблица translations:
translations (entity_type, entity_id, locale, field, value)
Эта гибкая структура позволяет хранить переводы для любого поля любой сущности (продукта, категории, производителя) в одной таблице, упрощая управление мультиязычным контентом и масштабирование.
Механика работы: от запроса к интерфейсу
Работа приложения начинается с пользовательского запроса. Например, при переходе по адресу /en/cleaning-robots запускается серверный компонент Next.js. Этот компонент напрямую обращается к файлу SQLite, выполняя запросы для получения необходимых данных: списка роботов в категории "Cleaning", информации о производителях, переводов на английский язык.
Полученные данные сразу используются для рендеринга страницы на сервере. Пользователь получает полностью готовый HTML-документ. Фильтрация по спецификациям (например, время работы, вес, цена) также обрабатывается на сервере через параметры URL, что обеспечивает быстроту и SEO-дружественность.
Такой подход полностью устраняет затраты на содержание и вызовы внешнего API, поскольку логика работы с данными интегрирована непосредственно в серверную часть приложения.
Практические результаты и выводы для разработки
Использование SQLite в связке с серверными компонентами Next.js доказало свою эффективность для определённого класса проектов — справочников, каталогов, блогов и маркетплейсов с умеренной частотой обновлений. Этот стек обеспечивает:
- Существенную экономию: отсутствие счетов за базу данных или серверы API.
- Высокую производительность: время отклика измеряется миллисекундами благодаря локальному доступу к данным.
- Простоту развертывания и разработки: база данных является частью кодовой базы, что упрощает управление средой.
Главное — четко оценить требования проекта. Если не требуется обработка высоконагруженных одновременных операций записи от множества пользователей, то современный SQLite в связке с мощными серверными фреймворками открывает путь к созданию быстрых, функциональных и крайне экономичных веб-приложений.