Jellyfin plugin for homeschool lesson plans — Typst-based content with embedded media playback
Find a file
Scott Scoble 4e12bc5b41 fix: populate deps.json, add Jellyfin package refs, rename csproj to Jellyfin.Plugin.Lessons.csproj
- Generated correct deps.json with nuget-to-json for all NuGet dependencies
- Added Jellyfin.Controller and Jellyfin.Model package references with ExcludeAssets=runtime
- Renamed csproj to Jellyfin.Plugin.Lessons.csproj (updated flake.nix projectFile)
2026-05-15 21:25:13 -07:00
plugin fix: populate deps.json, add Jellyfin package refs, rename csproj to Jellyfin.Plugin.Lessons.csproj 2026-05-15 21:25:13 -07:00
.gitignore feat: scaffold Nix flake with dotnet-sdk_9, typst, and nodejs 2026-05-15 21:18:15 -07:00
deps.json fix: populate deps.json, add Jellyfin package refs, rename csproj to Jellyfin.Plugin.Lessons.csproj 2026-05-15 21:25:13 -07:00
flake.lock feat: scaffold Nix flake with dotnet-sdk_9, typst, and nodejs 2026-05-15 21:18:15 -07:00
flake.nix fix: populate deps.json, add Jellyfin package refs, rename csproj to Jellyfin.Plugin.Lessons.csproj 2026-05-15 21:25:13 -07:00
README.md Architecture and component overview 2026-05-15 21:12:08 -07:00

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

  1. 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.

  2. 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.

  3. Typst Lesson Template — A .typ template with frontmatter conventions for lesson metadata and embedded Jellyfin media references. Compiles to HTML.

  4. 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.

  5. 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 .typ files (with a web UI option)
  • Everything works fully offline on the homelab
  • One nix build produces the plugin

Development

nix develop    # dotnet-sdk, typst, node (for admin UI)

License

MIT