Уровень 1 0 / 100 XP
Сегодня
0 мин
0 вопросов
- точность
0 уроков

Завтра счёт начнётся заново

Новое достижение
Первые шаги

Быстрый старт

Запусти платформу и собери первый концепт

Быстрый старт

Требования

  • Hugo >= 0.120
  • Git
  • Node.js >= 18 (нужен только для разработки атомов)

Запуск

git clone <адрес репозитория>
cd lik-learn
hugo server

Открой http://localhost:1313. Платформа работает локально.

Для работы над JS-компонентами дополнительно:

cd site && npm install
npm run dev      # watch
npm run build    # сборка в site/dist/, затем в static/js/ и assets/css/

Структура проекта

content/
  concepts/{id}/index.md   урок (page bundle)
  tracks/{id}.md           страница трека (stub из двух полей)
  paths/{id}.md            страница пути (stub из двух полей)
  docs/                    эта документация

data/
  atoms.yaml               источник истины по атомам
  directions/{id}.yaml     верхнеуровневые группы
  tracks/{id}.yaml         данные трека
  paths/{id}.yaml          данные пути
  scenarios/{id}.yaml      ветвящиеся сценарии

layouts/
  shortcodes/              Markdown в атом
  concepts/                шаблоны видов концепта
  partials/                герой, мотивы, цели

site/src/
  atoms/                   классы атомов: _core, universal, math, code, immersive, visual
  mechanics/               timer, hp-bar, progress, narrative
  core/                    EventBus, состояние, сессии, повторение

scripts/
  validate-concept.py      гейт концептов
  validate-shortcodes.sh   проверка существования шорткодов

Первый концепт

Концепт это папка с index.md. Фронтматтер обязателен, и гейт проверяет его строго.

---
id: my-first-concept
title: "Название темы"
description: "Одно предложение о том, чему учит урок"
concept_type: material
tags: [биология, егэ]
level: 3
duration: "15 мин"
hero:
  motif: lens
  theme: science
  eyebrow: "Биология"
  lead: "Крючок на одно-два предложения, ради которого урок открывают."
  stats:
    - value: "1887"
      label: "год открытия"
    - value: "2 пути"
      label: "фотосинтез и хемосинтез"
learning_objectives:
  - "Отличить хемосинтез от фотосинтеза по источнику энергии в незнакомом описании"
  - "Объяснить, откуда берут энергию сообщества без солнечного света"
  - "Оценить, какие выводы о таких сообществах обоснованы, а какие нет"
content_graph:
  topics:
    - id: main
      label: "Хемосинтез"
      expanded: true
      children:
        - id: energy
          label: "Источник энергии"
          children:
            - { label: "Окисление сероводорода", note: "вместо света" }
---

## Материал

Здесь идёт настоящий учебный текст.

## Проверь себя

{{< quiz question="Что служит источником энергии при хемосинтезе?" >}}
  {{< option >}}Солнечный свет{{< /option >}}
  {{< option correct="true" >}}Окисление неорганических веществ{{< /option >}}
  {{< option >}}Тепло гидротермального источника{{< /option >}}
{{< /quiz >}}

Открой http://localhost:1313/concepts/my-first-concept/.

Что проверяет гейт

python3 scripts/validate-concept.py
  • concept_type и content_graph присутствуют;
  • learning_objectives от 3 до 5 штук;
  • все id в connections.before/after/related существуют в content/concepts/;
  • не меньше 700 слов прозы и не меньше 60 слов на каждый проверяющий атом;
  • минимум три разных проверяющих атома, ни один не больше 40 процентов интерактивов;
  • высота атомов по Блуму дотягивает до глагола каждой учебной цели;
  • каждый использованный атом описан в data/atoms.yaml;
  • верный вариант не стоит первым во всех quiz сразу.

Перед написанием материала прочитай планку строгости: она объясняет, почему эти пороги именно такие.


Атомы

Имя атома и имя шорткода совпадают не всегда. Атом quiz-question вставляется шорткодом quiz с вложенными option. Полный список в каталоге, он генерируется из data/atoms.yaml.

{{< flashcard front="Вопрос" back="Ответ" >}}

{{< true-false statement="Хемосинтез идёт на свету" correct="false" >}}

{{< fill-blank text="Энергию хемосинтетики получают из [окисления] неорганических веществ" >}}

Атом без выделенного шорткода вставляется универсальным:

{{< atom type="appraise" >}}

Визуальный слой

Типографика урока это часть подачи, а не оформление:

{{< dropcap lines="3" variant="accent" >}}
Первый абзац урока, ровно один абзац.
{{< /dropcap >}}

{{< claim type="src" source="Виноградский, 1887" >}}
Утверждение, у которого есть источник.
{{< /claim >}}

{{< marginalia kind="date" label="1977" >}}
Заметка на полях рядом с нужным абзацем.
{{< /marginalia >}}

{{< breather note="Остановись здесь" >}}
Пауза перед важным.
{{< /breather >}}

Метки достоверности (fact, src, debate) обязательны для тем предметного и экзаменационного тира.

Механики

{{< with-timer duration="5m" warning="1m" >}}
  {{< quiz question="..." >}}...{{< /quiz >}}
{{< /with-timer >}}

{{< with-hp lives="3" >}}
  {{< quiz question="..." >}}...{{< /quiz >}}
{{< /with-hp >}}

Трек

Трек это два файла.

1. Данные, data/tracks/my-track.yaml

id: "my-track"
title: "Мой трек"
description: "Группа связанных концептов"
duration: "1.5 часа"
level: 1
tags: [биология]
icon: "search"
concepts: [my-first-concept, another-concept]
mode: "sequential"   # или free

2. Страница, content/tracks/my-track.md

---
title: "Мой трек"
dataFile: "my-track"
---

Путь устроен так же: data/paths/{id}.yaml плюс stub в content/paths/{id}.md с тем же dataFile.


Полезные команды

hugo server                        # dev-сервер
hugo server -D                     # вместе с черновиками
hugo --renderToMemory              # проверка сборки без записи на диск
hugo --minify                      # production
./verify-build.sh                  # smoke-тест
python3 scripts/validate-concept.py # гейт концептов
./scripts/validate-shortcodes.sh    # существуют ли использованные шорткоды

Следующие шаги

  1. Философия зачем платформа устроена так
  2. Планка строгости обязательна перед написанием материала
  3. Структура контента концепты, треки, пути
  4. Каталог атомов что брать и когда НЕ брать