Skip to content

Repository files navigation

Shelpy — Агрегатор приютов для животных

Shelpy помогает бездомным животным найти любящий дом. Мы объединяем информацию о питомцах из приютов по всей России: карта, каталог, фильтры, чат с приютами, пожертвования.

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

npm install
npm start

Сервер: http://localhost:3000

🔑 Демо-доступ

Пароль везде: 123456

Email Роль Приют
admin@laskovy.ru Приют Приют «Ласковый дом» (Москва)
admin@verny.ru Приют Центр «Верный друг» (СПб)
admin@kotopes.ru Приют Фонд «КотоПёс» (Казань)
user@demo.ru Пользователь Демо-пользователь

📦 Стек

Слой Технология
Backend Node.js + Express 4.21
Хранение JSON-файлы (data/) — легко мигрировать на SQLite/PostgreSQL
Безопасность bcryptjs (хеширование паролей), Helmet, rate-limit, валидация
Фронтенд Vanilla JS SPA, Tailwind CSS (CDN), Leaflet (карты)
Загрузка Multer (изображения питомцев)

📁 Архитектура

Shelpy/
├── server.js              # Точка входа — Express-сервер
├── .env / .env.example    # Переменные окружения (PORT, NODE_ENV)
├── data/                  # JSON-хранилище (персистентные данные)
├── src/
│   ├── config/db.js       # Слой доступа к данным (JSON-read/write API)
│   ├── middleware/
│   │   ├── auth.js        # Аутентификация (shelter/user/chat)
│   │   ├── rateLimiter.js # Rate-limiting для логина
│   │   └── upload.js      # Multer — загрузка фото
│   ├── routes/
│   │   ├── auth.js        # /api/auth/* — логин, регистрация, профиль
│   │   ├── shelters.js    # /api/shelters/* — список и детали приютов
│   │   ├── pets.js        # /api/pets/* — CRUD питомцев + upload
│   │   ├── favorites.js   # /api/users/favorites/* — избранное
│   │   ├── chat.js        # /api/chats/* — чат (отправка, удаление, правка)
│   │   └── donate.js      # /api/donate — пожертвования (заглушка)
│   ├── validators/index.js # Валидация email, телефона, паролей
│   └── seed.js            # Заполнение тестовыми данными (26 приютов, 21 питомец)
├── public/
│   └── index.html         # SPA-фронтенд (Vanilla JS, Tailwind, Leaflet)
├── Images/                # Статические изображения (лого, иконки, фото)
├── Fonts/                 # Шрифты (Akt, Russo One, Playpen Sans)
├── Sounds/                # Звуки животных (для peeking animals)
└── uploads/               # Загруженные пользователями фото

🔌 API

Аутентификация

  • POST /api/auth/login — вход приюта {email, password}{token, shelter}
  • POST /api/auth/register — регистрация приюта
  • POST /api/auth/user/login — вход пользователя
  • POST /api/auth/user/register — регистрация пользователя
  • GET /api/auth/me — текущий профиль (auth)
  • PUT /api/auth/me — редактирование профиля (auth)

Приюты

  • GET /api/shelters — список всех приютов
  • GET /api/shelters/:id — детали приюта

Питомцы

  • GET /api/pets?type=dog&breed=хаски&maxAge=12&shelterId=1 — с фильтрами
  • GET /api/pets/:id — детали питомца
  • POST /api/pets — добавить питомца (auth)
  • PATCH /api/pets/:id/status — сменить статус (available/adopted)

Чат

  • GET /api/chats — список чатов
  • GET /api/chats/:role/:id — история сообщений
  • POST /api/chats — отправить сообщение
  • PATCH /api/chats/message/:id — редактировать
  • DELETE /api/chats/message/:id — удалить сообщение

Прочее

  • POST /api/users/favorites — добавить в избранное
  • DELETE /api/users/favorites/:type/:id — убрать из избранного
  • POST /api/donate — пожертвование
  • POST /api/upload — загрузка фото (auth)

🎨 Frontend (SPA)

Hash-based роутинг:

  • #catalog — карта + список приютов с поиском по городам
  • #shelter/:id — страница приюта с фильтрами питомцев
  • #pet/:id — карточка питомца
  • #dashboard — личный кабинет (приют или пользователь)
  • #chats — чаты с приютами
  • #about — о проекте

Фичи: тёмная тема, Liquid Glass UI, кастомный курсор-лапка, «выглядывающие» питомцы со звуками, анимации раскрытия, донаты.

🔒 Безопасность

  • Пароли хешируются через bcryptjs (10 раундов)
  • Helmet — защитные HTTP-заголовки
  • Rate-limit на логин (10 попыток / 15 мин)
  • Валидация всех входных данных (email, телефон, длина строк)
  • multer с ограничением размера и типов файлов
  • Переменные окружения через .env

🛠 Разработка

# Запуск
npm start

# Пересоздать тестовые данные (удалить data/*.json и перезапустить)
rm data/*.json && npm start

📄 Лицензия

MIT. Создано с ❤️ для хакатона.

About

A web platform that provides small animal shelters with tools to manage pet profiles and accept donations, helping users find and support local shelters.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages