Перейти к содержанию

Implementation Plan

Текущий статус проекта (обновлено: 2026-02-09)

Выполнено

  • Git: github.com/aleshkovskiy/app-factory (main/staging/develop)
  • CI/CD: 5 GitHub Actions workflows (backend-ci, frontend-ci, deploy-staging, deploy-production, build-flavors)
  • Pre-commit hooks: ruff, isort, dart format, conventional commits, secrets detection
  • Jira AF: 9 эпиков (AF-1..AF-9), 89 задач (AF-10..AF-98)
  • Backend: venv, Django 5.2, DRF 3.16, pytest, factory-boy
  • Flutter SDK 3.38.9 на сервере
  • Документация: конвертирована из .docx → markdown/YAML
  • Epic A (AF-1): Platform Foundation — 100% завершён (30 задач, 320 backend + 170 Flutter = 490 тестов, ~41 коммит на develop)

Количество задач по эпикам

Эпик Название Задач Примечание
A (AF-1) Platform Foundation 30 100% ✅ — auth, content, progress, quiz, bootstrap, admin, offline, sync, onboarding, settings, infra, docker, celery
B (AF-2) Content & Media 9 +1 (seed data)
C (AF-3) Media Delivery 8 +1 (video spike)
D (AF-4) Daily Flow & Progress 5 -1 (D-6 moved to A)
E (AF-5) Engagement & Gamification 8
F (AF-6) Analytics & Observability 8
G (AF-7) Monetization 9 +1 (payment spike)
H (AF-8) White-Label & CI/CD 10
I (AF-9) Hardening & Scale 10 +1 (rollback)

Implementation Plan (эпики → сторисы → порядок → оценка → тестирование) Принятые допущения для оценки Команда: 2 Flutter, 1 Backend, 1 DevOps/CI, 1 QA (или QA на части времени). Оценка: в “неделях разработки” (dev-weeks) и условных story points (SP). MVP цель: выпустить 1–2 бренда в сторы, затем включить white-label масштабирование и автопубликацию. Шкала сложности S (1–2 SP): тривиально M (3–5 SP): средне L (8 SP): сложно XL (13 SP): очень сложно / высокий риск Общая последовательность (критический путь) Foundation: AppVariant + Bootstrap + Daily flow + Offline DB + базовая админка Media layer + Notifications + Analytics + Crash Quiz module (swipe) + связка с контентом + алгоритм повторений Monetization (IAP + entitlement server) White-label сборки (flavors) + build orchestration + CI/CD auto publish Hardening: миграции, observability, нагрузка, security, edge cases Масштабирование до N брендов: rebuild all, метаданные стора, скриншоты/иконки pipeline Epic A — Platform Foundation (Backend + App Core)

Цель: минимально жизнеспособная платформа: конфиг бренда, выдача контента, прогресс, базовый оффлайн.

A1. Backend: проект + базовые модели

Story: Инициализация Django проекта, DRF, auth (anonymous JWT), роли (минимум admin) Оценка: L (8 SP), 1–1.5 dev-weeks Done: /auth/anonymous, /auth/refresh, JWT middleware, user/device models Тесты: unit для auth, integration happy path Story: Модели: AppVariant, Course, ContentItem, MediaAsset, Translation, Progress Оценка: L (8 SP), 1 dev-week Done: миграции, admin CRUD (черновой), fixtures Тесты: model validation, constraints (day_index unique per course), i18n fallback Story: API: /bootstrap, /content/manifest, /content/items/{id}, /progress endpoints Оценка: L (8 SP), 1–1.5 dev-weeks Done: OpenAPI соответствует, ETag/версии, ошибки в едином формате Тесты: API contract tests (status codes, schemas), pagination (если будет)

A2. Flutter: App shell + конфиг + daily flow

