CalmSpace — техническое описание

0. Бизнес-цели и успех (обязательно)

  • Цель бизнеса (12–24 мес): Заполнить расписание специалиста на 80% (25–30 консультаций в неделю) и сформировать лист ожидания за 12 мес.
  • Кто платит vs кто пользуется: Платит психолог (частная практика); пользуются взрослые клиенты и пары.
  • Ценность для пользователя (одной фразой): Спокойно выбрать формат консультации и записаться, понимая подход, цену и правила конфиденциальности.
  • KPI успеха v1 (3–7 измеримых):
    • ≥ 40 заявок на первичную консультацию в месяц
    • Конверсия сайта в заявку ≥ 3%
    • Доля пакетных покупок ≥ 30%
    • Доля отмен ≤ 10%
    • Время до первого ответа на заявку ≤ 24 ч
  • Монетизация / экономика: Оплата консультаций: индивидуальная 4 500 ₽, парная 6 500 ₽, пакеты из 5 и 10 встреч со скидкой.
  • Go-to-market: Профили на агрегаторах (Ясно, Zigmund, b17), Telegram-канал с полезными постами, рекомендации коллег, контекстная реклама по городу.
  • SEO / контент / маркетинг в v1: Страницы «психолог онлайн», «семейный психолог [город]», «консультация психолога цена»; статьи о формате работы; микроразметка Person/ProfessionalService и FAQ.
  • Конкуренты / аналоги (1–3) и отличие: Ясно, Zigmund.Online, сайты частных психологов на Tilda. Отличие: личный бренд, прозрачные цены и правила, бережная запись без анкет о «симптомах».
  • Анти-цели v1: Не ставим диагнозы, не обещаем «излечение», не делаем экстренную помощь, онлайн-тесты и видеосвязь внутри сайта в v1.

1. Название и суть

  • Название проекта: CalmSpace — сайт практикующего психолога
  • Одной фразой: Бережный сайт-визитка психолога с услугами, подходом, ценами и онлайн-записью.
  • Для кого: Взрослые 25–45 лет и пары, которые ищут психолога для работы с тревогой, отношениями, выгоранием и жизненными изменениями.
  • Проблема: Человеку трудно решиться на первую встречу: непонятно, как проходит работа, сколько стоит и безопасно ли делиться личным.
  • Связь с §0: каждый сценарий v1 ведёт к KPI конверсии и измеряется целями в аналитике.

2. Границы

IN SCOPE (обязательно в v1):

  • Hero с мягким оффером и CTA «Записаться на знакомство»
  • Услуги: индивидуальная, парная, онлайн-консультация
  • О специалисте: образование, супервизия, членство в профсообществе
  • Подход: как проходят встречи, правила конфиденциальности, этический кодекс
  • Цены и пакеты
  • Форма записи: формат, удобное время, способ связи — без вопросов о диагнозе
  • FAQ и блок «Если вам нужна срочная помощь» с телефонами доверия
  • Админка: заявки и статусы

OUT OF SCOPE:

  • Видеосвязь внутри сайта
  • Онлайн-тестирование и диагностика
  • Медицинские услуги и назначения
  • Мобильное приложение

Позже (v2+):

  • Онлайн-оплата пакетов
  • Календарь свободных слотов с синхронизацией Google Calendar
  • Блог
  • Напоминания в Telegram

3. Стек

  • Frontend: React 19 + Vite (продакшен); макет — чистый HTML/CSS/JS без сборки
  • Стили UI: CSS Modules / собственная дизайн-система по INPUT/DESIGN.html
  • Backend: Node.js 20 LTS + Express
  • БД OLTP: PostgreSQL 16
  • Аналитика / OLAP: Яндекс Метрика; OLAP не требуется в v1
  • Кэш / очереди / observability: не требуется в v1; логи pino, uptime-мониторинг
  • Хостинг / облако: VPS в РФ (Timeweb Cloud / Selectel), Nginx, Docker Compose
  • Монолит / модульный монолит / сервисы: модульный монолит

4. Ключевые сценарии

  1. Посетитель читает раздел «Подход», выбирает «Индивидуальная онлайн», указывает удобное время «будни вечер» и Telegram для связи — получает подтверждение.
  2. Пара выбирает пакет из 5 парных встреч и оставляет заявку на знакомство.
  3. Психолог открывает админку, видит заявку и отмечает «связались, назначена встреча».

5. Сущности и данные

СущностьПоля (примерно)СвязиЗаметки
Requestid, name, contact, contact_method, format, preferred_time, comment, consent_at, statusN:1 ServiceКомментарий необязателен, без полей о симптомах
Servicetitle, format, duration_min, price1:N Requestindividual/couple/online
Packagetitle, sessions_count, price, discount—Статичный контент v1
Faqquestion, answer, sort—Редактируется в админке

6. Интеграции

  • Telegram Bot API — уведомление специалисту
  • SMTP — подтверждение клиенту
  • Яндекс Метрика — цель «request_sent» (без передачи содержимого формы)

7. Нефункциональные требования

  • Ожидаемая нагрузка: До 3 000 посетителей и 150 заявок в месяц
  • Latency / доступность: TTFB < 300 мс, LCP < 2,5 с на mobile, доступность 99,5%
  • Retention EventLog / evidence / audit: логи 30 дней, заявки/заказы 3 года, бэкап БД ежедневно с хранением 14 дней
  • Compliance: 152-ФЗ: согласие на обработку ПД, минимизация данных (не собираем сведения о здоровье), политика конфиденциальности; этика: без диагнозов и медицинских обещаний, психологическая помощь не является медицинской

8. Безопасность

  • Без регистрации для посетителей; админка один пользователь по JWT; комментарии заявок не попадают в логи и аналитику; rate-limit и капча.
  • HTTPS (Let's Encrypt), helmet, CSP, валидация входных данных на сервере, секреты в .env вне репозитория.

9. UX / клиенты

  • Web, mobile-first; спокойная типографика, крупные отступы, без агрессивных поп-апов.
  • Доступность: контраст AA, фокус-состояния, подписи полей форм.

9b. Дизайн

  • HTML-референс: INPUT/DESIGN.html (картинки в INPUT/assets/, описания в INPUT/assets/DESCRIPTIONS.md)

9c. CI/CD и окружения

  • Окружения: local / ci / staging / production
  • CI: GitHub Actions — lint, тесты, сборка Docker-образа; деплой на staging по merge в main, на production по тегу
  • Хостинг: VPS в РФ, Docker Compose, Nginx reverse proxy

10. Ограничения

  • Язык кода: TypeScript (strict) на фронте и бэке; автотесты Vitest + Playwright для ключевых сценариев
  • Запрещённые практики: хранение секретов в репозитории, ПД в логах, inline-SQL без параметров

11. Готовые модули

  • logging-pino
  • rate-limiting
  • caching-redis
  • auth-jwt
  • websocket-socketio
  • admin-panel
  • file-upload
  • crud-table
  • payments-stripe
  • search
  • email-nodemailer

12. Критерии приёмки v1

  • На сайте нет формулировок «вылечу», «диагноз», «гарантирую результат»
  • Форма не содержит обязательных полей о проблеме или здоровье
  • Блок срочной помощи с телефонами доверия доступен с главной
  • Заявка приходит в Telegram за < 10 с без текста комментария в логах
  • Отправка невозможна без согласия на обработку ПД
  • Корректное отображение 360–1920 px

13. Свободные заметки

Проект Webcraftly

Нужен такой же продукт?

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