Социально-образовательная платформа для школ · 2026
MAKTABNET
Социально-образовательная платформа, объединяющая учеников, учителей и администрацию школы в одной цифровой среде.
Инженерный обзор
- 29 Моделей данных
- 100+ Эндпоинтов API
- 20+ Модулей backend
- 3 Платформы
- 627+ Автотестов
Технологии
- NestJS 11
- Node.js
- TypeScript
- Prisma ORM
- PostgreSQL
- JWT + Passport
- EventEmitter2
- Multer
- Jest
- Supertest
- React 19
- Vite
- TypeScript
- Tailwind CSS
- i18next
- Lucide
- React Native
- Expo
- TypeScript
- pnpm monorepo
- Shared TS packages
- Docker
- Docker Compose
- Nginx
- Let's Encrypt
- Hetzner VPS
Задача
В школах Узбекистана общение между учениками, учителями и администрацией разбросано по Telegram-группам, доскам объявлений и устным договорённостям. Идеи, проблемы и события легко теряются, а структурного взаимодействия между школами почти нет.
Maktabnet заменяет это единой, организованной и прозрачной средой.
Решение
Maktabnet объединяет учеников, учителей и администрацию школы в одной социально-образовательной платформе. Пользователи публикуют посты, предлагают идеи и голосуют за них, сообщают о проблемах, ведут проекты и организуют события — а школы могут устанавливать официальное сотрудничество друг с другом.
Слой уведомлений на событиях держит нужных людей в курсе, когда происходят действия вроде лайков, комментариев, заявок на вступление или новых постов.
Моя роль
Я разработал проект в одиночку — от архитектуры до продакшена.
Это включало проектирование backend и базы данных, REST API, аутентификацию и систему прав на основе ролей, веб-приложение на React, мобильное приложение на React Native, конвейер загрузки медиа и валидации изображений, локализацию и тёмную тему, а также деплой.
Я также настроил сервер так, чтобы Maktabnet работал на том же VPS рядом с отдельным, не связанным продакшен-проектом, не мешая ему.
Архитектура
API-first. Backend на NestJS + PostgreSQL + Prisma: 29 моделей данных, 100+ эндпоинтов и 20+ доменных модулей.
Веб и мобайл общаются с backend через общий типизированный пакет @maktab/api-client, поэтому контракт API одинаков на всех платформах.
Уведомления построены на событиях: доменные сервисы генерируют события, центральный слушатель принимает их и передаёт сервису уведомлений, который сохраняет их.
- Пост · Идея · Вступление
- Событие
- Центральный слушатель
- Сервис уведомлений
- Сохранение в БД
Логика уведомлений остаётся отделённой от основной бизнес-логики.
Сложности
Главной задачей была матрица прав, которая остаётся корректной для четырёх ролей — Ученик, Учитель, Админ школы, Админ платформы — и для состояний членства (PENDING / APPROVED / REJECTED) и модерации (WARNED / RESTRICTED / SUSPENDED).
Один тонкий случай: отделить реального автора контента от контекста, в котором он показан, и от контента, опубликованного от имени школы.
Вторая задача — деплой. Добавление Maktabnet на VPS, где уже работал не связанный продакшен-проект, требовало избегать конфликтов в сети, именовании контейнеров, конфигурации обратного прокси и SSL-сертификатах.
Результат
Maktabnet — работающий продукт на трёх платформах: backend, веб и мобайл — развёрнут в продакшене на реальном домене.
Система покрыта 370+ модульными и 257+ e2e-тестами, а архитектура рассчитана на добавление новых функций и ролей без переработки.
Ключевые функции
- Аутентификация и авторизация
- Права на основе ролей
- Посты
- Идеи и голосование
- Проблемы
- Проекты
- События
- Сотрудничество школ
- Модерация
- Уведомления в реальном времени
- Загрузка медиа
- Мультиязычность
- Тёмная тема
- Веб + мобайл
- Админ-функции
Overview
Maktabnet is a social-educational platform that brings students, teachers and school administration into one digital environment.
It is built as a three-platform product — a NestJS API-first backend, a React web application and a React Native mobile application sharing a typed API client. The system combines social interaction, cross-school collaboration, moderation and event-driven notifications in a single ecosystem.