Skip to content

feat!: multiple notes per subject, build-time math, and self-hosted assets - #9

Merged
notakeith merged 72 commits into
mainfrom
content-update
Aug 7, 2026
Merged

feat!: multiple notes per subject, build-time math, and self-hosted assets#9
notakeith merged 72 commits into
mainfrom
content-update

Conversation

@notakeith

Copy link
Copy Markdown
Contributor

Что здесь

Три больших изменения и много мелкой уборки.

1. Несколько конспектов на один предмет

Раньше курс = папка = один преподаватель. Теперь папка описывает вариант: преподаватель + автор конспекта + учебный год. Варианты склеиваются ключом subject:

На главной это одна карточка, раскрывается списком вариантов. Внутри курса — переключатель, выбор запоминается в localStorage.

Если у того же преподавателя есть запись за более свежий год, старая помечается приглушённой плашкой, а на её странице появляется ссылка на новую. Сравнение строго внутри преподавателя — разные лекторы друг друга не «устаревают».

Курсы без subject продолжают работать как раньше: папка становится группой из одного варианта, вёрстка не меняется.

2. Формулы считаются на сборке

MathJax убран, вместо него transform.ToMath (KaTeX внутри Hugo). Формулы приезжают уже в HTML — никакого JS и никакого рывка через полсекунды после текста.

Требуется Hugo ≥ 0.132 и блок passthrough в hugo.toml.

3. Ничего критичного с CDN

Шрифты, KaTeX и иконки переехали в репозиторий. Ionicons как веб-компонент заменён на инлайн-SVG на сборке. Alpine.js удалён — на нём держались только шорткоды tabs/tab, которых больше нет.

Цифры

Что ушло с сетевого пути (gzip, по проводу):

было стало
MathJax JS 260 КБ 0
MathJax шрифты до 442 КБ 0
Alpine.js 16 КБ 0
Ionicons рантайм 24 КБ + запрос на каждую иконку 0
Google Fonts 2 preconnect + рендер-блокирующий CSS 0
KaTeX CSS 3,5 КБ, только на страницах с формулами

Иконок на странице курса — 11. Раньше это было 11 отдельных HTTP-запросов после загрузки рантайма, теперь ноль: SVG инлайнятся, в среднем ~470 байт каждый, и почти целиком съедаются gzip.

Шрифты с Google стоили не столько байт, сколько последовательности: браузер сначала тянет CSS с fonts.googleapis.com, парсит, и только потом узнаёт URL шрифта на fonts.gstatic.com — два RTT до чужого домена до первой отрисовки текста. Со своим доменом и preload — ноль.

В репозиторий добавилось: 248 КБ текстовых шрифтов, 254 КБ шрифтов KaTeX, 15 КБ иконок. Браузер из этого качает единицы файлов — unicode-range у текстовых шрифтов и подмножества глифов у KaTeX.

Цена для CI, замер на тестовом сайте:

без формул:                     130 мс
+400 формул на одной странице:  164 мс

Около 0,085 мс на формулу. На фоне npm ci и Tailwind это шум.

Побочно: fonts.googleapis.com отдаёт IP посетителя третьей стороне — со своими шрифтами вопрос снимается.

Что ещё

  • Контрибьюторы в футере с аватарками и статистикой коммитов, аватарки скачиваются и пережимаются на сборке.
  • Проверка PR в CI: front matter по схеме из архетипов, сборка, битые ссылки, формат заголовка.
  • Общие подсказки через data-cn-tip на любом элементе.
  • Метка происхождения конспекта (noteType) с моделью и источником в подсказке.
  • Цвет курса — единственное поле accent, наследуется внутрь вместо случайного выбора по хешу.
  • Ленивая загрузка контекстного меню и виджета, ленивый поисковый индекс.
  • CI ускорен: генерация PDF переведена с pandoc на tectonic, добавлено кеширование зависимостей.
  • Убраны остатки темы Dream, Masonry, мёртвый CSS и осиротевшие партиалы.
  • Починены устаревшие вызовы: site.Data.Data, site.Language.LanguageCode.Language.Locale.

Что сломается у контрибьюторов

  • Курс с несколькими преподавателями надо разложить по папкам и проставить subject. Внутри одной папки развести преподавателей больше нельзя.
  • cover_style больше ни на что не влияет — цвет обложек приходит от accent курса.
  • Формулы: одиночный $ остаётся инлайн-разделителем, но теперь строгий парсер. Пара обычных долларов в абзаце (цена 5$ и 10$) покрасится в красный — экранируйте \$.
  • Новая иконка требует прогона scripts/vendor-assets.sh, иначе на её месте будет пусто и warning в логе сборки.

Подробности — в обновлённом CONTRIBUTING.md.

@notakeith
notakeith merged commit 2ac4caf into main Aug 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant