Хабр, привет!
Меня зовут Артём. Я — fullstack-разработчик уровня Middle, работаю с проектами на Python, JavaScript, Golang, Rust. В этой статье хочу рассказать о том, как я, подсмотрев западное приложение Kahoot, решил с нуля разработать собственную платформу для интерактивного обучения с огромным количеством ИИ-функций.
Введение
В этом году я работаю над проектом Quaize — веб-платформой, позволяющей создавать учителям и проходить ученикам интерактивные викторины.
Была поставлена цель: сделать быстрый, надёжный, удобный сервис, которым легко смогут пользоваться учителя из моей школы, а также группа моих друзей.
В статье я расскажу, почему я выбрал стек Next.js + Go (хотя изначально был выбран Python, об этом будет рассказано далее в статье), как устроена архитектура, как работает realtime и UI, с какими проблемами сталкивались и как их решили.
Зачем?
Международная игровая платформа Kahoot перестала работать в России. Изучив существующие аналоги, я пришел к выводу, что требуется разработать платформу с новейшим, веселым для восприятия учеников интерфейсом, с ИИ-функциями, пока есть такая возможность. Изначально проект задумывался как pet-проект, но у меня появилось желание развивать его дальше.
Ключевые технические функции, которые я реализовал
ИИ-Ассистент: лучшая фича в приложении, помогающая учителям на ходу создавать игры по заданной теме, файлу или ссылке.


Изучив UI/UX ошибки в аналогичных платформах, я полностью переработал интерфейс игрового приложения.




Технические подробности
Почему Next.js + Go
Next.js
Next.js out-of-the-box даёт SSR, routing, оптимизацию и кеширование — это удобно для SEO, рендеринга и производительности.
После выхода Next.js 16, множество компонентов было переписано под Cache Components для большего ускорения производительности.
На фронтенде важно, чтобы страницы загружались быстро и не было зависшего интерфейса (хотя в Next.js такое часто происходит), особенно когда пользователи (учителя) просматривают каталог игр или отчёты.
Go для backend / real-time
Go — лёгкий, быстрый, несложный в обслуживании backend, хорошо подходит для real-time-логики, высокой нагрузки, долгих соединений.
Это даёт надёжность, масштабируемость, гибкость — если приложение вырастет до сотен или тысяч пользователей, Go поможет выдержать нагрузку.
В Go есть система каналов, которая отлично помогла обмениваться данными между горутинами во время игрового процесса.
Использованные библиотеки
Для дизайна был выбран Tailwind и Shadcn/UI, самые популярные библиотеки на данный момент. Также были добавлены визуальные эффекты, такие как Liquid Glass (через svg-фильтры) и закругленные кнопки и контейнеры (они же squircle).
Для WebSocket-ов на стороне Go выбор пал на gorilla/websocket.
Такой стек даёт оптимальное сочетание: скорость разработки + хорошая производительность + гибкость для дальнейшего роста.
Почему мы ушли от Python
Как было упомянуто ранее, изначально backend был на Python. Через некоторое время после начала создания проекта, в real-time части быстро появилась ключевая проблема: неудобство обмена состоянием между функциями.
В игре постоянно нужно передавать данные между разными обработчиками — состояние комнаты, игроков, ответы, таймеры. В Python это приводило к запутанной архитектуре: глобальные структуры, костыли с контекстами, сложная синхронизация.
Go решает это намного проще:
состояние игры удобно держать в отдельных горутинах
обмен данными — через каналы
код real-time логики получился чище и прозрачнее
В итоге Go оказался естественным выбором для поддержки живых сессий и синхронной работы игроков.
С какими проблемами столкнулись (и как решили)
UI + стилизация без дизайнера — Tailwind помог, но всё равно нужно следить, чтобы интерфейс был читаем и приятен на разных устройствах (desktop / mobile).
SEO и публичные страницы, PWA — чтобы лендинг и публичные разделы нормально индексировались, использовали возможности SSR/SSG в Next.js. PWA для установки на школьные устройства реализовывался через
next-pwa.
Что дальше / планы развития (roadmap)
Расширить возможности каталога игр, больше функций для взаимодействия с другими учителями.
Доработать статистику пользователей / рейтинг, чтобы повысить вовлечение.
Расширить библиотеку викторин — добавить теги, улучшить модерацию.
Постепенно улучшать UX/UI: анимации, переходы, мобильная версия, уведомления.
Настроить масштабируемый WebSocket-сервер, если трафик вырастет.
Заключение
Quaize — это не просто учебная викторина, это real-time платформа, предназначенная для использования учителями учителям по всей России и СНГ и построенная на современных технологиях: Next.js, Go, и др. Такой стек даёт баланс скорости, надёжности и гибкости.
lov4ble
Классный проект, если он open source то можешь им поделиться в сообществе open source программистов t.me/OpenSource_Chat. Буду рад новым единомышленникам свободного программного обеспечения! Честно не реклама, просто хочу от души поддержать))