# План развития проекта Notes (notes.qpid.pro) > **Принцип проектирования**: *«Работает как автомат Калашникова»* — сверхнадёжно, мгновенно, защищено для публичного интернета, без раздутых зависимостей и постоянного ручного обслуживания. --- ## 1. Архитектура и защита системы Сервис разворачивается на публичном сервере с белым IP (`31.77.203.213`). Вся система проектируется с учётом сетевой безопасности и изоляции личных данных. ``` ┌─────────────────────────────────────────────────────────────┐ │ notes.qpid.pro │ │ Nginx (HTTPS / Let's Encrypt / Security Headers) │ └──────────────────────────────┬──────────────────────────────┘ │ proxy_pass :8002 ┌──────────────────────────────▼──────────────────────────────┐ │ Слой безопасности (Auth) │ │ • Аутентификация: сессионные токены (HTTP-only cookies) │ │ • Хэширование паролей: PBKDF2-HMAC-SHA256 (соль + 100k) │ │ • Защита от перебора (Rate Limiter: макс 5 попыток/мин) │ │ • Закрытый доступ: все эндпоинты требуют авторизации │ └──────────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────────▼──────────────────────────────┐ │ Backend: Python 3.12 │ │ FastAPI / Uvicorn + SQLite (WAL mode) + Dictionary APIs │ └──────────────────────────────┬──────────────────────────────┘ │ ┌───────────────────────┴───────────────────────┐ ▼ ▼ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │ Внешние открытые API │ │ Локальная БД SQLite │ │ • Free Dictionary API │ │ • users (аккаунт, пароль) │ │ (IPA, audio, definitions) │ │ • vocabulary_cards │ │ • MyMemory / Translation │ │ • sessions (активные входы) │ │ (русский перевод фразы) │ │ • tags & categories │ └─────────────────────────────┘ └─────────────────────────────┘ ``` ### Выбор технологий: - **Безопасность**: Защищённые сессии (Signed HTTP-only cookie `SameSite=Lax`, `Secure`). Защита от CSRF, XSS и брутфорс-атак через встроенный rate limiter. - **Backend**: Python 3.12 + FastAPI (асинхронный, легковесный, моментальный старт). - **База данных**: SQLite в режиме `WAL` (Write-Ahead Logging). Идеальная транзакционная надежность, автономность, бэкап в один файл. - **Frontend**: Чистый Vanilla ES6+ / Modern CSS / HTML5. Мгновенная загрузка (< 50 мс), оффлайн-кэш, адаптивность (смартфон + десктоп), поддержка хоткеев. - **Внешние API (Zero-cost & Open)**: 1. *Free Dictionary API* (`api.dictionaryapi.dev`): фонетическая транскрипция IPA, аудио-произношение нативных дикторов (US/UK), части речи, толкования и примеры. 2. *MyMemory Translation API*: литературный перевод фраз, идиом и предложений на русский язык. --- ## 2. Этапы реализации (Roadmap) ### Этап 1 (Текущая итерация): Безопасное ядро (MVP) — Общий английский, перевод и фиксация *Цель: создать защищённый, сверхбыстрый и надёжный персональный словарь для повседневного и профессионального английского языка.* - [x] **1.1. Модуль защиты и авторизации**: - Страница авторизации (минималистичный дизайн, вход по логину и паролю). - Защита всех API эндпоинтов: неавторизованные запросы блокируются (`401 Unauthorized`). - Надежное хранение паролей в SQLite (`PBKDF2-HMAC-SHA256` с уникальной солью). - Rate Limiter на эндпоинт `/api/login` (не более 5 неудачных попыток в минуту с IP). - Сессии через зашифрованные `HttpOnly` cookie. - Кнопка «Выйти из аккаунта» в шапке сервиса. - [x] **1.2. Быстрый поиск и каскадный перевод (General & Idiomatic English)**: - Строка поиска в фокусе сразу при открытии страницы. - Поддержка любых форм языка: - Отдельные слова (существительные, глаголы, прилагательные); - Фразовые глаголы (*run into*, *figure out*, *call off*); - Идиомы и разговорные фразы (*once in a blue moon*, *take for granted*); - Предложения целиком (из книг, сериалов, документации). - Автоматическое получение: - Фонетической транскрипции (IPA); - Нативного аудио-произношения (US/UK); - Частей речи и толкования на английском; - Русского перевода. - Кэширование словарных запросов в локальной базе для мгновенных повторных ответов. - [x] **1.3. Контекстное сохранение слова в 1 клик**: - Горячие клавиши: - `Enter` — мгновенный перевод; - `Ctrl + Enter` (или `Cmd + Enter`) — мгновенное сохранение в словарь; - `Esc` — очистить ввод; - `Ctrl + P` или клик на динамик — прослушать произношение. - Возможность подправить перевод перед сохранением под свой контекст. - Поле для ввода контекстного предложения (где встретилось слово/выражение). - Выбор/ввод тегов (`#general`, `#phrasal-verb`, `#idiom`, `#daily`, `#networking`). - [x] **1.4. Журнал личного словаря (History & Words List)**: - Хронологическая лента всех сохраненных слов с датой и временем. - Живой поиск по английским словам, русскому переводу и контексту. - Фильтр по тегам в один клик. - Воспроизведение аудио прямо из списка. - Удаление / редактирование карточек. - [x] **1.5. Инфраструктурное развертывание**: - Конфигурация Nginx для `notes.qpid.pro` с proxy на бэкенд (`127.0.0.1:8002`). - Systemd-сервис для автозапуска и перезапуска при сбоях. --- ### Этап 2: Организация, теги, экспорт и PWA *Цель: гибкое управление растущим словарным запасом и удобство на мобильных.* - [x] **2.1. Расширенная организация и контроль качества**: - Коллекции и папки (например, «Разговорный», «Работа», «Книги/Сериалы», «Сети/IT»). - Быстрое массовое тегирование и групповые действия (удаление, перемещение). - **Контроль и предотвращение дубликатов (Duplicate Prevention & Merging)**: - Проверка при вводе и сохранении (case-insensitive trim). - Уведомление, если слово/фраза уже есть в словаре. - Возможность дописать новый контекстный пример / значение к существующей карточке вместо пложения дублей или перейти к её редактированию. - [x] **2.2. Экспорт данных**: - Экспорт базы в CSV (UTF-8 BOM), JSON, Markdown. - Экспорт в колоду Anki (`.tsv`) с аудио, контекстными предложениями и поддержкой Cloze deletion (`{{c1::word}}`). - [x] **2.3. PWA (Progressive Web App)**: - Установка на экран смартфона (iOS / Android) как нативное приложение. - Service Worker, Web Manifest, оффлайн-кэш статики. --- ### Этап 3: Встроенный тренажер интервальных повторений (SRS / SM-2) *Цель: перевод слов из пассивного словаря в активную долговременную память.* - [x] **3.1. Движок SuperMemo-2 (SM-2) & Умная выборка**: - Расчет интервалов забывания Эббингауза: `Again`, `Hard`, `Good`, `Easy`. - **Умный микс дня (Daily Quiz Mix)**: баланс сессии (до 10 новых + 10 интервальных повторений + 5 проблемных слов в разнобой). - **Детектор трудных слов (Leeches)**: автоматическая маркировка слов с частыми ошибками и их приоритетное подмешивание. - [x] **3.2. Режим Flashcards**: - Двусторонняя карточка En $\rightarrow$ Ru и Ru $\rightarrow$ EN с нативной озвучкой, подсказкой контекста и горячими клавишами `Space`, `1..4`. - [x] **3.3. Режим Multiple Choice Quiz (4 варианта ответа)**: - Выбор правильного перевода среди 4 вариантов со случайными дистракторами из базы. - Мгновенная проверка, подсветка цветом (зеленый/красный) и горячие клавиши `1..4`. - [x] **3.4. Режим активного набора (Active Typing / Ru $\rightarrow$ En)**: - Видишь русский перевод / контекст с пропуском $\rightarrow$ вводишь английское слово с клавиатуры (прокачка моторной памяти и спеллинга). - [x] **3.5. Режим Cloze Deletion (Контекстные пропуски)**: - Заполнение пропущенного слова прямо в живом предложении. - [x] **3.6. Аудио-тренажёр (Dictation)**: - Слушаем слово $\rightarrow$ печатаем правильный спеллинг. --- ### Этап 4: Интеллектуальный помощник и аналитика *Цель: отслеживание динамики и поддержка мотивации.* - [x] **4.1. Статистика, Daily Streak и Календарь активности**: - Сетка активности за 180 дней с градацией интенсивности (серый, салатовый, зеленый, изумрудный). - Учёт непрерывных дней занятий (Daily Streak 🔥) и рекорда серии. - Сегментированный прогресс-бар стадий освоения (Новые, В процессе, Закрепление, Выучено). - Оценка уровня владения языком (A1 - C1) по объёму активного словаря. - Процент точности запоминания (Retention Rate %). - [ ] **4.2. Быстрый захват из браузера**: - Букмарклет для выделения текста на любой странице и отправки в словарь. - [x] **4.3. Честный и строгий расчёт уровня CEFR (Active Vocabulary & Retention Weighting)**: - Расчёт уровня владения исключительно по **активным выученным словам** (стадии `Mastered` и `Review` в алгоритме SM-2), исключая пассивные добавленные карточки, которые ещё не прошли интервальные повторения. - Корректирующий коэффициент точности: учёт Retention Rate %, чтобы уровень отражал реальную память, а не просто количество выписанных слов. - Индикатор пути к следующему уровню (например: «*До уровня B2 осталось закрепить 142 слова*»). --- ### Этап 5: Интерактивная Читалка & Библиотека (Interactive Reader & Source-based Learning) *Цель: чтение живых книг, статей и документации с мгновенным клик-переводом и авто-тегированием источников.* - [x] **5.1. Хранилище текстов и парсер форматов (Bookshelf & Document Engine)**: - Поддержка форматов: вставка текста из буфера, `.txt`, `.md`, электронные книги `.epub` (с разбивкой по главам и сохранением позиции чтения). - Умная очистка веб-статей от лишней верстки и рекламы (Reader view). - [x] **5.2. Автоматическое тегирование источников (Source & Metadata Auto-tagging)**: - Каждое слово, сохранённое из книги/статьи, автоматически получает теги источника: - Название произведения (например, `#fight-club`, `#the-martian`, `#designing-data-intensive-apps`). - Тип/жанр материала (например, `#novel`, `#tech-article`, `#documentation`, `#cybersecurity`). - Автор / Источник (например, `#author:chuck-palahniuk`, `#cloudflare-blog`). - Автоматический захват предложения-контекста, в котором слово встретилось в книге. - [x] **5.3. Запуск тестов и тренировок по источникам и тегам (Tag-scoped SRS Quizzes)**: - Возможность запустить любую тренировку (Карточки, 4 варианта ответа, Набор слова, Диктант) **строго по словам конкретной книги, статьи или автора**. - Быстрый запуск из читалки: *«Повторить все 35 новых слов из Fight Club»* прямо во время или после прочтения главы. - [x] **5.4. Интерактивный клик-перевод и подсветка (Interactive Reader Layer)**: - Клик по любому слову $\rightarrow$ моментальный перевод, транскрипция, нативное аудио и кнопка «+ В словарь» в 1 клик. - Выделение фраз/связок (chunks) мышкой или тапом с литературным переводом всего выражения. - Подсветка в тексте книги уже выученных (`mastered`) и изучаемых (`learning`) слов.