Реализация прогресс-бара заполнения профиля для вовлечения в мобильном приложении
LinkedIn показывает «Ваш профиль заполнен на 60%» — и пользователь добавляет фото. Не потому что хочет 100%, а потому что незакрытый прогресс воспринимается как незавершённая задача. Эффект Зейгарник в интерфейсе.
Архитектура компонента
Прогресс-бар заполнения профиля — это не просто UIProgressView с числом. Это система из нескольких частей: вычисление прогресса, отображение, список незаполненных полей, навигация к нужному экрану.
Вычисление прогресса. Каждое поле профиля имеет вес. Аватар — 20%, имя и фамилия — 10%, телефон — 15%, bio — 15%, и так далее. Сумма весов = 100%. Альтернативно — равные веса: filledFields / totalFields. Логику вычисления выносим в отдельный ProfileCompletionCalculator / UseCase, покрытый unit-тестами. Пересчёт — при каждом изменении профиля, результат кешируем в ViewModel.
Анимация. При открытии экрана показываем прогресс с анимацией от 0 до текущего значения. На iOS — UIProgressView.setProgress(_:animated:) или кастомный CABasicAnimation на strokeEnd для круглого прогресс-бара через CAShapeLayer. В SwiftUI — withAnimation(.easeOut(duration: 0.6)) вокруг изменения @State var progress. В Compose — animateFloatAsState с tween(600).
Список шагов к заполнению
Рядом с прогресс-баром — карточки или строки с незаполненными полями: «Добавьте фото», «Укажите город», «Напишите о себе». Каждая — кликабельна и ведёт на конкретный экран или прямо к нужному полю. Deep link внутри приложения: NavigationLink / NavController.navigate() с передачей focusField параметра, чтобы поле сразу получало фокус.
Сортировка шагов: сначала те, что дают максимальный прирост (по весу), или те, что проще всего заполнить. A/B-тест покажет, что работает лучше для конкретной аудитории.
Персистентность и синхронизация
Прогресс хранится на сервере (профиль — серверная сущность), локально кешируем для мгновенного отображения без ожидания ответа API. UserDefaults / DataStore для кеша, инвалидируем при получении обновлённого профиля. Если пользователь заполнил профиль на вебе — мобилка должна показать актуальный прогресс при следующем открытии.
Push-уведомление через 24–48 часов после регистрации, если профиль заполнен менее чем на 50% — стандартная механика вовлечения. Реализуется на стороне backend, мобилка только принимает и отображает.
Срок: 1 день — базовый прогресс-бар с вычислением и анимацией. Список шагов с навигацией и серверной синхронизацией включён в стандартную оценку задачи.







