137 lines
11 KiB
Markdown
137 lines
11 KiB
Markdown
# План развития проекта 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) — Общий английский, перевод и фиксация
|
||
*Цель: создать защищённый, сверхбыстрый и надёжный персональный словарь для повседневного и профессионального английского языка.*
|
||
|
||
- [ ] **1.1. Модуль защиты и авторизации**:
|
||
- Страница авторизации (минималистичный дизайн, вход по логину и паролю).
|
||
- Защита всех API эндпоинтов: неавторизованные запросы блокируются (`401 Unauthorized`).
|
||
- Надежное хранение паролей в SQLite (`PBKDF2-HMAC-SHA256` с уникальной солью).
|
||
- Rate Limiter на эндпоинт `/api/login` (не более 5 неудачных попыток в минуту с IP).
|
||
- Сессии через зашифрованные `HttpOnly` cookie.
|
||
- Кнопка «Выйти из аккаунта» в шапке сервиса.
|
||
- [ ] **1.2. Быстрый поиск и каскадный перевод (General & Idiomatic English)**:
|
||
- Строка поиска в фокусе сразу при открытии страницы.
|
||
- Поддержка любых форм языка:
|
||
- Отдельные слова (существительные, глаголы, прилагательные);
|
||
- Фразовые глаголы (*run into*, *figure out*, *call off*);
|
||
- Идиомы и разговорные фразы (*once in a blue moon*, *take for granted*);
|
||
- Предложения целиком (из книг, сериалов, документации).
|
||
- Автоматическое получение:
|
||
- Фонетической транскрипции (IPA);
|
||
- Нативного аудио-произношения (US/UK);
|
||
- Частей речи и толкования на английском;
|
||
- Русского перевода.
|
||
- Кэширование словарных запросов в локальной базе для мгновенных повторных ответов.
|
||
- [ ] **1.3. Контекстное сохранение слова в 1 клик**:
|
||
- Горячие клавиши:
|
||
- `Enter` — мгновенный перевод;
|
||
- `Ctrl + Enter` (или `Cmd + Enter`) — мгновенное сохранение в словарь;
|
||
- `Esc` — очистить ввод;
|
||
- `Ctrl + P` или клик на динамик — прослушать произношение.
|
||
- Возможность подправить перевод перед сохранением под свой контекст.
|
||
- Поле для ввода контекстного предложения (где встретилось слово/выражение).
|
||
- Выбор/ввод тегов (`#general`, `#phrasal-verb`, `#idiom`, `#daily`, `#networking`).
|
||
- [ ] **1.4. Журнал личного словаря (History & Words List)**:
|
||
- Хронологическая лента всех сохраненных слов с датой и временем.
|
||
- Живой поиск по английским словам, русскому переводу и контексту.
|
||
- Фильтр по тегам в один клик.
|
||
- Воспроизведение аудио прямо из списка.
|
||
- Удаление / редактирование карточек.
|
||
- [ ] **1.5. Инфраструктурное развертывание**:
|
||
- Конфигурация Nginx для `notes.qpid.pro` с proxy на бэкенд (`127.0.0.1:8002`).
|
||
- Systemd-сервис для автозапуска и перезапуска при сбоях.
|
||
|
||
---
|
||
|
||
### Этап 2: Организация, теги, экспорт и PWA
|
||
*Цель: гибкое управление растущим словарным запасом и удобство на мобильных.*
|
||
|
||
- [ ] **2.1. Расширенная организация**:
|
||
- Коллекции и папки (например, «Разговорный», «Работа», «Книги/Сериалы», «Сети/IT»).
|
||
- Быстрое массовое тегирование.
|
||
- [ ] **2.2. Экспорт данных**:
|
||
- Экспорт базы в CSV / JSON / Markdown.
|
||
- Экспорт в колоду Anki (`.apkg` / `.csv`) с аудио и контекстными предложениями.
|
||
- Резервное копирование SQLite в один клик.
|
||
- [ ] **2.3. PWA (Progressive Web App)**:
|
||
- Установка на экран смартфона (iOS / Android) как нативное приложение.
|
||
- Оффлайн-доступ к сохранённым словам.
|
||
|
||
---
|
||
|
||
### Этап 3: Встроенный тренажер интервальных повторений (SRS / SM-2)
|
||
*Цель: перевод слов из пассивного словаря в активную долговременную память.*
|
||
|
||
- [ ] **3.1. Движок SuperMemo-2 (SM-2)**:
|
||
- Расчет интервалов забывания Эббингауза: `Again`, `Hard`, `Good`, `Easy`.
|
||
- Очередь на сегодня: карточки, готовые к повторению.
|
||
- [ ] **3.2. Режим Flashcards**:
|
||
- Карточка En $\rightarrow$ Ru и Ru $\rightarrow$ En с озвучкой.
|
||
- [ ] **3.3. Режим Cloze Deletion (Пропуски)**:
|
||
- Заполнение пропущенного слова прямо в живом предложении.
|
||
- [ ] **3.4. Аудио-тренажёр (Dictation)**:
|
||
- Слушаем слово $\rightarrow$ печатаем правильный спеллинг.
|
||
|
||
---
|
||
|
||
### Этап 4: Интеллектуальный помощник и аналитика
|
||
*Цель: отслеживание динамики и поддержка мотивации.*
|
||
|
||
- [ ] **4.1. Статистика и Daily Streak**:
|
||
- Учёт непрерывных дней занятий.
|
||
- График роста активного словарного запаса по уровням (A1-C1).
|
||
- [ ] **4.2. Быстрый захват из браузера**:
|
||
- Букмарклет для выделения текста на любой странице и отправки в словарь.
|