Геймификация давно вышла за пределы игрового пространства
- В Duolingo тебя мотивируют серии дней, XP и лиги
- В Яндекс Плюсе - задания, баллы и уровни
- В фитнес-приложении Strava - челленджи, прогресс и достижения
По сути, обычные действия превращаются в понятную систему целей, наград и наблюдения за своим прогрессом
Мы решили попробовать похожий подход внутри INNOPROG - только применить его к работе преподавателей и сделали систему внутренних баллов - иннопрожек (IP)
Преподаватель работает как обычно, а система сама смотрит на его показатели - проведённые занятия, сданные отчёты, отправленные записи занятий, взаимодействие с учеником вне занятий в чате и т.д.
На основе этих показателей считается эффективность работы за день и автоматически начисляются IP
То есть это не просто "провёл урок - получил баллы" - у каждого показателя есть свой вес
А дальше самое приятное - накопленные IP можно тратить во внутреннем магазине
Сейчас в качестве награды пока что используются промокоды, однако сама механика позволяет спокойно расширять каталог чем угодно
———
⚙️ Немного про разработку
По итогу нашей работы получился отдельный сервис внутри онлайн-платформы INNOPROG, который:
- собирает данные о работе преподавателей из внутреннего API INNOPROG
- каждый день автоматически формирует статистику
- начисляет внутреннюю валюту
- ведёт полную историю операций
- считает "ранги" преподавателей метрики эффективности
- следит за лимитами промокодов
- позволяет покупать награды за накопленные IP
Причём, механика работы такова, что статистику нельзя просто один раз посчитать и забыть - например, отчёт или запись занятия могут появиться не сразу, а спустя несколько дней
Поэтому система периодически пересчитывает и при необходимости корректирует начисления
Плюс важно было сделать так, чтобы случайный повторный запуск расчётов ничего не ломал и не начислял IP по много раз - это кстати называется идемпотентностью
Идемпотентность - это когда повторный запуск одной и той же операции не приводит к дополнительным изменениям состояния
В нашем случае это значит, что повторный пересчёт не должен второй раз начислить те же IP
Под капотом у всего этого дела:
- фронтенд на React👩💻 + TypeScript 👩💻
- серверная часть на FastAPI👩💻
- БД PostgreSQL👩💻
- APScheduler для ежедневных автоматических расчётов 🕓
- Docker для контейнеризации 👩💻
- GitHub Actions для автоматического запуска тестов при изменениях в бэкенде⚙️
До окончательного релиза на онлайн-платформе INNOPROG, деплоил бэк сервис через Railway - удобная штука для запуска небольших проектов в облаке
Деплой - процесс развёртывания проекта в облаке, чтобы он постоянно работал онлайн и стал доступен пользователям
К посту как раз прикрепил демонстрацию того, как всё это в итоге выглядит со стороны преподавателя 👆
Ну и заодно хвалюсь своими показателями за неделю, о гордыня-гордыня😁
Я взял на себя разработку бэкенд-части сервиса, но работали мы в команде вместе с Артемием (@MifmanRu) и Вадимом (@VadimKokorev)
Вадим, как фронтендер проекта, сделал удобный и наглядный интерфейс - как раз на видео можете его оценить
Артемий взял на себя руководство разработкой и взаимодействие с INNOPROG по административной и бизнес-части проекта
У Артемия, кстати, тоже есть свой канал - https://t.me/codeshadowcources, можете заглянуть 👀
Мне вообще нравится такой тип задач, когда с нуля строишь систему с достаточно большой внутренней логикой - экономикой, аналитикой, автоматическими расчётами и многим другим
Проект получился интересный, запустили его недавно, сейчас активно тестим и ждём фидбэк от наших пользователей - преподавателей👨🏫
#project #backend #python #fastapi #database