Files
notes-qpid-pro/PLAN.md
T

112 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План развития и архитектурная дорожная карта: Study Qpid (study.qpid.pro)
> **Принцип проектирования**: *«Работает как автомат Калашникова»* — сверхнадёжно, мгновенно, полностью автономно, защищено для публичного интернета, без раздутых зависимостей и без привязки к платным внешним API.
---
## 1. Архитектура системы
Сервис разворачивается в Docker-окружении на защищённом сервере за Nginx с SSL Let's Encrypt (`study.qpid.pro`).
```
┌─────────────────────────────────────────────────────────────┐
│ study.qpid.pro │
│ Nginx (HTTPS / Let's Encrypt / Security Headers) │
└──────────────────────────────┬──────────────────────────────┘
│ proxy_pass 127.0.0.1:8002
┌──────────────────────────────▼──────────────────────────────┐
│ Docker Container: study-qpid-pro │
│ │
│ • FastAPI Lifespan & Security Middlewares (GZip, Headers) │
│ • Модульные APIRouters (auth, cards, srs, reader, etc.) │
│ • SQLite WAL + mmap I/O (транзакции, 0.01ms чтение) │
│ • Локальный Piper Neural TTS (чистый нативный голос VITS) │
│ • Вынесенные JSON-датасеты (data/seeds/) │
│ • Модульные CSS-стили (7 предметных таблиц + PWA SW v6.7) │
└──────────────────────────────┬──────────────────────────────┘
│ http://ollama:11434 (Keep-Alive 120s)
┌──────────────────────────────▼──────────────────────────────┐
│ Docker Container: study-ollama │
│ • Qwen 2.5 3B Instruct (контекстный перевод предложений │
│ и педагогический дебрифинг уроков) │
└─────────────────────────────────────────────────────────────┘
```
---
## 2. Реализованные этапы развития (Completed Roadmap)
### ✅ Этап 1: Защищённое ядро (MVP) и базовый словарь
- [x] Авторизация на сессионных куках (`HttpOnly`, `SameSite=Lax`, `Secure`).
- [x] Хэширование паролей `PBKDF2-HMAC-SHA256` с уникальной солью на пользователя.
- [x] Rate limiting для предотвращения атак перебором.
- [x] Офлайн-словарь (140k+ записей) с каскадным переводом.
- [x] Сохранение слов с контекстным предложением и горячими клавишами (`Ctrl+Enter`).
- [x] Журнал личного словаря, поиск, фильтрация по тегам и коллекциям.
### ✅ Этап 2: Организация, экспорт и PWA
- [x] Коллекции и теги, разбивка слов по категориям.
- [x] Пакетные операции над карточками (массовое перемещение, удаление, добавление тегов).
- [x] Экспорт данных в форматы: CSV, JSON, Anki TSV и Markdown.
- [x] PWA-манифест и Service Worker для офлайн-доступа к приложению.
### ✅ Этап 3: Алгоритм интервальных повторений (SRS SM-2) и тренажер
- [x] Реализация математической модели SuperMemo SM-2 (Ease Factor, Repetitions, Intervals).
- [x] 3D-флип карточки с градацией оценок (Снова, Трудно, Хорошо, Легко).
- [x] Режим Smart Quiz (выбор из 4 вариантов с дистракторами из той же части речи).
- [x] Режим активного ввода (Active Typing) с набором английского слова по русскому переводу.
- [x] Smart Daily Mix: сбалансированная подборка (10 новых + 10 повторов + 5 проблемных слов).
- [x] Детекция проблемных слов (Leeches) и повторный фокус на них.
- [x] Аналитика: календарь активности (Heatmap 180 дней), стрик дней, процент удержания (Retention Rate), оценка уровня CEFR.
### ✅ Этап 4: Интерактивная читалка и книжная полка
- [x] Поддержка книг и документов: EPUB, PDF, TXT, Markdown (`.md`).
- [x] Автоматический сборщик стандартов IETF RFC по номеру или URL.
- [x] Интеграция с Wikipedia: автономная загрузка статей с очисткой верстки под тайм-бюджет.
- [x] Интерактивный клик-перевод каждого слова с выводом контекста.
- [x] Добавление слова и цитаты в словарь в 1 клик прямо из текста.
- [x] Непрерывное чтение (continuous scroll) с карточками перехода между главами.
- [x] Темы оформления (Light, Dark, Sepia, Night, Parchment, Hacker) и типографика.
### ✅ Этап 5: Автономный локальный ИИ (Ollama) и нейро-озвучка (Piper)
- [x] Развертывание локального контейнера Ollama с моделью `qwen2.5:3b`.
- [x] Контекстный перевод предложений с учетом целевого слова и сохранением в кэш SQLite.
- [x] Локальный VITS-синтез речи Piper TTS (US Lessac, RU Dmitri) с нулевой задержкой.
- [x] Фоновое пред-кэширование произношения слов и предложений при добавлении в словарь.
- [x] Тренажёр аудирования (Listening) с проверкой понимания.
### ✅ Этап 6: Грамматика Murphy & Тестирование CEFR
- [x] 260 интерактивных заданий Cloze Tap по международным уровням A1–B2.
- [x] Автоматическая gap-ингестия: отправка ошибочных слов из тестов в активный тренажёр SRS.
- [x] Фоновый воркер майнинга тестов из загруженной литературы.
- [x] 15 базовых юнитов грамматики Murphy с формулами и теорией.
- [x] Синхронизация с рукописным бумажным конспектом.
### ✅ Этап 7: Конструктор комплексного урока & Сессионный раннер
- [x] Единый конструктор ежедневного урока: блоки слов (Flashcards/Quiz/Typing/Dictation), грамматики, аудирования, чтения.
- [x] Встроенные готовые шаблоны (Экспресс, Сбалансированный, Глубокий, Аудио+Чтение).
- [x] Адаптивный подбор темы грамматики («Самая слабая тема по ошибкам», «Предыдущая тема»).
- [x] Сквозная телеметрия ошибок сессии и интеллектуальный ИИ-дебрифинг от Qwen 2.5 3B.
- [x] Детерминированный фолбэк для мгновенного завершения сессии при выключенной Ollama.
### ✅ Этап 8: Глубокий технический рефакторинг и оптимизация (Beta-refactor)
- [x] **Этап 1 рефакторинга**: Удаление мертвого кода (`parse_text`), оптимизация SQL в фоновых задачах.
- [x] **Этап 2 рефакторинга**: Вынос 3 100+ строк захардкоженных датасетов в `data/seeds/*.json`.
- [x] **Этап 3 рефакторинга**: Keep-Alive пул соединений для Ollama (120s), офлайн-лемматизация в словаре.
- [x] **Этап 4 рефакторинга**: Модуляризация бэкенда (`app/main.py` сокращён с 2 240 до 142 строк, создано 11 APIRouters).
- [x] **Этап 5 рефакторинга**: Модуляризация CSS (`style.css` 8 746 строк разделен на 7 предметных файлов, обновлён прекэш SW v6.7).
- [x] 100% покрытие авто-тестами: 44/44 тестов проходят в Docker.
---
## 3. Ближайшие планы и вектор развития (Future Enhancements)
1. **Браузерный букмарклет для захвата слов**:
- Минималистичный JS-скрипт для браузера, позволяющий по клику отправить выделенное слово и контекст страницы в личный словарь `study.qpid.pro`.
2. **HTML5 Web Speech API fallback**:
- Дополнительный запасной канал озвучивания через встроенный `window.speechSynthesis` при мобильном режиме без связи.
3. **Расширение библиотеки Murphy**:
- Постепенное расширение учебных юнитов грамматики с 15 до 30+ тем (Passive Voice, Reported Speech, Phrasal Verbs in Context).
4. **Адаптивные интервалы по времени суток**:
- Учёт утренних и вечерних окон повторения в сессионном раннере для максимальной концентрации.