Story: Flutter app scaffold, routing, DI, state management Оценка: M (5 SP), 0.5 dev-week Done: навигация Today → Content → Result → Settings Тесты: widget tests на базовые экраны Story: Bootstrap client (auth + bootstrap), хранение токена, retry/backoff Оценка: L (8 SP), 1 dev-week Done: offline fallback на локальный cache bootstrap Тесты: integration test с mock server, token refresh Story: Daily logic (1/day), states locked/available/completed, streak UI Оценка: L (8 SP), 1 dev-week Done: правильные переходы, таймзоны, edge cases “смена даты” Тесты: unit на “календарную” логику; golden tests на UI

A3. Offline-first storage (client)

Story: Локальная БД (Drift/SQLite): content_items, progress, translations, manifest Оценка: XL (13 SP), 2 dev-weeks Done: миграции, репозитории, sync state Тесты: unit tests на DAO, migration tests Story: Sync engine: manifest pull, diff by content_hash, download queue (без heavy media) Оценка: XL (13 SP), 2 dev-weeks Done: стабильный offline pack на 7 дней (текст+картинки) Тесты: integration тесты на “потеря сети”, “частичная загрузка”, “повторный запуск” Критерии приемки Epic A Новый пользователь: install → anon auth → bootstrap → day item показывается → complete_day → streak обновлён. Оффлайн: после первичной загрузки приложение открывается без сети и показывает сегодняшнее/последнее доступное. Админ: можно создать AppVariant + Course + ContentItem и увидеть их в клиенте. Epic B — Content Authoring (кастомная Django-админка)

Цель: удобное создание контента и брендов без участия разработчиков.

B1. Admin UX: Brands/AppVariants

Story: Раздел “AppVariants”: поля бренда (названия, цвета, supported locales, курс, оффлайн политика) Оценка: L (8 SP), 1 dev-week Тесты: permissions, validation, “preview config JSON” Story: Asset upload: icon/splash + media storage (S3-compatible) Оценка: L (8 SP), 1 dev-week Тесты: upload pipeline, virus scan optional, checksum

B2. Admin UX: Content + Translations

Story: Rich text editor, preview mobile rendering (server-side preview или JSON preview) Оценка: XL (13 SP), 2 dev-weeks Тесты: rendering snapshot tests, XSS sanitization Story: Bulk ops: массовая публикация, перемещение day_index с безопасными правилами Оценка: XL (13 SP), 2 dev-weeks Тесты: migration rules tests, rollback scenario Критерии приемки Epic B Редактор создаёт 30 дней контента и публикует без dev. Есть понятный статус draft/scheduled/published. Есть перевод RU/EN для минимум 10 items. Epic C — Media Layer (Audio/Video/Images) + Cache

Цель: полноценные медиа в уроках, корректный оффлайн, прогресс воспроизведения.

C1. Client media playback

Story: Image pipeline (cached_network_image + prefetch) Оценка: M (5 SP), 0.5 dev-week Тесты: widget tests, cache hit/miss Story: Audio (just_audio), background audio optional Оценка: L (8 SP), 1 dev-week Тесты: unit/service tests, offline file playback Story: Video (video_player/chewie), adaptive streaming vs mp4 (решение) Оценка: XL (13 SP), 2 dev-weeks Тесты: playback reliability tests, low-network tests

C2. Offline media downloader

Story: Download queue, Wi-Fi only policy, progress UI, integrity checks (sha256) Оценка: XL (13 SP), 2 dev-weeks Тесты: checksum validation, partial downloads resume Критерии приемки Epic C Контент с картинкой/аудио/видео проигрывается. По политике оффлайна: картинки обязательны, аудио Wi-Fi only prefetch, видео on-demand. После загрузки аудио/видео доступны без сети. Epic D — Notifications + Scheduling + Anti-cheat time

Цель: удержание: ежедневные напоминания, корректные таймзоны, защита от смены времени.

D1. Push + Local notifications

Story: FCM registration (/devices/register), token updates, topic optional per brand Оценка: M (5 SP), 0.5–1 dev-week Тесты: smoke test on devices Story: Local scheduled daily reminders, user preferences (/devices/preferences) Оценка: L (8 SP), 1 dev-week Тесты: scheduling tests (мок), timezone changes

D2. Time integrity

