Ein Desktop-Client für Canvas LMS mit einer Notenprognose, die Canvas selbst nicht liefert.
YuCanvas holt deine Kurse, Aufgaben und Fristen live aus der Canvas-API und bündelt sie in einem Dashboard. Gebaut mit Avalonia UI und C# / .NET 8, plattformübergreifend lauffähig auf Linux, Windows und macOS.
- Live-Sync mit Canvas -> Kurse, Aufgaben und Einreichungsstatus direkt über die Canvas REST API, parallel geladen für kurze Wartezeiten.
- Notenprognose -> rechnet Punkte aus bestandenen Intermediate- und Advanced-Aufgaben in eine Note um (nach einem gestaffelten Punkte-Schema).
- Fortschritt pro Kurs -> Anteil der bestandenen Basic-Übungen, als Balken auf jeder Kurskarte.
- Deadline-Übersicht -> sammelt alle anstehenden Fristen und hebt die nächste im Banner hervor, inklusive „in X Tagen".
- Sammelfristen-Logik -> erkennt Aufgaben, deren Deadline stellvertretend für einen ganzen Block an Basic-Übungen gilt, und löst sie zur nächsten offenen Basic auf.
- Einstellungen in der App -> Canvas-Zugang, Sync-Verhalten und Startseite werden direkt in der App verwaltet.
- Update-Erkennung -> die App merkt selbst, wenn eine neue Version veröffentlicht wurde, in den Einstellungen kann man sich den Changelog direkt in der App anschauen.
- Lokaler Cache -> beim Start erscheinen sofort die zuletzt geladenen Daten, während im Hintergrund frisch synchronisiert wird.
| Bereich | Technologie |
|---|---|
| UI-Framework | Avalonia UI 11 |
| Sprache / Runtime | C# · .NET 8 |
| MVVM | CommunityToolkit.Mvvm |
| API-Zugriff | System.Net.Http.Json |
| Markdown-Rendering | Markdown.Avalonia |
| Konfiguration / Secrets | Microsoft.Extensions.Configuration (User Secrets) |
| Schriftart | Inter |
YuCanvas/
├── Calculator/ Notenberechnung (Punkte → Note)
├── Controls/ Wiederverwendbare UI-Bausteine (Sidebar, Topbar)
├── Json/ Datenmodelle für die Canvas-API-Antworten
├── Media/ Modelle und Hilfen (Kurse, Deadlines, App-Einstellungen)
├── Models/
│ └── ViewModels/ Ein ViewModel pro Ansicht
├── Service/ Canvas-Anbindung, Sync, Cache, Einstellungen, Update-Prüfung
├── Styles/ Farbpalette und Control-Styles (Glassmorphism, Hover)
├── Views/
│ └── Components/ Kleine wiederverwendbare Bausteine (z. B. Badge)
├── App.axaml Anwendungseinstieg, Ressourcen-Registrierung
├── MainWindow.axaml
├── Program.cs Startpunkt, Konfiguration
├── CHANGELOG.md Änderungen pro Version (in der App als Popup abrufbar)
└── VERSION Versionsstand, gegen den die Update-Prüfung vergleicht
Die Trennung folgt einem klaren Prinzip: Service redet mit Canvas und liefert
rohe Daten, Models entscheidet, was damit passiert, Views zeigt es an.
- .NET 8 SDK oder neuer
- Ein Canvas-Konto
- Ein persönliches Canvas-Token
- In Canvas einloggen → Account → Settings.
- Unter Approved Integrations auf + New Access Token klicken.
- Einen Namen vergeben, Token erzeugen und sofort kopieren.
git clone https://github.com/Reiling-Jeff/YuCanvas.gitGehe vorher im Terminal mit
cdin einen Ordner, in dem du YuCanvas ablegen möchtest.Optional kannst du mit
git checkout devdie Version in Entwicklung auswählen - bedeutet: schnellere Updates, mehr Features. Features können dort jedoch unvollständig sein.
dotnet restore
dotnet runBeim ersten Start öffnest du Einstellungen → Canvas-Verbindung, trägst deine Canvas-URL und dein Token ein und klickst auf Speichern.
Solltest du Student*in der SAE sein, ist die URL
https://canvas.sae.edu.
Beim ersten Start ist der lokale Cache leer, daher lädt die App direkt frisch von Canvas. Ab dem zweiten Start erscheinen die Kurse sofort aus dem Cache, während im Hintergrund synchronisiert wird.
Die App vergleicht ihre eingebaute Version mit der Datei
VERSION auf dem main-Branch. Gibt es dort einen neueren Stand,
erscheint in Einstellungen → Aktualisierungen ein Hinweis, und der zugehörige
CHANGELOG lässt sich direkt in der App ansehen.
Aufgaben werden nach ihrem Namenspräfix in drei Kategorien eingeteilt und mit Punkten gewichtet:
| Kategorie | Präfix | Punkte pro bestandener Aufgabe |
|---|---|---|
| Basic | B… |
1 |
| Intermediate | I… |
2 |
| Advanced | A… |
4 |
Für die Note zählen die Punkte über den Basics - also die aus bestandenen
Intermediate- und Advanced-Aufgaben. Die Summe wird über eine gestaffelte Tabelle
in eine Note übersetzt: Von einem niedrigen Punktestand (z. B. 3-) steigt es bis zur Bestnote (1++) bei voller Punktzahl.
Diese Logik ist bewusst offen gehalten und lässt sich im Ordner Calculator an
ein anderes Schema anpassen.
Zukünftig soll dies in den Einstellungen in der App möglich sein!
- Sammelfristen – In der
DashboardViewModelgibt es eine Liste von Aufgaben-IDs, deren Deadline für einen ganzen Block Basics gilt. Trag dort die IDs ein, die in deinem Kurs als Sammelabgabe fungieren. - Notenschema – Punktwerte und Schwellen liegen im
Calculator-Ordner und sind zentral änderbar.
Auch diese Einstellungen sollen in die App integriert werden
- Mehr Einstellungen
- Noten-Bereich
- Kalender
- Module
- Ankündigungen
- Dateien
- Nachrichten
- „in X Tagen"-Anzeige aktualisiert sich ohne Neustart
- Bessere Aufgaben übersicht
- Aufgaben direkt in YuCanvas einsehen
- Einstellungen in der App
- Update-Erkennung mit Changelog-Popup
- Sync, Fortschritt, Notenprognose, Deadlines, Cache
Alle Details zu abgeschlossenen Versionen stehen im CHANGELOG.
YuCanvas steht unter der GPL-2.0-Lizenz.
YuCanvas ist ein privates Projekt und steht in keiner Verbindung zu Instructure oder Canvas LMS. „Canvas" ist eine Marke von Instructure, Inc.