02 — Solo-MVP Requirements (переработка под 1 разработчика)
Дата: 2026-06-29 Основание: VeriChain 04_requirements_analyst.md (команда 5 чел., 12 нед.) переработан под соло-основателя с AI-инструментами (1 чел., 6 нед. MVP) Предыдущее решение: VeriChain #04 Requirements Analyst — GO, MVP: 12 нед., 5 чел., €192K
0. Контекст переработки
Исходный план VeriChain предполагал команду из 5 человек. Для соло-основателя: - ВСЕ компоненты (iOS, Android, Web, Backend, PDF-сервис) должны помещаться в ОДНУ голову - AI-инструменты (Claude Code, Copilot) сокращают время написания кода на ~50-70%, НО не сокращают архитектурные решения и интеграционное тестирование - Выбор стека критичен: каждый лишний язык/фреймворк = +неделя контекстного переключения
Главный принцип: 1 язык (TypeScript), 1 managed-провайдер (Supabase), 1 мобильный фреймворк (React Native), 1 платформа для старта (iOS).
1. MoSCoW Prioritisation v2 (SOLO)
MUST-HAVE — MVP (недели 1-6)
| ID | Требование | Почему | Неделя |
|---|---|---|---|
| M1 | Регистрация компании (Company Admin) через email + magic link | Без субъекта нет системы. Supabase Auth из коробки. | 1 |
| M2 | Регистрация сотрудника (Employee) через email + magic link | Вторая сторона процесса. Тот же Supabase Auth. | 3 |
| M3 | Создание визуальной подписи — рисование пальцем, однократно | Ключевое УТП: рукописный стиль подписи | 3 |
| M4 | Хранение подписи локально в Secure Enclave (iOS) | Datenschutz-архитектура: подпись не на сервере | 3 |
| M5 | Face ID / Touch ID / PIN подтверждение для каждого подписания | Безопасность: свежая биометрия на каждую операцию | 4 |
| M6 | Загрузка PDF через веб-интерфейс (до 10 MB, до 30 стр.) | Входная точка бизнес-стороны | 1 |
| M7 | Отметка места подписи на PDF (drag-and-drop, визуально) | Без этого подпись некуда встраивать | 2 |
| M8 | Отправка запроса на подпись сотруднику (email + push) | Ключевой поток «компания → сотрудник» | 2 |
| M9 | Просмотр PDF сотрудником в мобильном приложении | Обязательное требование: прочитать перед подписанием | 4 |
| M10 | Подтверждение подписания: Face ID → наложение подписи → timestamp | Core-механика продукта | 4 |
| M11 | Генерация подписанного PDF с визуальной подписью + метаданными | Результат бизнес-цикла | 5 |
| M12 | Аудит-след на каждый документ (timestamp, device_id, biometric_method, doc_hash) | Доказательная база для compliance | 5 |
| M13 | Скачивание подписанного PDF с аудит-следом (Company Admin) | Завершение цикла | 5 |
| M14 | Базовый веб-дашборд: список документов + статусы | HR должен видеть кто подписал | 2 |
| M15 | Локализация DE/EN (немецкий — primary) | Рынок DACH, немецкий Mittelstand | 6 |
| M16 | Удаление аккаунта (GDPR Art. 17) — все серверные данные | Обязательное требование для немецкого рынка | 6 |
Итого: 16 требований, 6 недель.
SHOULD-HAVE — v1.1 (недели 7-10, +4 недели)
| ID | Требование |
|---|---|
| S1 | Android-приложение (React Native — тот же код, другие настройки) |
| S2 | Массовая отправка: 1 документ → N получателей (ручной ввод + CSV) |
| S3 | Срок действия запроса на подпись + авто-напоминания (email) |
| S4 | Webhook-уведомления для интеграции с HR-системами |
| S5 | Расширенный аудит-лог: все действия, экспорт в ZIP |
| S6 | Отказ от подписания с причиной (employee-side) |
| S7 | Верификация подписанного PDF через веб-загрузку |
| S8 | Ролевая модель: Owner / Admin / Sender |
COULD-HAVE — v1.2 (недели 11-14, +4 недели)
| ID | Требование |
|---|---|
| C1 | PAdES baseline (стандарт электронной подписи в PDF) |
| C2 | TSA-отметка времени (RFC 3161, через DFN/Deutsche Telekom) |
| C3 | Офлайн-режим: кеширование PDF на устройстве |
| C4 | Шаблоны документов |
| C5 | Брендирование: логотип компании на форме подписания |
| C6 | Интеграция с Personio API |
| C7 | App Clip (iOS) — подписание без установки приложения |
WON'T-HAVE — v1 (явно исключено)
| ID | Требование | Причина |
|---|---|---|
| W1 | QES / eIDAS Qualified Signature | Требует сертифицированного TSP, €50K+ на интеграцию |
| W2 | Нативные приложения (Swift/Kotlin) | Удваивает трудозатраты, React Native покрывает 95% потребностей |
| W3 | On-premises деплой | Enterprise-требование, не для MVP |
| W4 | SSO / OIDC / SAML | Сложная интеграция, Mittelstand не требует |
| W5 | SAP / Workday интеграция | Enterprise-сегмент, не MVP |
| W6 | Блокчейн-нотаризация | Переусложнение, не требуется регуляторами |
| W7 | Видеоидентификация / KYC | Отдельный рынок |
| W8 | Множественные подписи на одном документе (sequential) | Усложняет PDF-пайплайн в 3x |
| W9 | White-label (кастомизация под клиента) | Не для MVP, Mittelstand не требует |
| W10 | Интеграция с EUDI Wallet (eIDAS 2.0) | Стандарт ещё не финализирован (2027+) |
2. User Stories (22 штуки)
P0 — Critical Path (MVP без этого не работает)
US-01: Регистрация компании
Как HR-менеджер, я хочу зарегистрировать компанию через email, чтобы начать использовать Zustimm для отправки документов. - AC: Ввёл email → получил magic link → перешёл → компания создана. Название компании обязательно. Один email = одна компания. - P0
US-02: Загрузка документа
Как HR-менеджер, я хочу загрузить PDF-документ через веб-интерфейс, чтобы отправить его сотруднику на подпись. - AC: Drag-and-drop или выбор файла. Валидация: PDF, до 10 MB, до 30 страниц, не зашифрован. После загрузки — переход к отметке места подписи. - P0
US-03: Отметка места подписи
Как HR-менеджер, я хочу отметить место подписи на загруженном PDF, чтобы подпись сотрудника корректно разместилась. - AC: Предпросмотр PDF постранично. Drag-and-drop визуального маркера. Хотя бы одно место подписи размещено. Сохранение координат (page, x, y, w, h). - P0
US-04: Отправка запроса на подпись
Как HR-менеджер, я хочу отправить запрос на подпись сотруднику, указав его email, чтобы инициировать процесс подтверждения. - AC: Ввёл email(ы) получателя(ей) → нажал «Отправить». Если сотрудник не зарегистрирован — ему отправляется приглашение. Статус документа → «Ожидает подписания». - P0
US-05: Регистрация сотрудника
Как сотрудник, я хочу зарегистрироваться в мобильном приложении через email, чтобы получать документы на подпись. - AC: Ввёл email → получил magic link → перешёл → создал визуальную подпись (нарисовал пальцем) → настроил Face ID / Touch ID / PIN. Подпись сохранена локально. - P0
US-06: Создание визуальной подписи
Как сотрудник, я хочу нарисовать свою подпись пальцем на экране, чтобы она выглядела как моя рукописная подпись. - AC: Холст для рисования. Кнопки «Очистить» и «Сохранить». Подпись сохраняется в Secure Enclave / expo-secure-store. Не передаётся на сервер до момента подписания. - P0
US-07: Получение уведомления о документе
Как сотрудник, я хочу получать push-уведомления и email о новых документах на подпись, чтобы не пропустить их. - AC: Push-уведомление при новом запросе. Email с информацией: название документа, отправитель, срок. Список ожидающих документов в приложении. - P0
US-08: Просмотр документа перед подписанием
Как сотрудник, я хочу просмотреть PDF-документ в приложении перед подписанием, чтобы понимать что я подтверждаю. - AC: Открытие PDF внутри приложения. Постраничная навигация. Zoom. Отображение названия, отправителя, даты отправки. - P0
US-09: Подписание через Face ID / Touch ID
Как сотрудник, я хочу подтвердить ознакомление с документом через Face ID / Touch ID / PIN, чтобы подписание было безопасным и юридически значимым. - AC: Кнопка «Подписать» → системный диалог биометрии → успех → визуальная подпись извлекается из локального хранилища → отправляется на сервер ТОЛЬКО для встраивания → немедленно удаляется с сервера. Отображается подтверждение. - P0
US-10: Получение подписанного PDF
Как HR-менеджер, я хочу скачать подписанный PDF с визуальной подписью и аудит-следом, чтобы хранить его для compliance. - AC: Уведомление (email) о подписании. В дашборде — кнопка «Скачать». PDF содержит: визуальную подпись в отмеченном месте + страницу аудит-следа. Имя файла:
<doc_name>_signed_<date>.pdf. - P0
P1 — Core Experience (MVP без этого хуже, но работает)
US-11: Дашборд статусов
Как HR-менеджер, я хочу видеть дашборд со статусами всех отправленных документов, чтобы отслеживать процесс подписания. - AC: Таблица: название документа, получатель, дата отправки, статус (ожидает/подписан/просрочен). Фильтр по статусу. Сортировка по дате. - P1
US-12: История подписанных документов (сотрудник)
Как сотрудник, я хочу видеть список всех подписанных мной документов в приложении, чтобы отслеживать что было подтверждено. - AC: Список с датами. Просмотр подписанного PDF. Поиск по названию. - P1
US-13: Отказ от подписания
Как сотрудник, я хочу отказаться от подписания документа с указанием причины, если я не согласен с его содержанием. - AC: Кнопка «Отклонить» → поле для причины → подтверждение. Отправитель получает уведомление с причиной. Статус → «Отклонён». - P0 (перенесено в Should-Have для MVP)
US-14: Удаление аккаунта (GDPR)
Как сотрудник, я хочу удалить свой аккаунт и все связанные данные, чтобы реализовать право на забвение (GDPR Art. 17). - AC: Кнопка «Удалить аккаунт» в настройках → подтверждение → немедленное удаление локальных данных (подпись). Серверные данные (email, device_id, audit-trail) удаляются в течение 30 дней. Подписанные PDF, уже переданные компании, НЕ модифицируются. - P0
US-15: Верификация подлинности PDF
Как compliance-офицер, я хочу загрузить подписанный PDF на веб-страницу верификации, чтобы проверить его целостность. - AC: Загрузка PDF → проверка хеша документа + метаданных → результат: VALID/INVALID + отображение аудит-следа. - P1
US-16: Локализация DE
Как немецкий сотрудник, я хочу использовать приложение на немецком языке, чтобы понимать интерфейс. - AC: Все тексты интерфейса на немецком. Дата/время в немецком формате. Fallback на английский. - P0
US-17: Управление отправителями (роли)
Как HR-менеджер (Owner), я хочу добавлять других HR-менеджеров как отправителей, чтобы они тоже могли отправлять документы. - AC: Список пользователей компании. Кнопка «Пригласить». Выбор роли: Sender. Приглашённый получает email. - P1
P2 — Базовые, но не критические
US-18: Срок действия запроса
Как HR-менеджер, я хочу установить срок действия запроса на подпись, чтобы документы не висели бесконечно. - AC: При отправке — поле «Действителен до» (дата). По истечении — статус «Просрочен», уведомление отправителю. - P2
US-19: Повторная отправка напоминания
Как HR-менеджер, я хочу отправить напоминание сотруднику, который не подписал документ, чтобы ускорить процесс. - AC: В дашборде — кнопка «Напомнить» для документов в статусе «Ожидает». Отправляет повторный email. - P2
US-20: Массовая отправка
Как HR-менеджер, я хочу отправить один документ сразу нескольким сотрудникам, чтобы сэкономить время. - AC: При отправке — множественные email (ручной ввод через запятую) или CSV-файл. Каждый получатель получает индивидуальный запрос. - P2
US-21: Экспорт аудит-лога
Как HR-менеджер, я хочу экспортировать полный аудит-лог по документу, чтобы предоставить его аудиторам. - AC: Кнопка «Экспорт аудит-лога» → PDF или JSON со всеми событиями по документу. - P2
US-22: Смена устройства сотрудником
Как сотрудник, я хочу переустановить приложение на новом устройстве, чтобы продолжить подписывать документы. - AC: Установка на новое устройство → вход по email → создание НОВОЙ подписи (старая не переносится). Старые подписи остаются верифицируемыми по device_id. - P2
3. Edge Cases (25 штук)
Аутентификация и биометрия
| # | Edge Case | Severity | Mitigation |
|---|---|---|---|
| EC-01 | Face ID / Touch ID не сработал (грязные пальцы, маска, плохое освещение) | Medium | Fallback на PIN-код, заданный при регистрации. 3 неудачные попытки → блокировка на 30 сек. |
| EC-02 | Биометрия скомпрометирована (чужой палец/лицо) | Critical | Email-уведомление владельцу при КАЖДОМ подписании. device_id в аудит-следе. |
| EC-03 | Устройство jailbreak/root | High | Детекция при запуске (expo-device + jailbreak-detection). Отметка device_integrity=compromised в аудит-следе. Предупреждение пользователю. НЕ блокируем — решение принимает компания. |
| EC-04 | Пользователь сменил устройство | High | Старая подпись безвозвратно потеряна (хранение только локально). Пересоздание подписи. Старые документы верифицируемы по старому device_id. |
| EC-05 | Пользователь забыл PIN | Medium | Сброс через email → повторная настройка биометрии/PIN. Подпись НЕ сбрасывается (локальное хранилище). |
Документы и PDF
| # | Edge Case | Severity | Mitigation |
|---|---|---|---|
| EC-06 | PDF повреждён или невалидный | High | Валидация при загрузке: magic bytes, структура PDF, отсутствие шифрования. Сообщение об ошибке с причиной. |
| EC-07 | PDF слишком большой (>10 MB) | Low | Отклонение с указанием лимита. Предложение: оптимизировать PDF перед загрузкой. |
| EC-08 | PDF содержит вредоносный код (JavaScript, embedded files) | Critical | Санитизация при загрузке: удаление JavaScript, embedded files, внешних ссылок. Библиотека pdf-lib с флагом ignoreEncryption. |
| EC-09 | PDF с нестандартными шрифтами — подпись отображается некорректно | Medium | Встраивание шрифтов при рендеринге. Тестирование с топ-20 немецких HR-документов. |
| EC-10 | Место подписи выходит за границы страницы | Low | Валидация координат при отметке: x + w ≤ page_width, y + h ≤ page_height. |
Сеть и доступность
| # | Edge Case | Severity | Mitigation |
|---|---|---|---|
| EC-11 | Нет интернета на устройстве сотрудника | Medium | Чёткое сообщение: «Требуется подключение к интернету». Офлайн-режим — только в v1.2. |
| EC-12 | Push-уведомление не доставлено (APNs сбой) | High | Email как fallback-канал. Документ отображается в списке «Ожидающие» при следующем открытии приложения. |
| EC-13 | Серверное хранилище (Supabase Storage) недоступно | Critical | Retry с exponential backoff (3 попытки). Webhook health-check. Мониторинг через Uptime Kuma (pAss). |
| EC-14 | PDF-микросервис не отвечает | High | Retry с exponential backoff. Статус документа → «Обработка». Уведомление отправителю при задержке >5 мин. |
Данные и согласованность
| # | Edge Case | Severity | Mitigation |
|---|---|---|---|
| EC-15 | Двойная отправка запроса на подпись одному сотруднику | Medium | Уникальный constraint на (document_id, signer_email). Повторная отправка → «Запрос уже отправлен». |
| EC-16 | Два HR-менеджера одновременно редактируют отметку подписи | Low | Оптимистическая блокировка (version field). Last-write-wins с предупреждением. |
| EC-17 | Сотрудник зарегистрирован в нескольких компаниях | Medium | Один email → множественные company_id. Переключение между компаниями в приложении. |
| EC-18 | Компания удаляет аккаунт (GDPR) — что с подписанными PDF? | High | Серверные данные: soft-delete → hard-delete через 30 дней. PDF, уже скачанные компанией, не модифицируются. Аудит-след включает факт удаления аккаунта. |
| EC-19 | Сотрудник оспаривает факт подписания («это не я») | Critical | Аудит-след содержит: email, device_id, biometric_method, timestamp, doc_hash. Отдельная страница в подписанном PDF. Этого достаточно для Beweiswert (не Beweiskraft — нужен QES для полной силы). |
| EC-20 | Betriebsrat отклоняет документ — что делает HR? | Low | Вне системы. HR вручную удаляет запрос или помечает как «Отозван». Статус → «Отозван», уведомление сотруднику. |
Пользовательский опыт
| # | Edge Case | Severity | Mitigation |
|---|---|---|---|
| EC-21 | Сотрудник не хочет рисовать подпись пальцем | Medium | Альтернатива: выбор из предустановленных шрифтов (рукописный стиль). Кнопка «Пропустить» → автоматическая подпись из имени. |
| EC-22 | Сотрудник с ограниченными возможностями (Accessibility) | Medium | VoiceOver/TalkBack для всех элементов. Достаточный цветовой контраст. Минимальный размер touch-target: 44pt (Apple HIG). |
| EC-23 | Сотрудник случайно подписал не тот документ | Low | Подтверждение перед подписанием: «Вы подтверждаете ознакомление с [название]?» НЕТ возможности «отменить» подписание — только через HR. |
| EC-24 | Сотрудник удалил приложение, не подписав документ | Low | Статус остаётся «Ожидает». HR видит просрочку и отправляет напоминание по email. |
| EC-25 | Изменение законодательства (eIDAS 2.0, EUDI Wallet 2027+) | Medium | Архитектура с плагинами для методов подписи (абстракция SigningMethod). Сегодня — EES (biometric + visual), завтра — QES через TSP, послезавтра — EUDI Wallet. |
4. Technical Stack (соло-оптимизированный)
Принципы выбора:
- Единый язык: TypeScript везде — mobile (React Native), web (Next.js), backend logic (Supabase Edge Functions + TypeScript), PDF-сервис (Node.js). Контекстное переключение между языками = потерянные часы.
- Managed services где возможно: Каждый self-hosted компонент = +2-4 часа в неделю на运维.
- 1 платформа для старта: iOS first. Android — тот же код React Native, но отдельный релиз в v1.1.
Выбор мобильного фреймворка: React Native (Expo) vs Native (Swift/Kotlin)
| Критерий | React Native (Expo) | SwiftUI + Jetpack Compose |
|---|---|---|
| Время разработки (соло) | 6 нед. на iOS+Android | 12 нед. на iOS ТОЛЬКО |
| Единый язык с бекендом | ✅ TypeScript | ❌ Swift + Kotlin + TypeScript |
| Биометрия | expo-local-authentication ✅ | LocalAuthentication (Swift) ✅ |
| Secure storage | expo-secure-store ✅ | Keychain (Swift) ✅ |
| Подпись (рисование) | react-native-skia ✅ | PencilKit (Swift) ✅ |
| PDF-просмотр | react-native-pdf ✅ | PDFKit (Swift) ✅ |
| Push-уведомления | expo-notifications ✅ | APNs/FCM (нативно) ✅ |
| Кривая обучения (соло) | Одна → продуктивен с дня 1 | Две → +2-3 недели на каждую |
Решение: React Native (Expo SDK 52+). React Native закрывает ВСЕ технические потребности MVP. Нативная разработка не даёт преимуществ, которые окупили бы удвоение трудозатрат.
Выбор бекенда: Supabase vs Go/FastAPI + PostgreSQL + Redis + S3
| Критерий | Supabase | Self-hosted Go/FastAPI stack |
|---|---|---|
| Auth (email magic link) | Встроено, 0 строк кода | ~500 строк + OAuth2 flow |
| PostgreSQL | Встроено, managed | Установка, бэкапы, мониторинг |
| Object Storage (PDF) | Встроено (S3-compatible) | MinIO установка + настройка |
| Realtime (статусы) | Встроено (WebSocket) | WebSocket сервер вручную |
| Edge Functions | Встроено (Deno) | Отдельный сервис |
| Row-Level Security | Встроено | Ручная реализация |
| EU-хостинг | ✅ eu-central-1 (AWS Frankfurt) | ✅ Hetzner (Nürnberg/Falkenstein) |
| Стоимость (MVP) | $0 (free tier) → $25/мес (Pro) | ~€8/мес (CX22 VPS) + трудозатраты на运维 |
| Время настройки (соло) | 2 часа | 2-3 дня |
Решение: Supabase (cloud, eu-central-1). Для MVP экономия 2-3 дней настройки и 2-4 часов в неделю на运维 важнее, чем €25/мес. При масштабировании (v1.2+) — миграция на self-hosted Supabase на Hetzner.
PDF-микросервис
Проблема: Supabase Edge Functions имеют ограничения по payload (6 MB) и runtime (60s CPU). PDF-процессинг (скачать PDF + скачать подпись + рендерить + загрузить результат) требует больше ресурсов.
Решение: Отдельный Node.js-микросервис на Hetzner VPS (CX22, ~€4/мес):
- Библиотека: pdf-lib (JavaScript) — добавление изображений, метаданных, текста
- API: 1 эндпоинт POST /render — принимает URL PDF + URL подписи + координаты → возвращает URL подписанного PDF
- Безопасность: internal API key, доступ только из Supabase Edge Function
- Докеризация: Dockerfile → docker compose на Hetzner
Итоговый стек
| Компонент | Технология | Почему |
|---|---|---|
| Mobile App | React Native (Expo SDK 52) + TypeScript | 1 кодовая база для iOS/Android, единый язык с бекендом |
| Web Admin | Next.js 15 + TypeScript + Tailwind CSS | Быстрая разработка, Vercel деплой |
| Auth + DB + Storage | Supabase (eu-central-1) | Managed, 0运维 для MVP |
| API Logic | Supabase Edge Functions (TypeScript/Deno) | Рядом с данными, низкая латентность |
| PDF Processing | Node.js + pdf-lib (Hetzner CX22) | Вынесен из-за ограничений Edge Functions |
| Push Notifications | expo-notifications (APNs) | Встроено в Expo |
| Resend.com (бесплатно 100/день) | Простой API, европейский провайдер | |
| Deployment | Vercel (web) + EAS Build (mobile) + Hetzner (pdf-service) | Минимальная конфигурация |
| Monitoring | Uptime Kuma (pAss) + Sentry (free tier) | Уже есть в pAss |
| CI/CD | GitHub Actions | Бесплатно для публичных репозиториев |
Что НЕ используем (явно):
| Отклонённая технология | Причина |
|---|---|
| Swift / Kotlin (нативная разработка) | Удваивает трудозатраты, не даёт преимуществ для MVP |
| Go / FastAPI (кастомный бекенд) | Требует ручного управления PostgreSQL, Redis, Auth, Storage |
| Firebase | US-хостинг (CLOUD Act), хуже с реляционными данными |
| AWS Amplify | Сложнее чем Supabase, US-хостинг |
| Docker Compose на Hetzner для всего | Съедает 4-6 ч/нед. на运维 — не для соло |
| MongoDB | Нужен реляционный аудит-лог (ACID) |
5. Ключевые допущения (Assumptions)
Без подтверждения которых продукт НЕ ИМЕЕТ СМЫСЛА:
| # | Допущение | Проверка | Impact если неверно |
|---|---|---|---|
| A1 | Визуальная подпись + биометрия + аудит-след имеют Beweiswert в немецких трудовых судах | Rechtsgutachten (Fachanwalt IT-Recht), 2 нед., ДО написания кода | FATAL. Продукт не имеет ценности без юридической значимости. |
| A2 | Целевые документы (Betriebsvereinbarungen, Arbeitsanweisungen, NDA) НЕ требуют письменной формы по § 126 BGB | Rechtsgutachten — какие документы требуют Schriftform (§ 126) vs Textform (§ 126b) vs соглашения (formfrei) | FATAL. Если все целевые документы требуют § 126 BGB — продукт не работает без QES. |
| A3 | HR-отделы Mittelstand 50-500 чел. готовы платить €29-99/мес за compliance acknowledgement | 20 depth interviews с HR-директорами Mittelstand, 3 нед. | FATAL. Если готовы платить только 0-9 EUR — юнит-экономика не сходится. |
| A4 | Сотрудники готовы установить отдельное приложение для подписания HR-документов | CustDev-опросы сотрудников (через HR-директоров) | HIGH. Если нет → нужен Web-фолбек или App Clip в v1.1. |
| A5 | Supabase cloud (AWS Frankfurt) удовлетворяет DSGVO-требованиям для MVP | DPIA (Data Protection Impact Assessment), консультация Datenschutzbeauftragter | HIGH. Если нет → миграция на self-hosted Supabase на Hetzner (+2-3 нед.). |
| A6 | Рынок DACH достаточен для окупаемости при ARPU €50-75 | Market Research уже сделан (VeriChain #07): TAM €578M, SAM €98M | MEDIUM. Подтверждено, но нужна проверка willingness-to-pay. |
| A7 | React Native (Expo) обеспечивает достаточный доступ к Secure Enclave / Keystore | Технический spike: 1 день на expo-secure-store + expo-local-authentication | MEDIUM. Если нет → переход на нативный модуль (React Native bridge). |
| A8 | pdf-lib (JavaScript) достаточен для встраивания подписи и метаданных | Proof-of-concept PDF pipeline: 2 дня | LOW. Альтернативы: iText (Java), PyPDF2 (Python) через микросервис. |
CustDev-план (до написания кода):
- Rechtsgutachten (недели -2 — -1): Fachanwalt für IT-Recht, подтверждение допущений A1 и A2. Бюджет: €1,500-3,000.
- 20 depth interviews (недели -3 — 0): HR-директора немецкого Mittelstand, 50-500 сотрудников.
- DPIA (параллельно с MVP): обязателен по GDPR Art. 35 для биометрических данных.
6. Дорожная карта (12 недель)
Pre-MVP: Валидация (недели -2 — 0) — ДО кода
| Неделя | Что делаем | Результат |
|---|---|---|
| -2 | Rechtsgutachten: заказ у Fachanwalt für IT-Recht | Подтверждение/опровержение A1, A2 |
| -1 | CustDev: 10+ depth interviews с HR-директорами | Подтверждение/опровержение A3, A4 |
| 0 | Landing page zustimm.io + waitlist + Figma-прототип | 50+ waitlist → GO |
Gate (конец недели 0): Rechtsgutachten положительный + 10+ интервью подтверждают спрос + 50+ waitlist → GO к коду. Если нет → PIVOT.
MVP: Ядро продукта (недели 1-6) — 1 чел. + AI
Неделя 1-2: Фундамент + Web Admin
| День | Задача | Стек |
|---|---|---|
| 1-2 | Настройка Supabase: проект (eu-central-1), схема БД (organisations, users, documents, signature_requests, audit_trail), RLS-политики | Supabase SQL |
| 3-4 | Next.js проект: регистрация компании (M1), магическая ссылка (Supabase Auth) | Next.js + Supabase JS SDK |
| 5-7 | Загрузка PDF (M6): drag-and-drop, валидация, Supabase Storage | Next.js + Supabase Storage |
| 8-10 | Отметка места подписи (M7): предпросмотр PDF, drag-and-drop маркера, сохранение координат | react-pdf + Supabase |
Gate (конец недели 2): Можно зарегистрировать компанию → загрузить PDF → отметить место подписи → сохранить в БД.
Неделя 3-4: Мобильное приложение
| День | Задача | Стек |
|---|---|---|
| 1-2 | Expo проект: навигация, Supabase-клиент, экран регистрации сотрудника (M2) | Expo + Supabase JS SDK |
| 3-5 | Создание подписи (M3): холст рисования, сохранение в expo-secure-store (M4) | react-native-skia + expo-secure-store |
| 6-7 | Настройка биометрии (M5): Face ID / Touch ID / PIN, expo-local-authentication | expo-local-authentication |
| 8-10 | Просмотр PDF (M9) + получение уведомлений (M7) + список ожидающих | react-native-pdf + expo-notifications |
Gate (конец недели 4): Можно зарегистрироваться → создать подпись → получить уведомление → просмотреть PDF.
Неделя 5-6: PDF-пайплайн + Интеграция + Полировка
| День | Задача | Стек |
|---|---|---|
| 1-2 | PDF-микросервис (M11): Node.js + pdf-lib, API render на Hetzner | Node.js + pdf-lib + Docker |
| 3-4 | Подтверждение подписания (M10): биометрия → извлечение подписи → отправка на рендеринг → удаление с сервера | Supabase Edge Function |
| 5-6 | Аудит-след (M12): запись всех событий, страница аудит-следа в PDF | Supabase Edge Function |
| 7-8 | Скачивание подписанного PDF (M13) + базовый дашборд (M14) | Next.js |
| 9-10 | End-to-end тестирование: регистрация → загрузка → отправка → подписание → скачивание | Ручное + Playwright (web) |
| 11-12 | Локализация DE (M15) + удаление аккаунта (M16) + GDPR-проверка | i18n |
| 13-14 | Полировка: error states, loading states, accessibility | — |
Gate (конец недели 6): End-to-end сценарий работает. 3 design partner используют продукт. → MVP RELEASED.
v1.1: Android + Массовость (недели 7-10)
| Неделя | Что делаем |
|---|---|
| 7 | Android-сборка: Expo EAS Build, тестирование на 5+ устройствах (S1) |
| 8 | Массовая отправка: ручной ввод + CSV-импорт (S2) |
| 9 | Срок действия + авто-напоминания + отказ от подписания (S3, S6) |
| 10 | Webhooks + экспорт аудит-лога + ролевая модель + верификация PDF (S4, S5, S7, S8) |
v1.2: Compliance + Enterprise-ready (недели 11-14)
| Неделя | Что делаем |
|---|---|
| 11 | PAdES baseline + TSA-отметка времени (C1, C2) |
| 12 | Офлайн-режим + шаблоны (C3, C4) |
| 13 | Брендирование + Personio API (C5, C6) |
| 14 | App Clip (iOS) для подписания без установки (C7) |
7. Метрики успеха MVP
| Метрика | Цель (конец недели 6) | Измерение |
|---|---|---|
| Design partners | 3 компании (Mittelstand 50-500) | Ручной трекинг |
| End-to-end latency | Отправка → подписание <30 мин (медиана) | Supabase Audit Trail |
| PDF rendering time | <10 сек (p95) | Логи PDF-сервиса |
| Crash-free rate (iOS) | >99% | Sentry |
| Same-day signature rate | >60% | Supabase Audit Trail |
| GDPR compliance | DPIA выполнен, 0 нарушений | Внешний аудит |
| Support tickets | <5 в неделю | Email/Telegram |
Анти-метрики (должны быть 0):
- Жалобы на Datenschutz: 0
- Потеря данных (подпись, PDF, аудит-след): 0
- App Store отклонение: 0
8. Открытые вопросы (до написания кода)
| # | Вопрос | Ответственный | Срок |
|---|---|---|---|
| OQ-1 | Достаточна ли EES (биометрия + визуальная подпись + device key) для Beweiswert в немецком трудовом суде? | Fachanwalt IT-Recht | Неделя -2 |
| OQ-2 | Какие конкретно HR-документы требуют § 126 BGB Schriftform, а какие — § 126b Textform? | Fachanwalt IT-Recht | Неделя -2 |
| OQ-3 | Готовы ли сотрудники Mittelstand рисовать подпись пальцем? (US-21) | CustDev | Неделя -1 |
| OQ-4 | Per-envelope или per-seat-per-month pricing? | CustDev | Неделя -1 |
| OQ-5 | Достаточен ли Supabase free tier для первых 3 design partners? | Технический spike | Неделя 1 |
| OQ-6 | Нужен ли DPIA до запуска даже для закрытого тестирования с 3 компаниями? | Datenschutzbeauftragter | Неделя 0 |
| OQ-7 | Какие альтернативы рисованию подписи (шрифты, авто-генерация) принять для Accessibility? | UX-тестирование | Неделя 4 |
9. Риски соло-разработки
| # | Риск | Probability | Impact | Mitigation |
|---|---|---|---|---|
| R1 | Выгорание. 6 недель интенсивной разработки соло. | High | High | Жёсткий график: 5 дней/нед., 8 часов/день. Выходные — полностью офлайн. |
| R2 | PDF-рендеринг сложнее чем ожидалось. Шрифты, позиционирование, PAdES. | Medium | High | POC на неделе -1: pdf-lib с 5 реальными HR-документами. |
| R3 | Apple App Store review затягивается. Биометрия — sensitive permission. | Medium | Medium | Ранняя отправка на review (неделя 5). TestFlight для design partners. |
| R4 | Supabase уходит из EU или меняет цены. | Low | Medium | Self-hosted backup plan: Supabase Docker на Hetzner. |
| R5 | CLAUDE.md rule overload. Правила pAss + Zustimm конфликтуют. | Low | Low | Zustimm CLAUDE.md только project-specific правила, без дублирования pAss. |
10. Следующие шаги
- [ ] Rechtsgutachten заказан (неделя -2)
- [ ] 20 depth interviews запланированы (неделя -1)
- [ ] Landing page zustimm.io + domain (неделя 0)
- [ ] Figma-прототип: web admin + mobile app (неделя 0)
- [ ] Технический POC: pdf-lib + expo-secure-store + expo-local-authentication (неделя 0)
- [ ] Gate review (конец недели 0): GO / NO-GO к коду