Skip to content

Shfdis/Selectio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

109 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Selectio

Selectio

Социальная сеть для любителей книг с рекомендательной системой
Social network for bookworms with a recommendation system

Кроссплатформенное мобильное приложение · микросервисный backend · персональные рекомендации

Презентация · Дизайн в Figma

React Native Redux .NET PostgreSQL Docker


О проекте

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

Backend

Архитектура backend Selectio

Сервис Роль
Gateway (YARP) единая точка входа, маршрутизация, CORS, JWT для защищённых маршрутов
Auth регистрация, вход, аутентификация; пароли в хешированном виде
CRUD книги, библиотеки, профили, сообщества, посты, комментарии, лайки, рекомендации, избранное, модерация
Image-service загрузка и выдача медиа; файлы в MinIO (S3-совместимое хранилище)
Recsys расчёт рекомендаций и обновление векторов pgvector для персонализации

Frontend

Архитектура frontend Selectio

Мобильное приложение отвечает за навигацию, отображение данных, действия пользователя, состояния загрузки и ошибки сети.

  • 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.


Быстрый старт

Backend

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

Frontend

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

Что дальше

  1. оптимизация размера и скорости приложения
  2. более точные модели рекомендаций
  3. веб-версия
  4. расширение функционала (например, чтение книг внутри приложения)

Ссылки


Читайте с удовольствием вместе с Selectio

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages