Skip to content

PRD — stimmt's: Mobile Parent-School Signature Platform

Вердикт: GO Продукт: stimmt's (от нем. stimmt's? — «верно?», разговорное подтверждение) Стадия: Pre-MVP Рынок: Schule + Musikschule, DACH Основатель: Соло, €0, IT=0, Lehrer + Musiker, pAss-инфраструктура, Claude Code


1. Product Overview

Проблема

В немецких школах родители подписывают десятки документов в год: разрешения на экскурсии, согласия на фото, Kenntnisnahmen оценок, Elternbrief-ответы, Anmeldeformulare. Текущий процесс:

  1. Lehrer печатает Elternbrief (2-5 страниц на ребенка)
  2. Раздаёт 28 детям в классе
  3. Дети несут домой (теряют по дороге — каждый пятый документ)
  4. Родитель читает, подписывает ручкой
  5. Ребёнок несёт обратно (теряет, мнёт, забывает)
  6. Lehrer проверяет, сортирует, подшивает в Ordner
  7. Кто не принёс — Lehrer напоминает (устно, через ребёнка, через Elternabend)
  8. К концу недели: 22/28 подписей собрано, 6 родителей «забыли», 2 документа потеряны безвозвратно

Масштаб: 32 400 школ в DACH × в среднем 8 Elternbriefe в месяц на класс × 28 учеников = ~87 млн подписей в год только в общеобразовательных школах. С Musikschulen (934 VdM + частные) и Kita — более 187 млн подписей в год.

Корневая боль: процесс держится на бумаге, детях-курьерах и ручном контроле Lehrer. Нет ни статуса в реальном времени, ни аудит-следа, ни доказательства, КТО именно подписал.

Решение

Lehrer создаёт Elternbrief в веб-интерфейсе → система генерирует QR-код → Lehrer печатает документ с QR-кодом → раздаёт детям → родитель сканирует QR телефоном → открывается PWA (без установки приложения, без аккаунта) → родитель читает документ → Face ID/Touch ID/PIN → подпись пальцем на экране → школа получает подписанный PDF с аудит-следом.

Ключевой принцип: Datenschutz через data minimization. Подпись родителя — только на устройстве. Сервер не хранит ни биометрических данных, ни приватных ключей. Никаких аккаунтов для родителей. Никаких устанавливаемых приложений.

Ценностное предложение

Для кого Ценность
Lehrer Нет chasing paper. Статус в реальном времени. Напоминание в 1 клик. Автоматическая подшивка.
Eltern Нет установки. Нет аккаунта. Подпись за 30 секунд с телефона. В любое время, в любом месте.
Schulleitung Цифровой аудит-след. DSGVO-совместимость. Нет бумажных Ordner.
Musikschule Цифровая Anmeldung. Отслеживание статуса. Профессиональный имидж.

Уникальные преимущества перед конкурентами

Конкурент Требует аккаунт родителей Требует установку Хранение подписи на сервере Цена для школы
Untis-Messenger Да Да Да Высокая
SchoolFox Да Да Да Средняя
IServ Да Нет (Web) Да Высокая
stimmt's Нет Нет (PWA) Нет (только на устройстве) Низкая

North Star Metric

Weekly Signed Documents per School (WSDpS) — количество подписанных документов в неделю на одну школу.

  • Отражает и adoption (сколько учителей используют), и engagement (сколько Elternbriefe отправляется), и completion (сколько подписывается)
  • Растёт только если продукт реально используется и заменяет бумагу
  • Легко измеряется на уровне системы
  • Коррелирует с retention: школа с WSDpS > 20 не уйдёт обратно на бумагу

2. User Personas

Persona 1: Anna — Lehrerin, 42 года

Контекст: Klassenlehrerin, 5. Klasse Gymnasium, Sachsen. 28 учеников. ~8 Elternbriefe в месяц. Школьный iPad (WiFi) + личный iPhone. Уровень тех-готовности: средний (WhatsApp, Online-Banking, Schulportal — умеет, остальное — «keine Zeit»).

Текущий процесс: Печатает Elternbrief в Lehrerzimmer → раздаёт детям → через 3 дня проверяет, кто принёс → записывает в Notizbuch → устно напоминает «непринёсшим» → через неделю звонит родителям → подшивает в Ordner. На Elternabend-Vorbereitung тратит 2-3 часа только на отслеживание подтверждений.

Боли: - «Дети теряют документы. Каждый. Раз.» - «Я не знаю, кто прочитал, а кто просто подписал не глядя» - «Родители говорят "не видели", а я не могу доказать» - «После каникул половина класса не помнит про Elternbrief»

Мотивация: Меньше бумажной работы → больше времени на Unterricht. Меньше конфликтов с родителями. Профессиональный инструмент, а не «я-в-Excel».

Сценарий использования: Утром перед Unterricht создаёт Elternbrief за 2 минуты. После обеда проверяет статус: 15/28 подписано. Жмёт «Erinnern» — система отправляет напоминание. К вечеру 25/28. Остальным трём — личное сообщение через Schul-App. На Elternabend — распечатка аудит-трейла: кто когда подписал.


Persona 2: Eltern (3 сегмента)

2a. Sven — 38 лет, IT-специалист, Vater

Контекст: Двое детей (8 и 11 лет), iPhone 15 Pro, digital native. Жена тоже в IT. Оба работают полный день.

Ожидания: «Почему я до сих пор подписываю бумажки ручкой в 2026 году?» Хочет: открыл → прочитал → Face ID → готово. 30 секунд.

Барьеры: Нетерпимость к багам. Если PWA зависнет при загрузке — уходит и забывает. Datenschutz-параноик: будет проверять, куда уходят данные.

MVP-стратегия: Идеальный early adopter. Даст честный фидбек. Расскажет другим родителям на Elternabend.

2b. Claudia — 45 лет, Bürokauffrau, Mutter

Контекст: Один ребёнок (10 лет), Samsung Galaxy A54 (Android), пользуется приложениями (Banking, Amazon, WhatsApp), но к новому относится с подозрением. «А это sicher? А куда идёт моя подпись?»

Ожидания: Чёткая инструкция. Видимое подтверждение, ЧТО именно она подписывает. Возможность увеличить текст (очки для чтения). Понятный статус: «подписано — Schule получила».

Барьеры: Если процесс занимает больше 2 минут — откладывает телефон «на потом». Если непонятно, какой документ подписывает — не подпишет. Нужен крупный шрифт, контрастный дизайн.

MVP-стратегия: Основной сегмент. Тестировать понятность интерфейса. Минимизировать шаги. Явно показывать: «Документ: Разрешение на экскурсию в Zoo Leipzig. 2 страницы. Отправлен: Frau Hoffmann, 15.03.2026.»

2c. Herr Weber — 68 лет, Rentner, Opa

Контекст: Воспитывает внука (12 лет), смартфон есть (сын дал старый iPhone SE), но пользуется только телефоном и WhatsApp. Не знает, что такое Face ID. PIN на телефоне помнит с трудом.

Ожидания: «А можно просто бумажку?» Если процесс требует больше одного нажатия — не справится.

Барьеры: Не поймёт, что такое QR-код. Не сможет нарисовать подпись пальцем. Забудет PIN. Не прочитает мелкий текст.

MVP-стратегия: НЕ целевая персона для MVP. Для этого сегмента — fallback: Lehrer печатает бумажную версию без QR-кода (традиционный способ). Не пытаемся оцифровать 100% родителей в MVP. Достаточно 80% (Sven + Claudia).


Persona 3: Markus — Musikschulleiter, 52 года

Контекст: Руководит Musikschule с 300 учениками и 15 преподавателями. Член VdM. Использует Windows-ноутбук + iPhone. Тех-готовность: средняя (Excel, E-Mail, банковское ПО — умеет, остальное — «ich bin Musiker, kein IT-ler»).

Текущий процесс: Каждый семестр — 300 Anmeldeformulare. Родители скачивают PDF с сайта, печатают, заполняют, подписывают, сканируют, отправляют по email. Musikschulleiter вручную проверяет каждое, заносит в Excel, отслеживает неполные. Администратор тратит 20 часов в семестр только на обработку Anmeldungen.

Боли: - «Родители заполняют форму от руки — почерк нечитаемый» - «Вечно не хватает подписи на letzten Seite» - «В Excel ошибки — трудно отследить, кто оплатил, а кто только записался» - «Формы теряются в email — приходится переспрашивать»

Мотивация: Профессиональный имидж («современная Musikschule»). Меньше административной работы. Цифровой процесс вместо бумажного хаоса.

Сценарий использования: Создаёт Anmeldeformular из шаблона → система генерирует QR-код → размещает на сайте и в Elternbrief → родитель заполняет форму + подписывает → Musikschule видит: кто заполнил, кто оплатил, кто в waiting list.


Persona 4: Bettina — Schulleiterin, 55 лет

Контекст: Leiterin Grundschule, Bayern. 250 учеников, 20 Lehrer. Ответственна за Datenschutz-compliance. Годовой бюджет школы: регулируется Schulträger (коммуна). Lehrer-бюджет (Klassenkasse): ~€200-400/класс/год — Lehrer распоряжаются самостоятельно.

Боли: - «Datenschutzbeauftragter требует аудит-след для Elternbriefe — у нас его нет» - «Бумажные Ordner занимают шкаф — 10 лет хранения по закону» - «При проверке не можем доказать, что родитель именно этот документ подписал» - «Lehrer жалуются на бумажную работу — тратят на неё Unterrichtszeit»

Мотивация: DSGVO-compliance. Entlastung für Lehrer (разгрузка учителей). Профессиональный имидж школы. Не хочет трогать Schulträger-бюджет — предпочитает решение, оплачиваемое из Lehrer-бюджета.

Бюджетная стратегия: Пилот оплачивается из Klassenkasse конкретного Lehrer (€0-50). При расширении на всю школу — из Schulbudget или Elternspende. Schulträger не вовлекается на старте.


Persona 5: Karsten — Administrator (опционально, Post-MVP)

Контекст: Schulträger-IT-Mitarbeiter или внешний администратор для нескольких Musikschulen. Управляет учётными записями Lehrer, шаблонами документов, выгрузкой для аудита.

MVP: Административных функций нет. Lehrer = сам себе администратор.


3. Core User Flows

Flow A: Lehrer создаёт Elternbrief

[Lehrer Web Dashboard] │ ├─ 1. Авторизация: magic link на email → клик → сессия (7 дней) │ ├─ 2. Dashboard: список активных Elternbriefe + статус каждого │ ├─ 3. Кнопка «+ Neuer Elternbrief» │ │ │ ├─ 3a. Ввод: Titel (обязательно), Beschreibung (опционально) │ ├─ 3b. Выбор типа: Elternbrief / Einwilligung / Kenntnisnahme / Sonstiges │ ├─ 3c. Выбор класса/классов (из списка, созданного Lehrer ранее) │ ├─ 3d. Загрузка PDF (до 10 MB, до 20 стр.) — Lehrer печатает из Word/Canva как PDF и загружает │ │ ИЛИ: ввод текста во встроенный редактор → live-превью PDF │ ├─ 3e. Дедлайн (дата), опционально │ └─ 3f. Кнопка «Elternbrief erstellen» │ ├─ 4. Система генерирует: │ ├─ Уникальный document_id (UUID v4) │ ├─ Signing URL: https://stimmts.app/s/{document_id}/{recipient_token} │ ├─ QR-код (PNG, 300 DPI) — кодирует signing URL │ └─ Печатный PDF: оригинальный документ + QR-код в верхнем правом углу каждой страницы + информация о документе в футере │ ├─ 5. Lehrer скачивает печатный PDF → печатает → раздаёт детям │ └─ 6. Dashboard обновляется: документ «aktiv», счётчик «0 von 28 unterschrieben»

Детали реализации: - Каждый recipient (родитель) получает свой уникальный recipient_token. Один QR-код = один родитель. Это гарантирует, что подпись привязана к конкретному Eltern-контакту. - Печатный PDF содержит 1 QR-код на страницу — если документ из 3 страниц, все 3 содержат QR. - QR-код ведёт на URL вида https://stimmts.app/s/a1b2c3d4/e5f6g7h8 — никаких параметров в URL, раскрывающих личность.

Flow B: Родитель подписывает через PWA

