Репозиторий для хранения любимых фильмов, книг, сериалов и других категорий. Данные — это обычные markdown-файлы с YAML-frontmatter, поэтому они читаются человеком, удобно диффятся в git и открываются в Obsidian.
entities/<category>/<slug>.md # записи (одна запись = один файл)
templates/movies.md # шаблоны новых записей (для Templater в Obsidian)
templates/books.md
templates/series.md
templates/games.md
templates/anime.md
templates/manga.md
schemas/<category>.schema.json # JSON Schema: какие поля допустимы в категории
users.yaml # пользователи: id и имена
scripts/validate.py # проверка всех записей
- Скопируй шаблон из
templates/<category>.mdвentities/<category>/. - Заполни
title, по желаниюadded_by(id пользователя изusers.yaml),tagsи другие поля. - Коммит будет отклонён, если запись не пройдёт проверку.
Пример записи (entities/movies/brat.md):
---
title: "Брат"
added_by: "55444a90-f4aa-4d33-a126-39222fe82d42"
tags: [драма, криминал, россия]
---users.yaml — единый список людей, которые могут быть указаны в added_by.
У каждого пользователя есть id (UUID) и name; в записях ссылаются только на id:
users:
- id: "55444a90-f4aa-4d33-a126-39222fe82d42"
name: "Максим"Добавился новый человек → заведи ему id в users.yaml. Имена и id не должны
повторяться.
| Категория | Обязательные поля | Опциональные поля |
|---|---|---|
| movies | title |
tags, parts |
| books | title |
author, tags, parts |
| series | title |
tags |
| games | title |
platform, tags, parts |
| anime | title |
tags, parts |
| manga | title |
tags, parts |
title— непустая строка.tags— опциональный массив уникальных строк вида[a-zа-яё0-9-]+(напримердрама,криминал,90-е).parts— опциональный массив названий частей: позволяет хранить цикл (например все книги «Гарри Поттера») в одной записи. Если поле есть — массив должен быть непустым и без повторов.added_by— опциональное поле во всех категориях:idпользователя изusers.yaml(не имя). Значение должно существовать в списке пользователей.- Запрещены любые поля, не указанные в схеме категории (приводит к ошибке).
- Внутри категории названия не должны повторяться.
Чтобы завести категорию recipes, нужно создать три вещи:
entities/recipes/— директория с записями.schemas/recipes.schema.json— JSON Schema для frontmatter (примеры вschemas/).templates/recipes.md— шаблон записи.
Категории без своей схемы валидируются по дефолтной (обязателен только title).
scripts/random-picker.py возвращает случайную запись (например, чтобы выбрать,
что посмотреть или почитать):
python scripts/random-picker.py movies # случайная запись из категории movies
python scripts/random-picker.py games -n 3 # 3 записи без повторов- Категория обязательна: без неё команда завершится ошибкой с подсказкой.
- Неизвестная категория и
-n, превышающий число записей, дают ошибку с подсказкой.
Локально перед коммитом (нужно установить зависимости):
pip install -r requirements-dev.txt
pre-commit install
pre-commit run --all-files # или просто git commit — хук сработает самВ CI (GitHub Actions) та же проверка запускается на каждый push и pull request.