- Add templates/lesson.typ: reusable template with lesson-template() function - Accepts title, grade, subject, date, media, description parameters - Comment-based frontmatter convention documented at top - Renders title heading, metadata line, description, body, media section - Media references use raw(lang: "jellyfin-media") for identifiable HTML elements - Add templates/example-lesson.typ: complete example (Water Cycle lesson) - Demonstrates all template features - Christian-homeschool appropriate content (Psalm 135:7) - Includes 2 Jellyfin media references Closes #3 |
||
|---|---|---|
| templates | ||
| README.md | ||
Jellyfin Lessons Plugin
A Jellyfin plugin that delivers homeschool lesson plans with embedded media playback. Content authored in Typst, managed via a web admin UI, displayed natively inside Jellyfin on any client (Fire TV, web, mobile).
Architecture
~/vault/lessons/ ← Typst source files (author here)
└── grade-N/
└── subject/
└── lesson-name.typ
↓ admin UI reads/writes lesson metadata
~/.local/share/jellyfin-lessons/ ← Lessons DB + compiled HTML cache
↓ Jellyfin plugin reads
Jellyfin "Lessons" tab ← Plugin renders lesson HTML + media player
Components
-
Jellyfin Plugin (C# / .NET 9) — Registers a "Lessons" page in Jellyfin, reads lesson data from the store, renders Typst-compiled HTML, and embeds the native Jellyfin media player for linked items.
-
Lesson Data Store — SQLite database mapping lesson metadata (title, grade, subject, date, jellyfin item IDs) to compiled HTML output. Shared between the plugin and admin UI.
-
Typst Lesson Template — A
.typtemplate with frontmatter conventions for lesson metadata and embedded Jellyfin media references. Compiles to HTML. -
Web Admin UI — Simple web interface (served from n97) for creating, editing, and previewing lessons. Writes to the same SQLite store the plugin reads from.
-
Nix Flake — Builds the plugin DLL, packages it for Jellyfin, provides a dev shell with dotnet-sdk + typst.
End State (Outcome Engineering)
- Open Jellyfin on any device → see "Lessons" in the nav
- Click a lesson → read the content → click play on embedded media → Jellyfin plays it
- Author lessons by writing
.typfiles (with a web UI option) - Everything works fully offline on the homelab
- One
nix buildproduces the plugin
Development
nix develop # dotnet-sdk, typst, node (for admin UI)
License
MIT