Author SHA1 Message Date
adminsandClaude Opus 5.5 e2311facf4 Vault: цена 2990 → 4990 ₽ с 20261001
На прод выкатывается таймером vault-price-4990 на Hoster.kz
(/root/price-switch-20261001/switch.py) в 00:00 МСК.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 16:10:06 +05:00
adminsandClaude Opus 5 30d3523aeb docs(CLAUDE): грабли Markdown при ответе студенту в комментариях
Комментарии к урокам рендерятся через react-markdown + remark-gfm, и
это меняет то, как надо писать сами ответы. Проверено на уроке
Zotero 2.3: четыре пункта строками через «—» в ответе от 21.09
склеились в один абзац (GFM не считает тире маркером списка), а
длинный адрес с параметрами запроса автолинк обрывает на «&».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:11:10 +05:00
2 changed files with 6 additions and 1 deletions
+5
View File
@@ -240,6 +240,11 @@ S3_REGION="eu-central"
`**жирный**` в отзыве на ДЗ студент увидит звёздочками. Ссылку там же писать голым адресом можно — `linkify` её поднимет. `**жирный**` в отзыве на ДЗ студент увидит звёздочками. Ссылку там же писать голым адресом можно — `linkify` её поднимет.
Когда сами пишем ответ студенту под уроком, две граблю рендера (проверено боем 20260922, урок Zotero 2.3):
- **Перечисление строками через «—» склеивается в один абзац.** GFM не считает тире маркером списка: четыре пункта подряд, каждый с новой строки, отрендерились одной сплошной строкой в ответе от 21.09. Список — только `- ` в начале строки.
- **Длинный адрес с `&` оборачивать в `<…>`.** Автолинк GFM на параметрах запроса обрывается; `<https://host/?a=1&b=2>` даёт кликабельную ссылку целиком. Подчёркивания внутри слова (`url_selector`) курсивом не становятся — их экранировать не нужно.
Безопасность рендера комментариев (не ослаблять «улучшением»): `rehype-sanitize` режет сырой HTML и `javascript:`; картинки с чужих доменов **не грузятся** — компонент `img` отдаёт их ссылкой, чтобы адрес читателя не утекал на сторонний сервер. Свои картинки — через `/api/student/comment-upload`. Безопасность рендера комментариев (не ослаблять «улучшением»): `rehype-sanitize` режет сырой HTML и `javascript:`; картинки с чужих доменов **не грузятся** — компонент `img` отдаёт их ссылкой, чтобы адрес читателя не утекал на сторонний сервер. Свои картинки — через `/api/student/comment-upload`.
### Файлы курсов живут на двух разных доменах ### Файлы курсов живут на двух разных доменах
+1 -1
View File
@@ -26,7 +26,7 @@ export const PAY_METHODS_URL = "https://obsidian.second-brain.ru/pay/methods";
export const STORE_CATALOG: Record<string, StoreCatalogEntry> = { export const STORE_CATALOG: Record<string, StoreCatalogEntry> = {
"second-brain-vault": { "second-brain-vault": {
landingUrl: "https://second-brain.ru/sb-vault", landingUrl: "https://second-brain.ru/sb-vault",
tariffs: [{ sku: "sb-vault", label: "Second Brain Vault", priceRub: 2990 }], tariffs: [{ sku: "sb-vault", label: "Second Brain Vault", priceRub: 4990 }],
}, },
"claude-obsidian": { "claude-obsidian": {
landingUrl: "https://second-brain.ru/claude-obsidian", landingUrl: "https://second-brain.ru/claude-obsidian",