[Родитель получает бумажный Elternbrief с QR-кодом] │ ├─ 1. Открывает камеру телефона → направляет на QR-код │ ├─ iOS: камера распознаёт QR → баннер «Open in Browser» → тап │ └─ Android: камера распознаёт QR → диалог «Open link» → тап │ ├─ 2. PWA открывается в браузере (https://stimmts.app/s/{doc_id}/{token}) │ │ │ ├─ 2a. Загрузка: спиннер (≤2 сек) │ ├─ 2b. Проверка токена: валиден? документ активен? не просрочен? │ │ └─ Если ошибка → экран «Dieser Elternbrief ist nicht mehr gültig» │ │ │ └─ 2c. Экран «Dokument ansehen» │ ├─ Заголовок: «Einwilligung Klassenfahrt Leipzig» │ ├─ Мета: «Von: Frau Hoffmann, Klasse 5a | 3 Seiten» │ ├─ Встроенный просмотрщик PDF (рендеринг через pdf.js или нативный <embed>) │ │ ├─ Скролл, зум (pinch) │ │ └─ Кнопка «Vollbild» (полный экран) │ └─ Кнопка «Unterschreiben» (фиксирована внизу) │ ├─ 3. Родитель читает документ → жмёт «Unterschreiben» │ ├─ 4. Система запрашивает подтверждение личности: │ │ │ ├─ 4a. WebAuthn-диалог: │ │ ├─ iOS: системный диалог Face ID / Touch ID │ │ ├─ Android: системный диалог Fingerprint / Face Unlock / PIN │ │ └─ Desktop (fallback): PIN / Windows Hello │ │ │ ├─ 4b. WebAuthn успешен → platform authenticator возвращает assertion │ │ └─ Если неуспешен (нет биометрии, отказ) → повторный запрос (до 3 попыток) │ │ │ └─ 4c. После успешной аутентификации: │ ├─ Система сохраняет: credential_id, timestamp, auth_method │ └─ Переход к экрану подписи │ ├─ 5. Экран «Unterschreiben» │ │ │ ├─ 5a. Заголовок: «Bitte unterschreiben Sie» │ ├─ 5b. Подтверждение: «Ich bestätige, dass ich das Dokument gelesen habe und zustimme» │ ├─ 5c. Signature Pad: │ │ ├─ Canvas (ширина экрана × 200px высота) │ │ ├─ Рисование пальцем (touch events) или стилусом │ │ ├─ Кнопка «Löschen» (стереть) — под canvas │ │ └─ Placeholder-текст внутри canvas: «Hier unterschreiben» │ ├─ 5d. Имя родителя (optional, auto-fill если Lehrer указал): │ │ └─ Текстовое поле: «Ihr Name (zur Identifikation)» │ └─ 5e. Кнопка «Verbindlich unterschreiben» │ ├─ 6. Обработка подписания (клиентская сторона): │ │ │ ├─ 6a. PWA формирует signing_payload: │ │ ├─ document_id │ │ ├─ recipient_token │ │ ├─ visual_signature (SVG/PNG — подпись с canvas) │ │ ├─ signer_name (если введён) │ │ ├─ webauthn_assertion (подписанный challenge) │ │ ├─ device_info: user_agent, platform, screen_resolution, language │ │ └─ client_timestamp │ │ │ ├─ 6b. Отправка на сервер: POST /api/sign │ │ │ └─ 6c. Серверная обработка: │ ├─ Верификация recipient_token (одноразовый? срок действия?) │ ├─ Верификация WebAuthn assertion │ ├─ Встраивание visual_signature в PDF (pdf-lib, серверная сторона) │ ├─ Добавление аудит-трейла в метаданные PDF │ ├─ Сохранение подписанного PDF в Storage │ ├─ Обновление статуса DocumentRecipient → «signed» │ └─ Удаление visual_signature из памяти сервера │ └─ 7. Экран подтверждения: ├─ Иконка: checkmark (зелёная) ├─ Текст: «Vielen Dank! Die Schule wurde benachrichtigt.» ├─ Детали: «Dokument: Einwilligung Klassenfahrt Leipzig | Unterschrieben am: 15.03.2026, 19:23 Uhr» └─ Кнопка «Schliessen» → вкладка браузера закрывается (window.close() или инструкция)

Важные UX-детали: - Шаги 2→3→4→5→7: минимум экранов, каждый экран — одно действие - Если родитель закрыл браузер на шаге 2 (посмотрел, не подписал) → при повторном сканировании QR возвращается на шаг 2 (статус «angesehen, noch nicht unterschrieben») - Если родитель уже подписал → при повторном сканировании: «Sie haben dieses Dokument bereits unterschrieben. Vielen Dank!» - Если дедлайн прошёл → «Die Frist für diesen Elternbrief ist abgelaufen. Bitte kontaktieren Sie die Schule.»

Flow C: Musikschulleiter создаёт Anmeldeformular

[Musikschulleiter Web Dashboard] │ ├─ 1. Авторизация: email magic link │ ├─ 2. Выбор шаблона: «Anmeldeformular Musikschule» (предварительно настроенный) │ └─ Шаблон содержит поля: │ ├─ Schüler: Vorname, Nachname, Geburtsdatum │ ├─ Eltern: Name, E-Mail, Telefon │ ├─ Unterricht: Instrument, Kursart (Einzel/Gruppe), Lehrkraft │ └─ Vertrag: Laufzeit, Zahlungsweise │ ├─ 3. Musikschulleiter: │ ├─ Выбирает активные поля из шаблона │ ├─ Настраивает опции (список инструментов, список Lehrer) │ └─ Генерирует форму │ ├─ 4. Система генерирует: │ ├─ Уникальная ссылка на форму: https://stimmts.app/f/{form_id} │ └─ QR-код → размещается на сайте Musikschule, в Elternbrief, на Infotag-плакатах │ ├─ 5. Родитель сканирует QR → PWA с формой: │ ├─ Заполняет поля формы │ ├─ Подписывает (шаги 4-6 из Flow B) │ └─ Получает подтверждение │ └─ 6. Musikschulleiter видит в Dashboard: ├─ Список всех Anmeldungen: статус (ausstehend/ausgefüllt/unterschrieben) ├─ Фильтр по инструменту, Lehrer ├─ Экспорт в CSV для Excel └─ Скачивание подписанного PDF

Flow D: Lehrer проверяет статус и отправляет напоминание

[Lehrer открывает Dashboard] │ ├─ 1. Список активных Elternbriefe: │ ├─ Карточка документа: Titel, Klasse, дедлайн, progress bar │ ├─ «Einwilligung Klassenfahrt — 22/28 unterschrieben — Frist: 20.03.» │ └─ Цветовая индикация: зелёный (>80%), жёлтый (50-80%), красный (<50%) │ ├─ 2. Lehrer кликает на документ → детальный вид: │ │ │ ├─ 2a. Список родителей со статусом: │ │ ├─ Зелёный кружок: «Unterschrieben — 15.03. 19:23» │ │ ├─ Жёлтый кружок: «Angesehen — 16.03. 08:15» (открыл, не подписал) │ │ ├─ Серый кружок: «Nicht geöffnet» │ │ └─ Красный: «Abgelehnt» (если родитель явно отказался) │ │ │ ├─ 2b. Кнопка «Alle erinnern» (напомнить всем неподписавшим) │ │ └─ Отправляет push/SMS/email всем со статусом «nicht geöffnet» и «angesehen» │ │ │ ├─ 2c. Индивидуальные действия на каждого родителя: │ │ ├─ «Erinnern» — одноразовое напоминание │ │ └─ «Als Papier markieren» — для родителей без смартфона (fallback) │ │ │ └─ 2d. Кнопка «Alle unterschriebenen herunterladen» → ZIP всех подписанных PDF │ └─ 3. После дедлайна: ├─ Автоматическая email-сводка Lehrer: «Elternbrief X: 26/28 unterschrieben» └─ Неподписавшие выделены красным → Lehrer действует вручную

Механика напоминания: - MVP: напоминание = Lehrer получает текст для копирования и отправляет через существующий канал (WhatsApp-группа класса, Schul-App, E-Mail) - Post-MVP: автоматическая отправка email/SMS неподписавшим родителям (требуется хранение контакта)


4. Functional Specification (MVP)

4.1. Lehrer Web Dashboard

Экран: Авторизация

┌─────────────────────────────────┐ │ stimmt's │ │ │ │ [E-Mail-Adresse eingeben] │ │ │ │ [Magic Link senden] │ │ │ │ Nach dem Klick: │ │ «Link wurde gesendet. │ │ Bitte prüfen Sie Ihr │ │ E-Mail-Postfach.» │ └─────────────────────────────────┘ - Метод: Passwordless magic link (Supabase Auth) - Email: Содержит ссылку «Anmelden» → клик → Lehrer в дашборде - Сессия: 7 дней, затем перелогин - Безопасность: Ссылка одноразовая, срок действия 15 минут - MVP: Только Email. Post-MVP: Google/Microsoft SSO для школ с Workspace/365.

Экран: Dashboard (главный)

┌──────────────────────────────────────────────────┐ │ stimmt's [LH] Abmelden │ │──────────────────────────────────────────────────│ │ Grundschule Am Park — Frau Hoffmann │ │ │ │ [+ Neuer Elternbrief] │ │ │ │ Aktive Elternbriefe: │ │ ┌──────────────────────────────────────────────┐│ │ │ Einwilligung Klassenfahrt Leipzig 22/28 ││ │ │ Klasse 5a — Frist: 20.03.2026 ████░░ ││ │ └──────────────────────────────────────────────┘│ │ ┌──────────────────────────────────────────────┐│ │ │ Kenntnisnahme Notenschutz 18/28 ││ │ │ Klasse 5a — Frist: 25.03.2026 ███░░░ ││ │ └──────────────────────────────────────────────┘│ │ ┌──────────────────────────────────────────────┐│ │ │ Fotoerlaubnis Schulfest 30/30 ││ │ │ Klasse 5a — Abgeschlossen █████ ││ │ └──────────────────────────────────────────────┘│ │ │ │ Abgeschlossene (7) [Ausklappen] │ └──────────────────────────────────────────────────┘

Экран: Elternbrief erstellen

┌──────────────────────────────────────────────────┐ │ ← Zurück Neuer Elternbrief │ │──────────────────────────────────────────────────│ │ Titel * │ │ [Einwilligung Klassenfahrt Leipzig ]│ │ │ │ Beschreibung │ │ [Sehr geehrte Eltern, ... ]│ │ │ │ Typ │ │ [Einwilligung ▾] │ │ │ │ Klasse(n) * │ │ [☑ Klasse 5a (28 Schüler)] │ │ [☐ Klasse 7b (24 Schüler)] │ │ │ │ Dokument * │ │ [PDF hochladen (max. 10 MB)] │ │ — oder — │ │ [Text eingeben → als PDF generieren] │ │ │ │ Frist (optional) │ │ [20.03.2026] │ │ │ │ [← Abbrechen] [Elternbrief erstellen →] │ └──────────────────────────────────────────────────┘

Поведения: - При загрузке PDF: валидация формата, размера, числа страниц. Ошибка: «PDF ist zu gross (max. 10 MB)» или «PDF hat zu viele Seiten (max. 20)» - При выборе нескольких классов: для каждого класса генерируется отдельный список получателей - При создании: Lehrer видит превью печатного PDF с QR-кодом → может скачать или сразу печатать - После создания: невозможно изменить документ (immutable record). Можно только закрыть (статус → «geschlossen»)

Экран: Детальный статус Elternbrief

┌──────────────────────────────────────────────────┐ │ ← Dashboard Einwilligung Klassenfahrt Leipzig│ │──────────────────────────────────────────────────│ │ Status: Aktiv — 22/28 unterschrieben │ │ Frist: 20.03.2026 (noch 4 Tage) │ │ │ │ [Alle erinnern (6)] [Alle PDFs herunterladen] │ │ │ │ Unterschrieben (22): [Ausklappen ▾] │ │ ┌──────────────────────────────────────────────┐│ │ │ ✓ Max Mustermann 15.03. 19:23 ││ │ │ ✓ Laura Schmidt 15.03. 20:01 ││ │ │ ... ││ │ └──────────────────────────────────────────────┘│ │ │ │ Angesehen, nicht unterschrieben (3): │ │ ┌──────────────────────────────────────────────┐│ │ │ ◉ Tim Becker [Erinnern] [Papier] ││ │ │ ◉ Sarah Müller [Erinnern] [Papier] ││ │ │ ◉ Jan Schulz [Erinnern] [Papier] ││ │ └──────────────────────────────────────────────┘│ │ │ │ Nicht geöffnet (3): │ │ ┌──────────────────────────────────────────────┐│ │ │ ○ Anna Wagner [Erinnern] [Papier] ││ │ │ ○ Paul Fischer [Erinnern] [Papier] ││ │ │ ○ Mia Bauer [Erinnern] [Papier] ││ │ └──────────────────────────────────────────────┘│ └──────────────────────────────────────────────────┘

Действия: - «Alle erinnern»: показывает модальное окно с текстом напоминания, Lehrer копирует и отправляет - Индивидуальное «Erinnern»: то же для одного родителя - «Als Papier markieren»: переводит статус в «Papier-Rücklauf» (родитель без смартфона). Убирает из счётчика цифровых подписей. Lehrer получает напоминание собрать бумажную подпись. - Скачивание: индивидуальный PDF или ZIP всех подписанных

Экран: Klassenverwaltung (управление классами)

┌──────────────────────────────────────────────────┐ │ Einstellungen → Klassen │ │──────────────────────────────────────────────────│ │ [Neue Klasse] │ │ │ │ Klasse 5a (28 Schüler) [Bearbeiten] │ │ Klasse 7b (24 Schüler) [Bearbeiten] │ │ │ │ ── Klasse 5a bearbeiten ── │ │ Name: [5a] │ │ │ │ Schülerliste: │ │ ┌──────────────────────────────────────────┐ │ │ │ Kind: Max Eltern: m.mustermann@.. ✕│ │ │ │ Kind: Laura Eltern: l.schmidt@.. ✕│ │ │ │ ... │ │ │ └──────────────────────────────────────────┘ │ │ │ │ [+ Schüler hinzufügen] │ │ ┌─ Neuer Schüler ──────────────────────────┐ │ │ │ Kind Vorname: [Max ] │ │ │ │ Eltern E-Mail:[m.mustermann@email.de] │ │ │ │ │ │ │ │ [Hinzufügen] │ │ │ └───────────────────────────────────────────┘ │ │ │ │ [Speichern] │ └──────────────────────────────────────────────────┘

MVP-ограничение: Добавление учеников — вручную по одному. Нет CSV-импорта. Нет интеграции с Schulverwaltungssystemen. Lehrer вводит: имя ребёнка + email родителя.

4.2. Parent PWA

PWA-страницы (роутинг)

Маршрут Экран Описание
/s/{doc_id}/{token} Документ Просмотр PDF + кнопка «Unterschreiben»
/s/{doc_id}/{token}/sign Подпись WebAuthn + Signature Pad
/s/{doc_id}/{token}/done Подтверждение Success screen
/f/{form_id} Форма (Musikschule) Заполнение полей + подпись
/e/{error_code} Ошибка Невалидная ссылка, истёкший документ

Экран: Документ (Landing)

┌──────────────────────────────────┐ │ stimmt's │ │──────────────────────────────────│ │ │ │ Einwilligung Klassenfahrt │ │ Leipzig │ │ │ │ Von: Frau Hoffmann, Klasse 5a │ │ 3 Seiten — Frist: 20.03.2026 │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ │ │ [PDF Preview / Viewer] │ │ │ │ │ │ │ │ Скролл, зум (pinch) │ │ │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ Unterschreiben │ │ │ └──────────────────────────┘ │ └──────────────────────────────────┘ - PDF-просмотрщик: <iframe> с src=document_url#view=FitH или библиотека pdf.js - Кнопка фиксирована внизу (sticky bottom), всегда видна - Текст кнопки меняется в зависимости от статуса: «Unterschreiben» (не подписан) / «Bereits unterschrieben» (уже подписал) / «Abgelaufen» (просрочен)

Экран: Подпись (Signature)

┌──────────────────────────────────┐ │ ← Zurück Unterschreiben │ │──────────────────────────────────│ │ │ │ Bitte bestätigen Sie Ihre │ │ Identität: │ │ │ │ ┌──────────────────────────┐ │ │ │ 🔒 Face ID / Touch ID │ │ │ │ Bitte authentifizieren │ │ │ │ Sie sich │ │ │ └──────────────────────────┘ │ │ │ │ [WebAuthn-диалог — системный] │ │ │ │ ── после подтверждения ── │ │ │ │ Bitte unterschreiben Sie: │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ │ │ Hier unterschreiben │ │ │ │ │ │ │ └──────────────────────────┘ │ │ [Löschen] │ │ │ │ Ihr Name: │ │ [Max Mustermann ] │ │ │ │ ☐ Ich habe das Dokument │ │ gelesen und stimme zu │ │ │ │ ┌──────────────────────────┐ │ │ │ Verbindlich │ │ │ │ unterschreiben │ │ │ └──────────────────────────┘ │ └──────────────────────────────────┘

Поведения: - WebAuthn-промпт: системный диалог браузера/ОС (не кастомный). Если браузер не поддерживает WebAuthn → fallback: ввод имени + галочка (менее безопасный режим, документируется в аудит-трейле) - Signature Canvas: - Отслеживание touchstart/touchmove/touchend - Минимальная длина подписи: 10 пикселей (защита от случайного тапа) - Если подпись пустая → валидационная ошибка «Bitte unterschreiben Sie» - Кнопка «Verbindlich unterschreiben»: активна только когда подпись не пуста И галочка подтверждения отмечена - После отправки: индикатор загрузки → success screen

Экран: Подтверждение

┌──────────────────────────────────┐ │ stimmt's │ │──────────────────────────────────│ │ │ │ ✓ (зелёный) │ │ │ │ Vielen Dank! │ │ │ │ Das Dokument wurde │ │ unterschrieben. │ │ Die Schule wurde benachrichtigt.│ │ │ │ Dokument: │ │ Einwilligung Klassenfahrt │ │ Leipzig │ │ │ │ Unterschrieben am: │ │ 15.03.2026, 19:23 Uhr │ │ │ │ ┌──────────────────────────┐ │ │ │ Fenster schliessen │ │ │ └──────────────────────────┘ │ └──────────────────────────────────┘

Экран: Ошибка

┌──────────────────────────────────┐ │ stimmt's │ │──────────────────────────────────│ │ │ │ ✕ │ │ │ │ Dieser Elternbrief ist │ │ nicht mehr gültig. │ │ │ │ Mögliche Gründe: │ │ • Die Frist ist abgelaufen │ │ • Der Elternbrief wurde │ │ zurückgezogen │ │ • Der Link ist ungültig │ │ │ │ Bitte kontaktieren Sie die │ │ Schule. │ └──────────────────────────────────┘ - Варианты ошибок: expired, revoked, invalid_token, already_signed, server_error - Каждая ошибка — свой понятный текст на немецком

PWA-технические характеристики

Характеристика Значение
Фреймворк React (Vite) + TypeScript
PWA Service Worker (Workbox), manifest.json
Установка НЕТ — намеренно не предлагаем установку. Родитель не должен устанавливать приложение. PWA-возможности используются для кэширования и производительности, но без баннера «Zum Home-Bildschirm hinzufügen»
Оффлайн НЕТ в MVP — подписание требует серверного соединения
WebAuthn @simplewebauthn/browser (клиентская библиотека)
QR-чтение Через нативную камеру ОС (не встроенный сканер в PWA). Камера распознаёт QR → передаёт URL браузеру
PDF-просмотр pdf.js или нативный <iframe src="...pdf">
Signature Pad Canvas API + touch events, экспорт в PNG (300 DPI, прозрачный фон)
Совместимость iOS Safari 16+, Android Chrome 110+, Desktop Chrome/Firefox/Edge (для тестирования)

4.3. Обработка документов (серверная сторона)

Генерация печатного PDF с QR-кодом

Вход: оригинальный PDF (Lehrer) + signing_urls (для каждого родителя) │ ├─ 1. Для каждого родителя: │ ├─ Сгенерировать QR-код: PNG, 300 DPI, размер 25×25 мм на печати │ ├─ Встроить QR-код в правый верхний угол каждой страницы PDF │ ├─ Добавить футер: «Elternbrief — stimmt's — ID: {doc_id} — Bitte scannen Sie den QR-Code» │ └─ Сохранить персональный PDF в Storage │ └─ 2. Вернуть Lehrer ZIP всех PDF или единый PDF (на выбор)

Технология: pdf-lib (Node.js / browser) — модификация PDF без серверного PDF-движка. QR-код генерируется через qrcode (npm).

Встраивание подписи в PDF

Вход: оригинальный PDF + visual_signature (PNG) + signing_metadata │ ├─ 1. Открыть PDF через pdf-lib ├─ 2. Добавить visual_signature: │ ├─ Позиция: последняя страница, нижняя треть, по центру │ ├─ Размер: 200×80px (масштабируется под PDF) │ └─ Render: PNG с прозрачностью → embedPng() ├─ 3. Добавить текстовый блок с метаданными: │ ├─ «Unterschrieben am: 15.03.2026, 19:23 Uhr» │ ├─ «Methode: Face ID (Apple iPhone 15 Pro)» │ ├─ «Dokument-ID: a1b2c3d4» │ └─ «Geprüft durch: stimmt's WebAuthn-Verfahren» ├─ 4. Встроить аудит-трейл в XMP-метаданные PDF (PAdES-подход) ├─ 5. Сохранить подписанный PDF → Storage └─ 6. Удалить visual_signature PNG из памяти/временного хранилища

Аудит-трейл (SigningRecord)

Для каждого подписания создаётся запись:

Поле Тип Описание
id UUID Уникальный идентификатор
document_recipient_id FK Связь с получателем
event_type enum opened / viewed / signed / declined
timestamp timestamptz Серверное время события
device_platform string iOS / Android / Windows / macOS
device_browser string Safari 18 / Chrome 130
device_screen string «390×844 @3x»
auth_method string faceid / touchid / pin / none
credential_id string WebAuthn credential ID (первые 12 символов + хеш)
signature_hash string SHA-256(visual_signature PNG)
ip_hash string SHA-256(IP) — хранится 30 дней, затем null
user_agent_hash string SHA-256(User-Agent)

Принципы: - Append-only: записи не редактируются, не удаляются - Хеш-цепочка: каждая запись содержит SHA-256(предыдущая_запись || текущая_запись) - Purge: IP-хеши автоматически обнуляются через 30 дней - Экспорт: Lehrer может скачать полный аудит-трейл как часть ZIP-архива


4.4. Модуль Musikschule

Шаблоны форм (FormTemplate)

Lehrer/Musikschulleiter может создать шаблон формы один раз и переиспользовать:

FormTemplate: - id - school_id - name: «Anmeldeformular Musikschule 2026/27» - fields: [ {key: "schueler_vorname", label: "Vorname des Schülers", type: "text", required: true}, {key: "schueler_nachname", label: "Nachname des Schülers", type: "text", required: true}, {key: "geburtsdatum", label: "Geburtsdatum", type: "date", required: true}, {key: "instrument", label: "Instrument", type: "select", options: ["Klavier","Gitarre","Geige",...]}, {key: "kursart", label: "Kursart", type: "select", options: ["Einzel","Gruppe","Online"]}, {key: "eltern_name", label: "Name Erziehungsberechtigte/r", type: "text", required: true}, {key: "eltern_email", label: "E-Mail", type: "email", required: true}, {key: "eltern_telefon", label: "Telefon", type: "tel", required: false}, {key: "bemerkungen", label: "Bemerkungen", type: "textarea", required: false} ] - created_at

Поведения: - Создание шаблона → кнопка «Formular veröffentlichen» → генерация публичной ссылки - Родитель открывает ссылку → PWA с формой → заполняет поля → подписывает → submit - Musikschulleiter видит заполненные формы с фильтрацией и экспортом - FormSubmission хранит значения полей как JSONB

Отличие от Elternbrief:

  • Elternbrief: Lehrer загружает готовый PDF → родитель только подписывает
  • Anmeldeformular: Система генерирует форму → родитель заполняет И подписывает

5. Technical Constraints

5.1. PWA-ограничения

Ограничение Влияние Решение
iOS Safari не поддерживает Web Share API для файлов Нельзя «поделиться» подписанным PDF с Lehrer напрямую PDF сохраняется на сервере, Lehrer скачивает из Dashboard
iOS PWA не имеет доступа к Face ID API напрямую Нельзя кастомно вызвать Face ID Используем WebAuthn — системный диалог через браузер
PWA на iOS имеет холодный старт (перезагрузка при простое) Потеря состояния подписи Сохраняем состояние в sessionStorage. При перезагрузке — восстанавливаем или начинаем заново с проверкой токена
WebAuthn требует HTTPS Локальная разработка сложнее ngrok / localhost (WebAuthn работает на localhost)
WebAuthn не работает в WebView (Instagram, Facebook in-app browser) Родитель открывает из соцсетей — не работает Инструкция «Bitte in Safari/Chrome öffnen» + кнопка копирования ссылки

5.2. WebAuthn для eIDAS SES

Юридический анализ (MVP-допущение):

eIDAS определяет три уровня электронных подписей: 1. SES (Simple Electronic Signature) — базовая. Подходит для 80%+ школьных документов (Elternbriefe, Einwilligungen, Kenntnisnahmen). Не требует сертифицированного TSP. 2. AES (Advanced Electronic Signature) — требует сертификат. Для важных документов. 3. QES (Qualified Electronic Signature) — высший уровень. Требуется для нотариальных документов.

stimmt's использует SES через WebAuthn: - WebAuthn platform authenticator (Face ID, Touch ID, Android Biometric) обеспечивает привязку к устройству - WebAuthn assertion содержит подписанный challenge → криптографическое доказательство, что конкретное устройство участвовало - Комбинация: WebAuthn assertion + visual_signature + timestamp + IP-хеш → audit trail для SES - Достаточно для: Elternbriefe, Einwilligungen (Datenschutz, Foto, Exkursion), Kenntnisnahmen, Krankmeldungen - Недостаточно для: Schulverträge (Schriftformerfordernis), Abmahnungen (требуется QES)

Техническая реализация: - Сервер генерирует WebAuthn challenge (случайные 32 байта) - Клиент вызывает navigator.credentials.get() с publicKey опциями - Устройство возвращает AuthenticatorAssertionResponse: - authenticatorData (включает флаг User Verified) - clientDataJSON (включает challenge, origin) - signature (подпись приватным ключом устройства) - Сервер верифицирует: - Подпись с публичным ключом (сохранённым при первой же WebAuthn-сессии для этого родителя) - Флаг UV (User Verified) = 1 (биометрия/PIN был использован) - Challenge совпадает - Origin совпадает (https://stimmts.app)

MVP-допущение: Родитель впервые использует WebAuthn на устройстве → credential создаётся при первом подписании (Resident Key / Discoverable Credential). Публичный ключ сохраняется на сервере. При последующих подписаниях — assertion с тем же credential.

5.3. Стек технологий

Слой Технология Обоснование
PWA React 19 + TypeScript + Vite Быстрая разработка, компонентный подход, экосистема
PWA-инфраструктура Workbox (service worker) Кэширование ассетов, оффлайн-поддержка (post-MVP)
Стили Tailwind CSS + daisyUI Быстрая вёрстка без дизайнера
PDF-рендеринг (клиент) pdf.js Просмотр PDF в PWA
PDF-генерация (сервер) pdf-lib (серверная Node.js) Встраивание QR-кода, подписи, метаданных
WebAuthn (клиент) @simplewebauthn/browser Упрощение WebAuthn API
WebAuthn (сервер) @simplewebauthn/server Верификация assertion
QR-код qrcode (npm) Генерация QR PNG
Backend API bun + Elysia / Hono Легковесный, быстрый, TypeScript-native
База данных PostgreSQL 16 (Supabase) Бесплатный тир Supabase (500 MB), Row-Level Security
Хранилище файлов Supabase Storage PDF-файлы, S3-совместимое API
Аутентификация Supabase Auth Magic link, Row-Level Security, сессии
Email Supabase Auth (встроенный) или Resend (транзакционные) Magic link + оповещения
Хостинг Hetzner VPS (Nürnberg) или Cloudflare Pages + Workers EU-only
Мониторинг Sentry (бесплатный тир) + Uptime Robot Ошибки и доступность

5.4. DSGVO-совместимость

Требование GDPR/DSGVO Реализация в stimmt's
Art. 5(1)(c) Data Minimisation Подпись — на устройстве. Сервер не хранит приватные ключи. Visual_signature удаляется после встраивания. Email родителей: только SHA-256 хеш.
Art. 17 Right to Erasure Мягкое удаление данных родителя. Полное удаление всех данных через 6 мес. после конца учебного года.
Art. 32 Security HTTPS/TLS 1.3. WebAuthn. Данные в покое: AES-256 (Supabase).
Art. 28 Data Processing Agreement (DPA) DPA с Supabase (EU region). DPA с Hetzner (VPS).
Art. 30 Records of Processing Логи операций (аудит-трейл) = автоматический реестр обработки.
EU Data Residency Хостинг: EU-only (Frankfurt/Nürnberg). Никаких US-серверов.
Cookie Consent Не требуется: PWA не использует tracking-cookies. Только технически необходимые (session cookie).
Datenschutz-Folgenabschätzung (DPIA) Требуется для школы как Verantwortliche. stimmt's предоставляет документацию для DPIA.
Auftragsverarbeitung (AVV) Школа = Verantwortliche. stimmt's = Auftragsverarbeiter. AVV-договор входит в onboarding.

5.5. Ограничения соло-основателя

Ограничение Влияние на MVP
€0 бюджет Supabase бесплатный тир (достаточно для пилота: 500 MB БД, 1 GB Storage). Hetzner VPS: ~€5/мес (можно отложить до первого платящего клиента, начать на Cloudflare Pages + Workers)
IT=0 навыков программирования Основатель не пишет код. Вся разработка через Claude Code + pAss-инфраструктура. Архитектура — максимально простая (монолит, минимум сервисов).
Один человек Не может одновременно продавать, писать код, поддерживать и администрировать. MVP должен работать без ручного вмешательства (автоматический onboarding).
Lehrer-нетворк Главный актив. Первые 5 школ — личный нетворк основателя. Не нужен маркетинг на старте.
pAss-инфраструктура CI/CD, мониторинг, деплой — через родительский проект pAss. Не нужно настраивать с нуля.

6. Data Model (концептуальная)

6.1. Сущности и связи

School (1) ────────── (N) Teacher Teacher (1) ───────── (N) Class Class (1) ─────────── (N) Parent Teacher (1) ───────── (N) Document Document (1) ──────── (N) DocumentRecipient Parent (1) ────────── (N) DocumentRecipient DocumentRecipient (1) ── (N) SigningRecord School (1) ────────── (N) FormTemplate FormTemplate (1) ──── (N) FormSubmission Parent (1) ────────── (N) FormSubmission Teacher (1) ───────── (N) WebAuthnCredential (свой, для входа) Parent (1) ────────── (N) WebAuthnCredential (для подписания)

6.2. Описание сущностей

School (Schule)

id: UUID PK name: string (название школы) type: enum (schule | musikschule | kita) street: string? plz: string? city: string? bundesland: string? created_at: timestamptz

Teacher (Lehrer)

id: UUID PK school_id: FK → School email: string (уникальный, используется для magic link) name: string role: enum (lehrer | leiter | admin) created_at: timestamptz last_login_at: timestamptz? - Аутентификация: через Supabase Auth (external, не хранится в этой таблице) - Связь с Supabase Auth: по email

Class (Klasse)

id: UUID PK school_id: FK → School teacher_id: FK → Teacher (Klassenlehrer) name: string (напр. «5a», «Klavier-Anfänger Di 16:00») created_at: timestamptz

Parent (Eltern)

id: UUID PK class_id: FK → Class child_name: string (имя ребёнка — для идентификации) email_hash: string (SHA-256(email) — для напоминаний, без хранения email в открытом виде) created_at: timestamptz - Принцип: Никаких персональных данных родителей, кроме child_name и email_hash - Lehrer уже знает родителей — нам не нужны их имена для функционирования системы - Email хранится как хеш: Lehrer вводит email → система хеширует → сохраняет хеш. Для отправки напоминаний: Lehrer вводит email → хеширует → сравнивает с сохранённым → если совпадает, отправляет - Важно: Это означает, что email нужен Lehrer для напоминаний. Lehrer хранит email в своём адресном списке (как и сейчас). stimmt's не хранит email в открытом виде.

Document (Elternbrief)

id: UUID PK school_id: FK → School teacher_id: FK → Teacher title: string description: text? type: enum (elternbrief | einwilligung | kenntnisnahme | sonstiges) status: enum (draft | active | closed | expired) deadline: date? original_pdf_url: string (Storage URL) printable_pdf_url: string? (PDF с QR-кодами, генерируется при активации) created_at: timestamptz closed_at: timestamptz?

DocumentRecipient

id: UUID PK document_id: FK → Document parent_id: FK → Parent recipient_token: string (уникальный, часть signing URL) status: enum (pending | opened | viewed | signed | declined | paper_fallback) signed_pdf_url: string? (Storage URL — подписанный PDF) signed_at: timestamptz? reminder_count: int (default 0) reminder_last_sent: timestamptz? created_at: timestamptz - recipient_token: случайный UUID v4, одноразовый (после подписания — только для повторного просмотра) - status = paper_fallback: Lehrer пометил как «бумажный возврат», не учитывается в цифровых метриках

SigningRecord (аудит-трейл)

id: UUID PK document_recipient_id: FK → DocumentRecipient event_type: enum (opened | viewed | signing_started | signed | declined) timestamp: timestamptz device_platform: string device_browser: string device_screen: string auth_method: enum (faceid | touchid | pin | none) credential_id_hash: string (SHA-256(credential_id)) signature_hash: string (SHA-256(visual_signature_png)) ip_hash: string (SHA-256(client_ip)) ip_hash_expires_at: timestamptz (30 дней после создания → обнуление) user_agent_hash: string previous_record_hash: string? (хеш предыдущей записи для цепочки) created_at: timestamptz - Append-only + хеш-цепочка - IP-хеш автоматически обнуляется через 30 дней (cron job)

WebAuthnCredential

id: UUID PK parent_id: FK → Parent? (null для Lehrer) teacher_id: FK → Teacher? (null для Eltern) credential_id: string (WebAuthn credential ID) public_key: text (PEM) sign_count: int device_name: string? (напр. «iPhone 15 Pro») created_at: timestamptz last_used_at: timestamptz? - Используется и для Lehrer (вход), и для Eltern (подписание) - Одна запись на устройство: родитель может иметь несколько устройств (свой телефон + рабочий)

FormTemplate (для Musikschule)

id: UUID PK school_id: FK → School name: string fields: jsonb (массив определений полей) is_published: boolean public_url_token: string (уникальный) created_at: timestamptz

FormSubmission

id: UUID PK form_template_id: FK → FormTemplate parent_id: FK → Parent? field_values: jsonb ({key: value, ...}) status: enum (pending | filled | signed) signed_pdf_url: string? submitted_at: timestamptz? created_at: timestamptz

6.3. Принципы хранения данных

``` ГДЕ ЧТО ХРАНИТСЯ:

Устройство родителя: ├── Приватный ключ WebAuthn (Secure Enclave / TEE) ├── Визуальная подпись (временно, до отправки) └── Ничего после закрытия браузера

Сервер (Supabase): ├── PostgreSQL: School, Teacher, Class, Parent (метаданные), Document, │ DocumentRecipient, SigningRecord, WebAuthnCredential (публичный ключ), │ FormTemplate, FormSubmission │ ├── Supabase Storage: │ ├── /documents/{doc_id}/original.pdf │ ├── /documents/{doc_id}/printable/{recipient_id}.pdf │ └── /documents/{doc_id}/signed/{recipient_id}.pdf │ └── НЕ ХРАНИТСЯ НА СЕРВЕРЕ: ├── Приватные ключи WebAuthn ├── Визуальная подпись (PNG) — удаляется после встраивания в PDF ├── Email родителей в открытом виде (только SHA-256 хеш) ├── IP-адреса (только SHA-256 хеш, авто-удаление через 30 дней) └── Биометрические данные (никогда не покидают устройство) ```


7. Что НЕ входит в MVP

Категорически исключено из MVP:

Функция Причина исключения Когда появится
Нативное мобильное приложение (iOS/Android) PWA достаточно для MVP. Разработка нативных приложений — 2x времени соло-основателя. M7-9 (при 50+ школ, если будет запрос)
Регистрация / аккаунт для родителей Противоречит УТП («без аккаунта»). Родитель идентифицируется через уникальный recipient_token в QR-коде. Никогда (архитектурное решение)
CSV-импорт списков учеников Lehrer вводит учеников вручную (5-10 минут на класс из 28 человек). Для пилота из 2-5 классов — приемлемо. M4 (первый фича-релиз после пилота)
Шаблоны документов для Lehrer Каждый Elternbrief загружается как PDF — Lehrer использует свои Word/Canva-шаблоны. M5
Интеграция с Schulverwaltungssystemen (Untis, IServ, WebUntis) Каждая интеграция — месяцы разработки. Нет смысла до первых 20 школ. M12+
Интеграция с EUDI Wallet (eIDAS 2.0) Технология в стадии развёртывания в ЕС (2026-2027). Не для MVP. M18+ (по факту adoption)
QES (Qualified Electronic Signature) через TSP SES достаточно для 80%+ школьных документов. QES требует интеграции с D-Trust/Swisscom. M12+
Offline-подписание Устройство должно быть онлайн для верификации токена и WebAuthn challenge. Не планируется (архитектурное ограничение)
Мультиязычность (EN, FR, IT) Только немецкий. DACH-рынок, школы в Германии говорят по-немецки. M8 (по запросу из CH)
White-label / кастомизация бренда школы Каждая школа видит стандартный stimmt's-интерфейс. M10
Автоматические email/SMS-напоминания родителям Требует хранения контактов родителей в открытом виде (email, телефон). MVP: Lehrer получает текст напоминания и отправляет сам. M5 (когда решим модель хранения контактов)
Родительский кабинет с историей Нет аккаунта = нет истории. Каждый Elternbrief — отдельная сессия. Не планируется (архитектурное ограничение)
Мобильное приложение для Lehrer Lehrer работает через десктопный веб (школьный ноутбук/PC). Мобильный Lehrer — post-MVP. M8
Расширенная форма Anmeldeformular (conditional logic, расчёт стоимости) Только простые поля (текст, выбор, дата). M8
API для третьих лиц Закрытая система. M12+
Расширенная аналитика для Schulleitung Только базовый статус в Lehrer-дашборде. M6
Интеграция с платежами (оплата Musikschule) Только подписание и сбор данных. Оплата — вне системы. M12+
SCORM / экспорт для Schulamt Аудит-трейл только в PDF и CSV. M10

Границы MVP — одним предложением:

Lehrer вручную управляет классами и создаёт Elternbriefe через веб-дашборд; родители подписывают через PWA без аккаунта; школа получает подписанные PDF с аудит-следом. Всё.


8. Success Metrics

8.1. Пилотная фаза (M1-M3, 2-5 школ)

Метрика Цель Как измеряем
Signing Completion Rate >80% родителей подписывают в течение 3 дней Считаем: signed / total_recipients для каждого документа, медиана по всем документам
Parent Open Rate >90% сканируют QR и открывают PWA Событие opened / total_recipients
Technical Error Rate <5% попыток подписания завершаются ошибкой События signing_started с переходом в signed vs без перехода
WebAuthn Success Rate >95% успешных WebAuthn-аутентификаций Успешные / всего попыток WebAuthn
Lehrer Time Saving >50% меньше времени на отслеживание подписей (qualitative) Опрос Lehrer до/после
Lehrer NPS >30 NPS-опрос после 1 месяца использования
Parent Satisfaction >80% предпочитают stimmt's бумаге Опрос родителей (через Lehrer)
Time to Sign (Median) <3 минуты от сканирования QR до подписания Разница signed.timestamp - opened.timestamp
Document Creation Time <3 минуты на создание Elternbrief Засекаем от клика «Neuer Elternbrief» до «Erstellen»

8.2. MVP-фаза (M4-M7, 10-30 школ)

Метрика Цель Как измеряем
Weekly Signed Documents per School (WSDpS) >20 COUNT(signed) / неделя / школа
Monthly Active Teachers (MAT) >80% Lehrer используют хотя бы 1 раз в месяц Уникальные teacher_id с document.created_at в месяце
School Retention (Semester) >80% школ продолжают использование во втором семестре Школы активные в Sem1 И активные в Sem2
Document Completion Rate >85% документов достигают >90% подписаний Документы где signed/total > 0.9
Time to First Sign <2 часа от создания документа до первой подписи Первое signed_at минус document.created_at
Repeat Usage >70% Lehrer создают 3+ документов в месяц Lehrer с ≥3 документами / все Lehrer с ≥1
Churn Risk Indicator <15% Lehrer с 0 документов за последние 30 дней Lehrer без активности 30 дней / активные Lehrer
Server Uptime 99.5% (пиковые часы: будни 18-22, выходные 10-14) Uptime Robot
Support Tickets per School <1 тикет/школа/месяц Тикеты (email от Lehrer) / школы / месяц

8.3. Growth-фаза (M8-M12)

Метрика Цель
WSDpS >40
Платящие школы 50+
MAT >85%
School Retention (Jahr) >75% остаются на второй год
Parent NPS >40
Time to Sign (P90) <5 минут (худшие 10%)
Customer Acquisition Cost Определяется PM-панелью
Lifetime Value Определяется PM-панелью

9. Pricing (Варианты — без жёстких цифр)

Статус: Модель ценообразования определяется Product Manager панелью. Ниже — варианты для анализа.

Вариант A: Per-Class (Fokus: Lehrer-бюджет)

  • Школа платит за каждый класс, использующий stimmt's
  • Цена: за класс / месяц или за класс / Schuljahr
  • Плюсы: Lehrer может оплатить из Klassenkasse без участия Schulleitung. Низкий порог входа. Растёт organisch: 1 Lehrer → его Kollegen → вся школа.
  • Минусы: Сложно прогнозировать доход. Школа может иметь 30 классов, но использовать только 2.
  • Подходит для: Пилот и ранний рост через Lehrer-бюджет.

Вариант B: Per-School (Fokus: Schulleitung)

  • Школа платит фиксированную сумму за всю школу
  • Цена: за школу / месяц или Schuljahr, зависит от числа учеников
  • Плюсы: Предсказуемый доход. Проще для Schulleitung (один договор). Мотивирует полный adoption.
  • Минусы: Высокий порог входа. Требует решения Schulleitung / Schulträger. Долгий цикл продажи (3-12 месяцев).
  • Подходит для: Schulen с >75% adoption, контракты на уровне Schulleitung.

Вариант C: Freemium (Fokus: вирусный рост)

  • Бесплатно: первые 2 класса на школу
  • Платно: дополнительные классы
  • Плюсы: Нулевой барьер для Lehrer. Быстрый рост пользовательской базы. Lehrer доказывает ценность Schulleitung на бесплатном тире.
  • Минусы: Бесплатные пользователи — затраты на инфраструктуру. Конверсия в платящих может быть низкой.
  • Подходит для: Фаза пилота и MVP (M1-M7).

Вариант D: Per-Signature (Fokus: переменные издержки)

  • Школа платит за каждую подпись
  • Цена: за подпись или пакет подписей
  • Плюсы: Справедливо для маленьких школ. Платишь за использование. Легко объяснить.
  • Минусы: Непредсказуемый счёт для школы. Сложно бюджетировать. Школа видит каждую подпись как затрату → демотивирует использование.
  • Подходит для: Musikschulen с сезонным потоком (семестровые Anmeldungen).

Вариант E: Комбинация (рекомендовано к анализу)

  • Фаза 1 (M1-M7): Freemium. 2 класса бесплатно. Платные классы — per-class.
  • Фаза 2 (M8+): Per-school для школ с >10 классов. Per-class для остальных. Per-signature для Musikschulen с сезонным потоком.

Принципы ценообразования (для PM-панели):

  1. Lehrer должен иметь возможность оплатить из Klassenkasse (€200-400/год на класс) — без согласования со Schulleitung.
  2. Цена должна быть ниже, чем затраты времени Lehrer на бумажный процесс (5 часов/месяц × €30/час = €150/месяц скрытых затрат).
  3. Freemium на старте снижает барьер для Lehrer-нетворка основателя.
  4. Нулевые затраты на привлечение в Lehrer-канале (основатель = Lehrer, личный нетворк).
  5. Цена не должна быть препятствием для adoption. Лучше 100 школ по €X, чем 5 школ по €10X.

10. Open Questions (для PM-панели)

# Вопрос Важность Затрагивает
OQ-1 Достаточен ли WebAuthn SES для юридической силы Elternbrief-подписей в немецких Schulen? Нужна ли экспертиза Schulrecht? Критическая Юридическая состоятельность продукта
OQ-2 Как именно работает Lehrer-бюджет (Klassenkasse) в разных Bundesländern? Есть ли ограничения на цифровые сервисы? Высокая Pricing, GTM
OQ-3 Нужен ли AVV-договор (Auftragsverarbeitung) для каждой школы ИЛИ достаточно стандартных условий? Высокая Onboarding, Legal
OQ-4 Модель ценообразования — per-class / per-school / freemium / комбинация? Высокая Бизнес-модель
OQ-5 Хранение email родителей: SHA-256 хеш достаточно для функциональности напоминаний? Или нужен открытый email? Высокая Datenschutz, функциональность
OQ-6 Как Schulen сейчас решают проблему подписания Elternbriefe? Используют ли уже какие-то цифровые инструменты? Средняя Позиционирование
OQ-7 Готовы ли Eltern подписывать пальцем на экране? Или ожидают стилус/печатную подпись? Средняя UX подписи
OQ-8 Нужна ли печатная копия подписанного PDF Lehrer для Ordner? Или цифровой PDF достаточен? Средняя Фича «печать Lehrer»
OQ-9 Какие типы школьных документов ТОЧНО требуют Schriftform (письменной формы) и не могут использовать SES? Средняя Границы применимости
OQ-10 Должен ли родитель иметь возможность отозвать подпись (до дедлайна)? Низкая UX
OQ-11 Нужна ли интеграция с Elternabend-инструментами (Doodle, Terminfindung)? Низкая Роадмап
OQ-12 Могут ли mehrere Eltern подписывать один документ (при совместной опеке)? Низкая Фича multi-sign

11. Роадмап (концептуальный, для PM-панели)

Phase 0: Pre-Pilot (M0, 2-4 недели)

  • Интервью с 5 Lehrer из нетворка основателя (боли, текущий процесс, готовность платить)
  • Landing page: stimmts.app (описание, сбор waitlist)
  • Технический spike: PWA + WebAuthn + pdf-lib — proof of concept (1 Elternbrief → подпись → PDF)
  • Выбор модели ценообразования (PM-панель)
  • Gate: 5 Lehrer подтвердили готовность участвовать в пилоте → GO

Phase 1: Pilot (M1-M3)

  • MVP-разработка (соло, Claude Code)
  • Пилот: 2-5 школ из нетворка основателя
  • Только Elternbrief-поток (не Musikschule)
  • Ручное onboarding каждого Lehrer (основатель лично)
  • Сбор метрик, багов, фидбека
  • Gate: Completion rate >80%, Lehrer NPS >30, нет критических багов → GO to MVP launch

Phase 2: MVP Launch (M4-M7)

  • Расширение до 10-30 школ (Lehrer-нетворк + сарафанное радио)
  • Musikschule-модуль (Anmeldeformular)
  • Автоматический onboarding (без участия основателя)
  • Базовый биллинг
  • Gate: 10+ платящих школ, churn <10%

Phase 3: Growth (M8+)

  • 50+ школ
  • CSV-импорт, шаблоны, email-напоминания
  • Интеграции: первые 1-2 Schulverwaltungssysteme
  • QES для документов со Schriftformerfordernis
  • Gate: Устойчивый MRR, основатель может нанять первого разработчика

12. Риски и митигация

Риск Вероятность Влияние Митигация
Eltern не готовы подписывать через PWA (предпочитают бумагу) Средняя Высокое Пилот покажет реальную adoption rate. При <50% — добавить альтернативный поток (бумажное подписание с ручным вводом Lehrer)
WebAuthn слишком сложен для нетехнических родителей Средняя Среднее Fallback: PIN (WebAuthn user verification) вместо биометрии. Инструкция с картинками на экране
Школы требуют QES (юридически) Низкая Критическое Юридическая экспертиза ДО разработки. Определить точный перечень документов, где SES достаточен
Schulträger блокирует использование (Datenschutz-Bedenken) Средняя Среднее Вход через Lehrer-бюджет (не требует согласования). AVV и DPIA-документация для Datenschutzbeauftragter
Конкуренты добавляют «без аккаунта»-режим Низкая Среднее Скорость выполнения. Основатель = Lehrer = быстрее понимает потребности. Нишевый фокус на Elternbriefe
Соло-основатель не справляется с поддержкой при 30+ школах Средняя Высокое Автоматический onboarding. FAQ/help в интерфейсе. Чат-поддержка только для платящих. При 30 школах — нанять Teilzeit-Support
Технический долг из-за скорости разработки (Claude Code) Средняя Среднее Рефакторинг между фазами (запланирован в роадмапе). Монорепо, минимум микросервисов.

13. Заключение

stimmt's — нишевый продукт для конкретной, хорошо понятной основателю проблемы: цифровизация Elternbrief-подписания в немецких школах.

Ключевые отличия от конкурентов: - Нет аккаунта для родителей - Нет установки приложения - Datenschutz через data minimization (подпись только на устройстве) - Вход через Lehrer-бюджет (минуя Schulträger) - Основатель = Lehrer (инсайдерские знания, нетворк)

Главный риск MVP — adoption родителями. Пилот из 2-5 школ покажет реальную готовность Eltern использовать PWA для подписания. Если completion rate < 80% — продукт требует доработки UX, а не смены концепции.

Архитектурный принцип — простота. Монолит, минимум сервисов, PWA вместо нативных приложений. Соло-основатель с Claude Code должен быть способен построить и поддерживать MVP в одиночку.

Следующий шаг: Product Manager панель (VeriChain #05) — определение модели ценообразования, приоритизация фич MVP, детальный план первых 4 недель разработки.


PRD составлен: 2026-06-30 Версия: 1.0 — Pre-MVP Следующая панель VeriChain: #05 Product Manager