CalendarChanger

Persoonlijk Project

ICS Proxy voor het genereren van gestructureerd en modificeerbare agendas

Zelfgehoste ICS-proxy die universitaire agendafeeds bruikbaar maakt in een gewone agenda-app, door de details van een event in de velden te zetten die clients daadwerkelijk uitlezen en door hoorcolleges, tentamens en practica op te splitsen in aparte abonnementen. Gebouwd in ASP.NET Core, gecontaineriseerd met Docker en uitgerold met Ansible.

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 gebruiken. 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 de informatie op en zet die in de velden die het ICS-formaat daar zelf voor heeft. 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 de versie uit de bron. 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 beschrijving 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