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. Ключевые сценарии
- Посетитель читает раздел «Подход», выбирает «Индивидуальная онлайн», указывает удобное время «будни вечер» и Telegram для связи — получает подтверждение.
- Пара выбирает пакет из 5 парных встреч и оставляет заявку на знакомство.
- Психолог открывает админку, видит заявку и отмечает «связались, назначена встреча».
5. Сущности и данные
| Сущность | Поля (примерно) | Связи | Заметки |
|---|---|---|---|
| Request | id, name, contact, contact_method, format, preferred_time, comment, consent_at, status | N:1 Service | Комментарий необязателен, без полей о симптомах |
| Service | title, format, duration_min, price | 1:N Request | individual/couple/online |
| Package | title, sessions_count, price, discount | — | Статичный контент v1 |
| Faq | question, 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
Нужен такой же продукт?
Сайт психолога: форматы консультаций, цены, этичная запись без вопросов о диагнозе.