Story: server_time_offset вычисление, мягкие ограничения при больших сдвигах Оценка: L (8 SP), 1 dev-week Тесты: unit tests с набором сценариев Критерии приемки Epic D Пользователь получает daily reminder по локальному времени. Смена времени устройства не даёт “фарма” дней при наличии сети. Epic E — Analytics + Observability

Цель: измеримость продукта и стабильность.

E1. Client analytics events + offline queue

Story: Event schema + enqueue локально + bulk отправка /analytics/events:bulk Оценка: L (8 SP), 1–1.5 dev-weeks Тесты: dedupe client_event_id, retry, batching limits

E2. Crash/perf monitoring

Story: Crashlytics/Sentry, API error logging correlation (request_id) Оценка: M (5 SP), 0.5 dev-week Тесты: simulated crash, verify reports

E3. Backend logging

Story: structured logs + request_id + rate limiting Оценка: M (5 SP), 0.5–1 dev-week Тесты: load tests basic, abuse tests Критерии приемки Epic E Воронка Day1→Complete и Quiz funnel видны в аналитике. Crash-free sessions метрика доступна. Сервер корректно принимает offline-bulk события. Epic F — Quiz Module (Swipe repetition)

Цель: повторение и игры: server-driven quiz sessions + client swipe UX.

F1. Backend quiz bank + scheduling

Story: Модели QuizQuestion, QuizRule, QuizSession, QuizAnswer Оценка: L (8 SP), 1 dev-week Тесты: model integrity, locale fallback Story: Endpoint /quiz/session/next (selection algorithm) + session state Оценка: XL (13 SP), 2 dev-weeks Тесты: deterministic selection, cooldown, mistakes priority

F2. Client swipe UX

Story: Swipe cards UX + haptics + instant feedback + scoring Оценка: L (8 SP), 1 dev-week Тесты: widget tests (swipe gestures), golden snapshots Story: Offline quiz cache: хранить вопросы, ответы в очереди Оценка: L (8 SP), 1–1.5 dev-weeks Тесты: offline run, later sync Критерии приемки Epic F После N дней появляется сессия квиза. Ответы записываются, начисляются баллы, показывается объяснение. Алгоритм избегает повторов и усиливает слабые места. Epic G — Monetization (Subscriptions/IAP + Entitlements)

Цель: платный слой: paywall, purchases, restore, server validation, feature gating.

G1. Client IAP + paywall

Story: Product catalog + purchase flow + restore purchases Оценка: XL (13 SP), 2 dev-weeks Тесты: sandbox Apple/Google, restore, error handling Story: Entitlement gating: archive access, extended quizzes, streak freeze Оценка: L (8 SP), 1 dev-week Тесты: feature flags tests

G2. Backend purchase validation

Story: /purchases/validate интеграция с Apple/Google (или через RevenueCat, если выберете) Оценка: XL (13 SP), 2–3 dev-weeks (высокий риск) Тесты: mock validation, replay protection Story: /entitlements endpoint, подписка state transitions, webhooks (optional) Оценка: L (8 SP), 1 dev-week Тесты: state machine tests Критерии приемки Epic G Покупка в sandbox активирует premium и открывает функции. Restore работает. Сервер корректно подтверждает и хранит entitlement. Epic H — White-label Builds + Build Orchestration + Auto Publish

Цель: админка может запускать сборки, “rebuild all”, CI публикует автоматически.

H1. Flutter flavors & brand assets automation

Story: Configure flavors for Android/iOS, per-brand app ids, icons, display name Оценка: XL (13 SP), 2 dev-weeks Тесты: build each flavor, runtime config loads correct Story: Brand config injection: dart-defines + packaged JSON + runtime fetch fallback Оценка: L (8 SP), 1 dev-week Тесты: config mismatch, fallback logic

H2. CI/CD pipeline

Story: GitHub Actions matrix builds across app variants, caching, artifacts Оценка: XL (13 SP), 2 dev-weeks Тесты: dry-run builds, parallelism limits Story: Fastlane automation: upload_to_play_store + pilot/deliver Оценка: XL (13 SP), 2 dev-weeks Тесты: internal track/TestFlight, versioning, signing

