CalendarChanger

Persoonlijk Project

ICS Proxy voor het genereren van gestructureerd en modificeerbare agendas

Een zelf-hostbare ICS-proxy die iCalendar-feeds herstructureert en verrijkt met extra informatie om het bestand bruikbaarder te maken.

Over het project


CalendarChanger is een zelf-hostbare iCalendar (ICS) proxy die agenda feeds opschoont en verrijkt met extra data. Het project is begonnen toen de University of Twente in 2024 besloot om TimeEdit te gebruiker. Ondanks dat TimeEdit technisch gezien valide ICS bestanden produceert, worden alle gegevens in de omschrijving van het agenda item gestopt ondanks dat het ICS protocol hier losse velden zoals LOCATION en ATTENDEE voor heeft ingesteld. Dit zorgt ervoor dat de agenda items onleesbaar zijn geworden in de meeste apps. CalendarChanger fungeert als een laag tussen TimeEdit en de agenda app, het haalt informatie op en zorgt ervoor dat alle normale ICS velden gevult en geformatteerd worden. Titels van afspraken worden ingekort, leraren worden als aanwezigen toegevoegd en lessen kunnen van examens worden gescheiden in losse feeds waardoor gebruikers de agenda items aparte kleuren kunnen geven. Het voegt ook rijkere context toe door Apple Maps-locaties in te voegen en gebouwnamen te koppelen aan een aangepast Mazemap endpoint dat locaties naar Mazemap-locaties omzet. Het systeem draait continu, haalt updates op van de originele feed en levert altijd actuele abonnementen. De webinterface stelt gebruikers in staat om gebeurtenissen te verbergen of aan te passen, zoals geannuleerde lessen of gewijzigde tijden, ook al is de bron alleen-lezen. Elke gebeurtenis wordt gehashed op basis van zijn inhoud, dus wanneer TimeEdit een gebeurtenis bijwerkt, keert deze terug naar zijn originele vorm, wat consistentie garandeert. De backend is gebouwd met ASP.NET Core en Razor Pages met Docker en automatisch gepushed met Ansible op een private cloud-server.

Key features


  • ICS Proxy: Feeds herschrijven om correcte iCalendar-velden te gebruiken in plaats van alle informatie in de beschrijven te stoppen
  • Smart Grouping: Maakt afzonderlijke abonnementen voor hoorcolleges, examens en practica
  • Webinterface: Bewerk of verberg gebeurtenissen zonder de originele bron te wijzigen
  • Event Hashing: Herstelt bewerkte gebeurtenissen automatisch wanneer de bron verandert
  • Locatie-integratie: Voegt Apple Maps en Mazemap-links toe voor klaslokaal details
  • RFC 2445 Compliance: Voert standaardconforme ICS-gegevens uit
  • Continu synchroniseren: Vernieuwt periodiek vanaf de originele bron
  • Dockerized Deployment: Geautomatiseerd via Ansible voor continuous deployments