Files
notes-qpid-pro/PLAN.md
T

12 KiB
Raw Blame History

План развития проекта 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.
    • Умный микс дня (Daily Quiz Mix): баланс сессии (например, 10 новых + 10 интервальных повторений + 5 проблемных слов в разнобой).
    • Детектор трудных слов (Leeches): автоматическая маркировка слов с частыми ошибками и их приоритетное подмешивание.
  • 3.2. Режим Flashcards:
    • Карточка En \rightarrow Ru и Ru \rightarrow En с озвучкой.
  • 3.3. Режим активного набора (Active Typing / Ru \rightarrow En):
    • Видишь русский перевод / контекст с пропуском \rightarrow вводишь английское слово с клавиатуры (прокачка моторной памяти и спеллинга).
  • 3.4. Режим Cloze Deletion (Контекстные пропуски):
    • Заполнение пропущенного слова прямо в живом предложении.
  • 3.5. Аудио-тренажёр (Dictation):
    • Слушаем слово \rightarrow печатаем правильный спеллинг.

Этап 4: Интеллектуальный помощник и аналитика

Цель: отслеживание динамики и поддержка мотивации.

  • 4.1. Статистика и Daily Streak:
    • Учёт непрерывных дней занятий.
    • График роста активного словарного запаса по уровням (A1-C1).
  • 4.2. Быстрый захват из браузера:
    • Букмарклет для выделения текста на любой странице и отправки в словарь.