Социальная сеть для любителей книг с рекомендательной системой
Social network for bookworms with a recommendation system
Кроссплатформенное мобильное приложение · микросервисный backend · персональные рекомендации
Selectio — мобильная платформа, где можно находить книги, вести личную библиотеку, общаться в тематических сообществах и получать персональные рекомендации книг и постов.
Идея простая: соединить привычный «книжный трекер» с социальной лентой и умным подбором контента — чтобы открывать не только новые книги, но и людей, которым они тоже важны.
| Платформы | iOS и Android (React Native + Expo) |
| Сервер | микросервисы на ASP.NET Core, PostgreSQL, MinIO, Docker |
| Рекомендации | ALS → векторные эмбеддинги + поиск ближайших соседей (pgvector) |
| Год | 2025–2026 |
- регистрация и вход по email, подтверждение почты
- просмотр и редактирование профиля, загрузка аватара
- каталог, поиск и просмотр книг
- отзывы и оценки
- личная библиотека со статусами «Хочу прочитать», «В процессе», «Прочитанное»
- сообщества: создание, вступление, ленты
- посты, комментарии, лайки и избранное
- публикация от имени своего сообщества или предложение поста в чужое (с модерацией)
- персональная лента книг и постов
- подбор на основе истории взаимодействий пользователя
┌─────────────────────┐
│ Mobile client │
│ React Native/Expo │
└──────────┬──────────┘
│ HTTPS
▼
┌─────────────────────┐
│ GATEWAY │ маршрутизация, CORS, проверка JWT
└──┬──────┬───────┬───┘
│ │ │
▼ ▼ ▼
AUTH CRUD IMAGE-SERVICE
│ │ │
│ │ ▼
│ │ MinIO (S3)
│ ▼
│ PostgreSQL + pgvector
│ ▲
│ │ embeddings
│ RECSYS (ALS)
▼
Auth DB
| Сервис | Роль |
|---|---|
| Gateway (YARP) | единая точка входа, маршрутизация, CORS, JWT для защищённых маршрутов |
| Auth | регистрация, вход, аутентификация; пароли в хешированном виде |
| CRUD | книги, библиотеки, профили, сообщества, посты, комментарии, лайки, рекомендации, избранное, модерация |
| Image-service | загрузка и выдача медиа; файлы в MinIO (S3-совместимое хранилище) |
| Recsys | расчёт рекомендаций и обновление векторов pgvector для персонализации |
Мобильное приложение отвечает за навигацию, отображение данных, действия пользователя, состояния загрузки и ошибки сети.
- UI: React Native + Expo
- Состояние и API: Redux Toolkit + RTK Query
- Секреты:
expo-secure-store(JWT) - Медиа:
expo-image-picker - Навигация: React Navigation
Дизайн и функциональный прототип собраны в Figma, затем перенесены в код.
Frontend
- JavaScript, React, React Native, Expo
- Redux Toolkit, RTK Query, React Redux
- React Navigation
- Expo Secure Store, Expo Image Picker, Expo Font
- шрифты: Playfair Display, Crimson Text / Mak (в макете)
Backend
- ASP.NET Core (.NET 9), EF Core
- PostgreSQL + pgvector (HNSW, cosine distance)
- MinIO
- Docker / Docker Compose
- Python-пайплайн рекомендаций (ALS)
Для построения эмбеддингов сравнивались ALS, усечённый SVD и нейросетевые подходы (NCF, LightGCN). По совокупности критериев (качество, ресурсы на обучение, интерпретируемость, согласование с метрикой близости) для наших требований наиболее разумным оказался ALS.
Готовые векторы загружаются в CRUD-сервис и используются при выдаче персонализированных книг и постов через приближённый поиск соседей в PostgreSQL.
Selectio/
├── frontend/ # мобильный клиент (Expo / React Native)
│ └── app/
├── backend/ # микросервисы и инфраструктура
│ ├── gateway/
│ ├── auth/
│ ├── crud/
│ ├── image-service/
│ ├── recsys/
│ └── docker-compose.yml
└── README.md
Подробнее про API и локальный запуск сервера — в backend/README.md.
План экранов и интеграции клиента — в frontend/screens.md.
cd backend
cp .env.template .env # заполните JWT_SECRET_KEY и GATEWAY_INTERNAL_TOKEN
docker compose up --build| Сервис | URL |
|---|---|
| API Gateway | http://localhost:8000 |
| OpenAPI (Development) | http://localhost:8000/docs/all/openapi.json |
| Auth (напрямую) | http://localhost:8080 |
| CRUD (напрямую) | http://localhost:8090 |
cd frontend/app
npm install
npx expo startПо умолчанию клиент ходит на прод-шлюз (https://selectio-book.ru). Для локальной разработки измените baseUrl в frontend/app/config/api.js на http://localhost:8000 (или IP вашей машины для устройства/эмулятора).
| Участник | Роль |
|---|---|
| Анна Рябочкина | frontend-разработчик |
| Артём Ермошкин | backend-разработчик |
- рабочее кроссплатформенное мобильное приложение социальной сети для книголюбов
- микросервисный backend со всеми ключевыми сценариями
- рекомендательный контур на базе ALS и векторного поиска
- цельный UX/UI и продуманная интеграция клиента с API
- оптимизация размера и скорости приложения
- более точные модели рекомендаций
- веб-версия
- расширение функционала (например, чтение книг внутри приложения)
Читайте с удовольствием вместе с Selectio












