11 KiB
11 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»).
- Быстрое массовое тегирование.
- 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
\rightarrowRu и Ru\rightarrowEn с озвучкой.
- Карточка En
- 3.3. Режим Cloze Deletion (Пропуски):
- Заполнение пропущенного слова прямо в живом предложении.
- 3.4. Аудио-тренажёр (Dictation):
- Слушаем слово
\rightarrowпечатаем правильный спеллинг.
- Слушаем слово
Этап 4: Интеллектуальный помощник и аналитика
Цель: отслеживание динамики и поддержка мотивации.
- 4.1. Статистика и Daily Streak:
- Учёт непрерывных дней занятий.
- График роста активного словарного запаса по уровням (A1-C1).
- 4.2. Быстрый захват из браузера:
- Букмарклет для выделения текста на любой странице и отправки в словарь.