uni-schedule

n8n node that reads a live university timetable (sked campus HTML) and turns it into a Markdown table for AI agents

Package Information

Released: this month
Downloads: 0 weekly / 0 monthly
Latest Version: 0.2.0
Author: phbreyzon

Documentation

n8n-nodes-uni-schedule

An n8n community node that reads a live university timetable
(a sked campus HTML "Veranstaltungsplan" page) and turns it into a
Markdown table, so that AI agents (or humans) can easily look over the current schedule.

It was built for the THWS FIW lecture plan, e.g.
https://fiw.thws.de/fileadmin/share/vlplan/BaInf1_2026ws.html,
but the calendar URL is a flexible node parameter, so any sked campus page in the same
format works.

Features

  • Fetches the timetable live on each execution (always up to date).
  • Configurable Calendar URL — change it whenever your study group / semester URL changes.
  • Window-bounded output by default (Next 7 Days): keeps the tool result small (~a few KB)
    so AI agents don't burn their context on the whole semester. Go bigger only when needed.
  • Outputs a clean Markdown table (week / day / single-table grouping).
  • Detects the red framing used by sked:
    • a red-framed event is flagged as changed (e.g. "Raumänderung", "Asynchrone Lehre",
      "Prüfung") or cancelled ("Entfällt");
    • a red day header (e.g. "Campus Day", public holiday) is reported as a special day
      and attached to that day's rows.
  • Structured JSON output is available as well.
  • Usable as a tool by n8n AI agents (usableAsTool).

Node options

Parameter Description
Calendar URL Public URL of the sked campus timetable page (default: THWS BIN1 winter semester 2026).
Period Next 7 Days (default), Next 14 Days, This Week, This Month, or Whole Semester (All). Controls how much output is generated — keep it small for AI agents.
Fixed Date Range Optional From / To date to override the period with an exact window.
Output Format Markdown Table (default), Events (JSON), or Markdown + Events.
Max Events Safety cap on the number of returned events (0 = no limit). Useful to bound context.
Group By Week (default), Day, or None.
Include Cancelled Events Keep or drop cancelled entries (default: keep).
Only Changed or Cancelled Return only the "what changed" digest (default: off).

Output fields

  • markdown – the Markdown document (when the format includes Markdown) with the covered
    date range shown in its header.
  • events – array of structured events (when the format includes events).
  • planTitle, sourceUrl, scrapedAt.
  • stats – { range, weeks, events, changed, cancelled }.

Each event contains: date, weekday, start, end, title, group, lecturer,
room, status (scheduled | changed | cancelled), changed, cancelled,
notes, note, dayNote, weekLabel.

Example output

# Veranstaltungsplan BIN1

_13 events across 1 weeks from 2026-10-19 to 2026-10-21 (changed: 1, cancelled: 0). Status legend: scheduled, changed (red frame in source), cancelled._

## 4. Studienwoche, 43. KW: 19. - 25.10.2026
_Special days: 2026-10-21 - Campus Day_

| Date | Time | Title | Group | Lecturer | Room | Status | Note |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 2026-10-19 (Mo) | 10:00-13:15 | SU Algebra [BIN] | Gruppe 1 | Keller | H.1.3 | changed | Asynchrone Lehre |
| 2026-10-20 (Di) | 08:15-09:45 | Ü Programmieren I [BIN] | Gruppe 1 | Zilker | I.2.18 | scheduled | - |

Installation

npm install
npm run build

Then load the package in n8n:

  • Local development: point the N8N_CUSTOM_EXTENSIONS / n8n-nodes volume at this
    folder, or run npm link inside it and link it into your n8n installation.
  • Community node: publish the package and install it via
    Settings → Community nodes.

Development

npm run build      # tsc + copy icons
npm run dev        # tsc --watch
npm run lint       # eslint
npm run format     # prettier

How the parsing works

The helpers in nodes/UniversitySchedule/helpers are dependency-free:

  • htmlTable.ts parses the HTML <table> into a grid of cells, resolving rowspan/
    colspan so each cell knows its column position.
  • parseSchedule.ts splits the page into week blocks, maps event cells to their day column,
    extracts time / title / group / lecturer / room / notes, and interprets the sked
    red-framing as changed/cancelled.
  • markdown.ts renders the parsed schedule as grouped Markdown tables.

License

MIT

Discussion