🤖 Миграция с Next.js на Vanilla JS: Как ИИ Агент Qoder (бесплатная замена Cursor) помог переписать приложение «Голоса Животных России» для RuStore
Привет, читатели! Ранее я уже описывал пример создания приложения «Голоса животных России». Но вот незадача: изначально оно было написано на Next.js, и для работы ему требовался интернет. 📶 Для детского приложения это совершенно неудобно: то Wi-Fi пропал, то в машине сети нет. [Ссылка на приложение в конце статьи]
Решение очевидно: нужно «отвязать» приложение от сети и переписать его на чистый HTML, JavaScript и CSS, чтобы оно запускалось локально в браузере. Это позволило легко собрать его в нативное Android-приложение, работающее офлайн.
Забегая вперед, скажу, что в результате я собрал приложение для Android и успешно выложил его в RuStore! Приложение получилось быстрым, отзывчивым и меньше 3 мб. В качестве бонуса в конце я оставил ссылку на сборку Docker.
🧠 Выбор и знакомство с AI-агентом (Qoder — бесплатная замена платному Cursor)
Поискав в интернете, я понял, что подобную масштабную задачу по миграции кода можно поручить специализированным AI-агентам. В этот раз решил выбрать бесплатного китайского агента, который разворачивается локально под Windows.
Что такое Qoder?
Qoder (от Alibaba) — это агентская платформа для кодирования, разработанная для реальной разработки программного обеспечения. Она позиционируется как бесплатная замена и прямой конкурент платному AI-редактору Cursor и предлагает:
- Глубокое понимание кодовой базы благодаря интегрированной «инженерии контекста» (Enhanced Context Engineering).
- Способность систематически решать задачи по разработке ПО, работая с большими проектами.
- Поддержку интеграции с самыми современными моделями ИИ, включая Claude, GPT и Gemini.
🔗 Ссылка: https://qoder.com/
Установка Qoder под Windows
Процесс установки оказался максимально простым:
- Перейти на официальный сайт Qoder.
- Скачать установочный файл для Windows.
- Запустить инсталлятор и следовать инструкциям (как при установке любого стандартного приложения).
📝 Создание промта для Qoder
Чтобы Qoder максимально точно выполнил задачу миграции, необходимо было составить четкий и недвусмысленный промт. Я сформулировал его как техническое задание для опытного разработчика, исключив любые упоминания о Next.js в финальном коде.
Подготовка промт-запроса к AI агенту c использованием DeepSeek 🛠
Промт DeepSeek
Выбираем один из получившихся в результате вариантов и переводим на английский язык.
Получившийся вариант промта для AI агента :
Скачивание исходников и запуск промта в Qoder
Я предоставил Qoder исходный код Next.js-приложения (скачанный с GitHub) и запустил подготовленный промт.
Перевод занял около 10 мин и наше локального приложение было готово. Получившийся исходный код можно посмотреть по ссылке
Теперь нам нужно этот исходник запустить на мобильном телефоне или планшете. Уже подобное делал и описал процесс тут: «Как создать Android приложение из HTML-игры».
🚀 Финальная доработка и публикация в RuStore
Мы делаем сборку через Cordova, но сразу сталкиваемся с проблемами на мобильных устройствах, которые приходится «лечить» при помощи другого AI-помощника — DeepSeek:
- Проблема со звуком: Звук не работал. Оказывается, в Cordova нужно добавить специальный плагин для корректной работы с медиафайлами.
- Проблема с выделением контента: Возможность пользователю копировать/выделять контент может сбить с толку ребёнка. Находим лекарство при помощи DeepSeek:
3. Проблема с сенсорным вводом: Не адаптированный ввод с сенсорного дисплея (например, двойной тап вызывал зум). Так лечится при помощи пару заклинаний из DeepSeek (дополнительные метатеги и JS-обработчики).
Публикуем в RuStore, и вуаля — наше приложение готово. 🎉
Размер приложение получился меньше 3 мегабайт и работает шустро и без интернета! Не то что некоторые приложения. Двухлетний сын с удовольствием тапает животных и участвует в викторине.
Сын постарше, Егор, сказал: «Папа, а давай сделаем подобное приложение для Севы уже с машинками и спецтехникой». Уже вместе с Егором на генерировали образы изображение машинок, но об этом — в следующей статье.... 😉
Бонус:
Сборка Docker-контейнера