H3. Django build orchestration

Story: BuildJob, BuildBatch models, /admin/builds endpoints, UI status page Оценка: XL (13 SP), 2 dev-weeks Тесты: webhook signature validation, state machine tests Story: Webhook receiver from CI /webhooks/ci/build_status + logs/links Оценка: L (8 SP), 1 dev-week Тесты: idempotent webhook, retries Критерии приемки Epic H Нажать Build в админке → CI собирает → status обновляется → билд уходит в Internal/TestFlight автоматически. Rebuild all → создаёт batch и запускает сборку всех активных брендов. Нет ручной загрузки файлов в сторах. Epic I — Hardening, Security, Performance, QA

Цель: довести до production-ready.

I1. Security & privacy

Story: GDPR endpoints (delete user data), consent flags Оценка: L (8 SP), 1 dev-week Story: Rate limiting, abuse protection, device binding Оценка: M (5 SP), 0.5–1 dev-week Story: Secret management, webhook signatures, audit logs Оценка: L (8 SP), 1 dev-week

I2. Performance & load

Story: DB indexes, caching manifests, CDN tuning Оценка: L (8 SP), 1 dev-week Story: Load test (k6/locust) critical endpoints Оценка: M (5 SP), 0.5 dev-week

I3. Release QA playbooks

Story: test plan docs, regression suite, device matrix Оценка: M (5 SP), 0.5 dev-week Критерии приемки Epic I Crash-free sessions ≥ 99.5% на тестовой когорте. P95 /bootstrap latency < 300ms (с кэшированием) при нормальной нагрузке. Webhook и purchases validation защищены. Приоритизация (MVP vs V1 vs V2) MVP (8–12 недель при указанной команде) Epic A (частично) + B (минимум) + E (минимум) + C (картинки+аудио) + D (локальные уведомления) + F (простая викторина без сложного планировщика) Без полноценной автопубликации “100 брендов” (можно 1–2 бренда руками, но с flavors) V1 (12–18 недель) Добавить G (подписки) + полноценный F (алгоритм повторений) + H (build orchestration + auto publish) V2 (после V1) advanced A/B, store metadata automation, screenshot automation, social features, server-driven UI Оценка по эпикам (примерная) A Foundation: 7–10 dev-weeks B Admin content: 4–6 dev-weeks C Media: 4–6 dev-weeks D Notifications/time: 2–3 dev-weeks E Analytics/obs: 2–3 dev-weeks F Quizzes: 4–6 dev-weeks G Monetization: 5–8 dev-weeks H Build+AutoPublish: 7–10 dev-weeks I Hardening: 3–5 dev-weeks Параллелизация снижает календарное время, но критический путь: A → (C/D/E) → F → G → H. Критерии тестирования (чек-лист)

12.1. Backend (автотесты)

Unit: selection quiz algorithm deterministic day unlock logic entitlement state machine Integration: /bootstrap contract (schema + required fields) /content/manifest diff correctness /progress/complete_day idempotency /analytics bulk dedupe Security: auth required endpoints rate limit triggers webhook signature verification

12.2. Flutter (автотесты)

Unit: daily logic given server offset sync diff application offline queue flush Widget: Today state transitions Paywall gating Swipe quiz gestures Integration (device/emulator): onboarding → day completion → offline reopen media playback offline purchase sandbox basic (минимум smoke)

12.3. E2E ручные сценарии (QA)

“Новая установка без сети после первичной загрузки” “Смена языка и корректный fallback” “Пропуск дня и streak reset/freeze” “Quiz появляется по расписанию” “Rebuild all → один бренд упал → остальные продолжают → отчёт в админке” “Auto publish internal track/TestFlight” “Rollback через remote config kill-switch” Deliverables по итогам каждой фазы Схемы БД + миграции OpenAPI актуальная (генерация swagger) Документация админки (роли, процессы) CI/CD docs (секреты, подпись, fastlane) QA test plan + regression checklist