15 KiB
15 KiB
План развития проекта 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):
- Free Dictionary API (
api.dictionaryapi.dev): фонетическая транскрипция IPA, аудио-произношение нативных дикторов (US/UK), части речи, толкования и примеры. - MyMemory Translation API: литературный перевод фраз, идиом и предложений на русский язык.
- Free Dictionary API (
2. Этапы реализации (Roadmap)
Этап 1 (Текущая итерация): Безопасное ядро (MVP) — Общий английский, перевод и фиксация
Цель: создать защищённый, сверхбыстрый и надёжный персональный словарь для повседневного и профессионального английского языка.
- 1.1. Модуль защиты и авторизации:
- Страница авторизации (минималистичный дизайн, вход по логину и паролю).
- Защита всех API эндпоинтов: неавторизованные запросы блокируются (
401 Unauthorized). - Надежное хранение паролей в SQLite (
PBKDF2-HMAC-SHA256с уникальной солью). - Rate Limiter на эндпоинт
/api/login(не более 5 неудачных попыток в минуту с IP). - Сессии через зашифрованные
HttpOnlycookie. - Кнопка «Выйти из аккаунта» в шапке сервиса.
- 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-сервис для автозапуска и перезапуска при сбоях.
- Конфигурация Nginx для
Этап 2: Организация, теги, экспорт и PWA
Цель: гибкое управление растущим словарным запасом и удобство на мобильных.
- 2.1. Расширенная организация и контроль качества:
- Коллекции и папки (например, «Разговорный», «Работа», «Книги/Сериалы», «Сети/IT»).
- Быстрое массовое тегирование и групповые действия (удаление, перемещение).
- Контроль и предотвращение дубликатов (Duplicate Prevention & Merging):
- Проверка при вводе и сохранении (case-insensitive trim).
- Уведомление, если слово/фраза уже есть в словаре.
- Возможность дописать новый контекстный пример / значение к существующей карточке вместо пложения дублей или перейти к её редактированию.
- 2.2. Экспорт данных:
- Экспорт базы в CSV (UTF-8 BOM), JSON, Markdown.
- Экспорт в колоду Anki (
.tsv) с аудио, контекстными предложениями и поддержкой Cloze deletion ({{c1::word}}).
- 2.3. PWA (Progressive Web App):
- Установка на экран смартфона (iOS / Android) как нативное приложение.
- Service Worker, Web Manifest, оффлайн-кэш статики.
Этап 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
\rightarrowRu и Ru\rightarrowEN с нативной озвучкой, подсказкой контекста и горячими клавишамиSpace,1..4.
- Двусторонняя карточка En
- 3.3. Режим Multiple Choice Quiz (4 варианта ответа):
- Выбор правильного перевода среди 4 вариантов со случайными дистракторами из базы.
- Мгновенная проверка, подсветка цветом (зеленый/красный) и горячие клавиши
1..4.
- 3.4. Режим активного набора (Active Typing / Ru
\rightarrowEn):- Видишь русский перевод / контекст с пропуском
\rightarrowвводишь английское слово с клавиатуры (прокачка моторной памяти и спеллинга).
- Видишь русский перевод / контекст с пропуском
- 3.5. Режим Cloze Deletion (Контекстные пропуски):
- Заполнение пропущенного слова прямо в живом предложении.
- 3.6. Аудио-тренажёр (Dictation):
- Слушаем слово
\rightarrowпечатаем правильный спеллинг.
- Слушаем слово
Этап 4: Интеллектуальный помощник и аналитика
Цель: отслеживание динамики и поддержка мотивации.
- 4.1. Статистика, Daily Streak и Календарь активности:
- Сетка активности за 180 дней с градацией интенсивности (серый, салатовый, зеленый, изумрудный).
- Учёт непрерывных дней занятий (Daily Streak 🔥) и рекорда серии.
- Сегментированный прогресс-бар стадий освоения (Новые, В процессе, Закрепление, Выучено).
- Оценка уровня владения языком (A1 - C1) по объёму активного словаря.
- Процент точности запоминания (Retention Rate %).
- 4.2. Быстрый захват из браузера:
- Букмарклет для выделения текста на любой странице и отправки в словарь.
- 4.3. Честный и строгий расчёт уровня CEFR (Active Vocabulary & Retention Weighting):
- Расчёт уровня владения исключительно по активным выученным словам (стадии
MasteredиReviewв алгоритме SM-2), исключая пассивные добавленные карточки, которые ещё не прошли интервальные повторения. - Корректирующий коэффициент точности: учёт Retention Rate %, чтобы уровень отражал реальную память, а не просто количество выписанных слов.
- Индикатор пути к следующему уровню (например: «До уровня B2 осталось закрепить 142 слова»).
- Расчёт уровня владения исключительно по активным выученным словам (стадии