M

Clear Speech: Дневник разработки

Личный блог Михаила о том, как строится платформа логопедии с блэкджеком и WebRTC.

Запись #1: Философия

Почему я вообще в это ввязался?

Всем привет, я Михаил. Последние полгода я живу проектом Clear Speech ("Чистая Речь"). Казалось бы, зачем еще одна обучалка? Но проблема глубже. Традиционная логопедия застряла где-то в 90-х: детские центры, неловкость для взрослых и полное отсутствие цифр.

[cite_start]"Мы строим Гибридную платформу, где рутина отдана алгоритмам, а эмпатия и экспертиза — людям." [cite: 42]
[cite_start]

Я делаю ставку на взрослую аудиторию (20–45 лет) — менеджеров, спикеров, тех, кому важна карьера[cite: 32]. Им нужен не "добрый доктор Айболит", а инструмент: конфиденциальный, быстрый и технологичный. [cite_start]Мы назвали это Adult-Oriented UX[cite: 31]. Никаких цветочков, только метрики прогресса.

Запись #2: Архитектура

Монолит, Сателлиты и Jitsi

Долго спорили с коллегами по поводу архитектуры. Микросервисы сейчас в моде, но для нашего этапа это оверхед. [cite_start]Решили остановиться на гибридной схеме: модульный монолит на Python (FastAPI) в центре, а видео и AI вынесли в отдельные сервисы-сателлиты[cite: 9, 10].

Python 3.11 FastAPI PostgreSQL 16 Redis 7 Docker Jitsi Meet

Самое интересное решение — видеосвязь. [cite_start]Мы отказались от Zoom SDK в пользу Self-hosted Jitsi Meet[cite: 12]. [cite_start]Причина проста: Privacy First[cite: 29]. Мы не хотим, чтобы видеопотоки уходили третьим лицам. [cite_start]Бэкенд генерирует JWT-токены с правами модератора для учителей, и всё это крутится внутри нашего Docker-контура[cite: 13, 23].

Кстати, всё это сейчас работает на сервере, с которого вы это читаете. [cite_start]Nginx раздает статику React'а и проксирует запросы на Uvicorn[cite: 23].

Запись #3: Деньги и Логика

Кошмар с расписанием и "правило 24 часов"

Написать видеочат — это полдела. Настоящая боль началась, когда мы взялись за биллинг. [cite_start]У нас модель маркетплейса: клиент платит платформе, мы холдируем средства и выплачиваем логопедам дважды в месяц (1-го и 15-го числа)[cite: 7, 16].

Самый сложный кусок логики — бронирование слотов. Когда ученик выбирает время, создается урок со статусом reserved. Если он не оплатит его, бронь висит мертвым грузом.

Пришлось писать отдельный Cron-воркер, который чистит базу:

# Упрощенная логика из ARCHITECTURE.txt if lesson.status == 'reserved' and time_to_lesson < 24h: cancel_reservation(lesson.id) [cite_start]notify_users() # [cite: 6, 17]

Также реализовали "кошельки" внутри системы. У каждого логопеда есть pending_balance (холд) и основной баланс. [cite_start]Комиссию платформы (30%) вычитаем сразу при проводке урока[cite: 3, 15].

Запись #4: Планы

AI и Взгляд в будущее

Сейчас мы на этапе MVP. [cite_start]Видео работает, платежи ходят через ЮKassa [cite: 1][cite_start], админка на React [cite: 21] позволяет управлять пользователями.

[cite_start]

Но моя главная цель — AI Worker[cite: 13]. Я хочу сделать тренажеры для домашки, где нейросеть (Whisper + LLM) будет слушать ученика и давать мгновенный фидбек. [cite_start]А в идеале — AR-зеркало, которое накладывает маску на лицо и показывает, как правильно ставить язык[cite: 41].

Работы непочатый край. [cite_start]Если сервер иногда подтормаживает — это Celery переваривает очередную партию аудио[cite: 14].