# πŸ“‹ Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: study.qpid.pro (Backlog & Execution Queue) Бписок Π·Π°Π΄Π°Ρ‡ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² **Ponytail** (максимальная Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ срСдства ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, zero-dependency, высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ). --- ## πŸš€ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½) ### 1. πŸ“‘ ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Markdown (.md) Π² Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ - [x] **Π‘Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° (Fenced Code Blocks ```` ```language ````)**: - Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ `
`.
  - ΠœΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ (`JetBrains Mono`, `Consolas`), сохранСниС отступов ΠΈ табуляции (`white-space: pre`).
  - Вёмная ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΠ°, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ скролл ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ красной строки (`text-indent: 0`).
  - Кнопка Β«ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Β» Π² шапкС Π±Π»ΠΎΠΊΠ°.
  - ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ создания ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… словарных спанов `` для ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ синтаксис Π½Π΅ Π»ΠΎΠΌΠ°Π» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
- [x] **Инлайн-код (`` `variable` ``)**:
  - ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚Π΅Π³ `` с Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊ-стилСм.
- [x] **Бписки ΠΈ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹**:
  - ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… (`- `, `* `) ΠΈ Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… (`1. `) списков Π² `
  • ` / `
    1. `. - ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΡ‚Π°Ρ‚ (`> `) Π² `
      ` с Π°ΠΊΡ†Π΅Π½Ρ‚Π½ΠΎΠΉ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ. - **Π‘Π»ΠΎΠ²Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ списков ΠΈ Ρ†ΠΈΡ‚Π°Ρ‚ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ** (ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!). - [x] **Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Markdown (`##`, `###`)**: - ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ Π² `

      `, `

      ` с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ сырых Ρ€Π΅ΡˆΡ‘Ρ‚ΠΎΠΊ `#`. - [x] **Π’Π°Π±Π»ΠΈΡ†Ρ‹ Markdown (`| col | col |`)**: - АдаптивныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ, стилизациСй Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ``, Π·Π΅Π±Ρ€Π°-подсвСткой строк ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ скроллом Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…. - КаТдая ячСйка ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ слова для изучСния ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½-ΠΊΠΎΠ΄. - [x] **HTML-Π±Π»ΠΎΠΊΠΈ ΠΈ Ρ‚Π΅Π³ΠΈ Π² Markdown (`

      `, `

      `, ``, ``, ``, `
      `)**: - Нативный парсинг Ρ‡Π΅Ρ€Π΅Π· встроСнный `DOMParser` Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. - УстранСна ΡƒΡ‚Π΅Ρ‡ΠΊΠ° сырых Ρ‚Π΅Π³ΠΎΠ² (``, ``, `

      `) Π² словарныС слова. - [x] **Бсылки ΠΈ изобраТСния (`[text](url)`, `![alt](url)`, ``)**: - ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Π΅ΠΉΠ΄ΠΆΠ΅ΠΉ shields.io, Ρ‚Ρ€Π΅Π½Π΄-Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. - АвтоматичСскоС скрытиС Π±ΠΈΡ‚Ρ‹Ρ…/ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ (`assets/...`) Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onerror`. - [x] **Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρƒ курсора/слова (Popup Positioning)**: - Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ Π±Π°Π³ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ смСщСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚: ΡƒΠ±Ρ€Π°Π½ `window.scrollY` ΠΏΡ€ΠΈ `position: fixed`. - Окно пСрСнСсСно Π² ΠΊΠΎΡ€Π΅Π½ΡŒ `` для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ искаТСний контСкста позиционирования. - ПлавноС отслСТиваниС скролла Ρ‡Π΅Ρ€Π΅Π· `requestAnimationFrame` с Π°Π²Ρ‚ΠΎΠ·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ ΡƒΡ…ΠΎΠ΄Π΅ слова Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΠΏΠΊΡƒΡŽ ΡˆΠ°ΠΏΠΊΡƒ. - [x] **Бтилизация Π² CSS ([`app/static/css/style.css`](file:///home/ai-projects/services/study.qpid.pro/app/static/css/style.css))**: - Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ стили для `.reader-content-body pre`, `code`, `blockquote`, `ul`, `ol`, `.reader-table`, `.reader-heading`, `.reader-link`, `.reader-img`. --- ### 2. πŸ—œοΈ Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ статичСского Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° (`GZipMiddleware`) - [x] ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ `GZipMiddleware(minimum_size=1000)` Π² [`app/main.py`](file:///home/ai-projects/services/study.qpid.pro/app/main.py). - [x] Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² `app.js` (111.8 ΠšΠ‘ -> 21.5 ΠšΠ‘), `index.html` (55.2 ΠšΠ‘ -> 10.3 ΠšΠ‘) ΠΈ `style.css` (58.2 ΠšΠ‘ -> 9.4 ΠšΠ‘) Π½Π° 81.7% (суммарно с 225.2 ΠšΠ‘ Π΄ΠΎ 41.2 ΠšΠ‘). - [x] ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ `Content-Encoding: gzip` Π² ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ рСгрСссионный тСст Π² `tests/test_api.py`. --- ### 3. πŸ›‘οΈ ДСдупликация слов ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ добавлСния (Reader + API) - [x] **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π½Π° бэкСндС (`POST /api/cards`)**: - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° слова Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра `lower(trim(term))`. - ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½Π΅ создаётся Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚, Π° дополняСтся контСкстноС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Ρ‚Π΅Π³ΠΈ, возвращаСтся `already_exists: True`. - [x] **Π˜Π½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡ Π² Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ поиска**: - Π’ Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° слово ΠΈ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ поиска выводится Π±Π΅ΠΉΠ΄ΠΆ `⭐ Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅`. - Кнопка Β«+ Π’ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒΒ» замСняСтся Π½Π° Π±Π΅ΠΉΠ΄ΠΆ `⭐ Π‘Π»ΠΎΠ²ΠΎ ΡƒΠΆΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅` с ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ `+ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эту Ρ†ΠΈΡ‚Π°Ρ‚Ρƒ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅`. - [x] **ИндСкс цСлостности Π² SQLite**: - Π‘ΠΎΠ·Π΄Π°Π½ `UNIQUE INDEX idx_vocab_user_term_nocase ON vocabulary_cards(user_id, term COLLATE NOCASE);` Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ отсутствиС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π²ΠΈΠΆΠΊΠ° Π‘Π” Π·Π° $O(\log N)$. - [x] **БлияниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π² Π±Π°Π·Π΅**: - ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ `admired` (ID 5 ΠΈ ID 7) ΠΈ `suddenly`/`Suddenly` (ID 2 ΠΈ ID 9) с объСдинСниСм контСкстных ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, слияниСм Ρ‚Π΅Π³ΠΎΠ² ΠΈ сохранСниСм прогрСсса SRS. --- ### 4. πŸ“± Мобильная оптимизация ΠΈ адаптивная вСрстка (iPhone 12 / iOS Safari) - [x] **БистСмный Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ iOS ΠΈ сброс ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (Core Foundation)**: - ΠœΠ΅Ρ‚Π°Ρ‚Π΅Π³ `viewport`: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ `viewport-fit=cover` для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹Ρ€Π΅Π·Π° (notch) ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ iPhone. - УстранСниС Π±Π°Π³Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎ-Π·ΡƒΠΌΠ°: установлСн `font-size: 16px` для ``, `