Разработка мобильного приложения для волонтёрства
Волонтёрское приложение решает конкретную операционную задачу: соединить организации с добровольцами, координировать участие в событиях, фиксировать часы и автоматизировать верификацию. Это не просто список мероприятий — здесь важны геолокация, уведомления, отчётность и управление ролями.
Геолокация и поиск мероприятий рядом
Карта с мероприятиями — MapKit (iOS) или Google Maps SDK / Yandex MapKit (Android). Кластеризация маркеров обязательна при большом числе событий: MKAnnotationView с MKClusterAnnotation на iOS, ClusterManager на Android через Maps Utils.
Поиск «рядом» — запрос к серверу с параметрами lat, lng, radius. На сервере — PostGIS ST_DWithin() или Haversine формула. Фильтр по категории, дате, организации.
Уведомления о новых мероприятиях в радиусе — геофенсинг через CLLocationManager.startMonitoring(for: CLCircularRegion) (iOS) или Geofencing API из Google Location Services (Android). Регион срабатывает при входе — приложение получает background wake и может показать уведомление. Лимит на iOS: 20 одновременно мониторируемых регионов. Для большого числа мероприятий — оптимизировать: мониторить регионы вокруг текущей позиции, обновлять набор при значительном перемещении пользователя.
Регистрация и управление участием
Волонтёр регистрируется на мероприятие — создаётся запись volunteer_event. Организатор подтверждает или отклоняет. Push-уведомление об изменении статуса — FCM/APNs.
Список «мои мероприятия» с фильтром по статусу (предстоящие, прошедшие, ожидают подтверждения). Отмена участия — кнопка с confirmation dialog и обработкой business-правила (нельзя отменить за < 2 часов до начала, например).
Check-in на мероприятии — несколько сценариев:
-
QR-код: организатор показывает QR, волонтёр сканирует через
AVCaptureSession+CIQRCodeFeature/AVMetadataMachineReadableCodeObject. Декодированный токен отправляем на сервер для валидации. -
Геолокация:
CLLocationManager.requestLocation()возвращает текущие координаты, сервер проверяет дистанцию до точки мероприятия. - Ручная отметка организатором: список присутствующих с checkboxами.
Учёт волонтёрских часов
После завершения мероприятия — автоматическое начисление часов или запрос на подтверждение организатором. История часов в профиле: по месяцам, по категориям, суммарно за год.
Сертификаты участника — генерация PDF на сервере через WeasyPrint или Puppeteer, скачивание в приложении через URLSession.downloadTask. На iOS открываем через UIActivityViewController, который предлагает сохранить в «Файлы», распечатать или поделиться.
Роли и onboarding
Две основные роли: волонтёр и организатор. Организатор создаёт мероприятия, управляет списком участников, верифицирует часы. Волонтёр — регистрируется, отмечается, видит историю.
Верификация волонтёра (для организаций, где важна проверка личности) — загрузка документа + ручная проверка администратором. Статус верификации в профиле.
Onboarding — выбор интересующих категорий волонтёрства (экология, помощь пожилым, животные, культура) сразу после регистрации. Эти теги используются для персонализации ленты мероприятий и настройки push-уведомлений.
Стек
iOS: SwiftUI + MapKit + CoreLocation + AVFoundation (QR), MVVM + Combine. Android: Jetpack Compose + Google Maps SDK + Location Services + CameraX (QR через ML Kit BarcodeScanning). React Native / Flutter — если нужна одна кодовая база с нативной картой.
Сроки
Лента мероприятий + карта + регистрация + профиль — 4–6 недель. Check-in (QR + геолокация) + учёт часов + сертификаты + роли организатора — 2–3 месяца. Стоимость рассчитывается после анализа требований.







