Skip to content

Architektur ​

Diese Seite erklärt den grundlegenden Entwurf des statischen Discord Data Package Explorer.

Kernprinzipien ​

  • Alles läuft im Browser
    Kein Backend, keine API-Aufrufe, keine Daten verlassen das Gerät des Nutzers.

  • Einfachheit vor Features
    Wir haben bewusst eine einfachere Architektur als im Original gewählt, damit der Code leichter zu prüfen und als statisches Artefakt zu warten ist.

  • Suche als Hauptfunktion
    Während Statistiken weiterhin verfügbar sind, liegt der primäre Wert darin, eigene Nachrichten über alle Server und DMs hinweg durchsuchen zu können.

Grober Datenfluss ​

  1. Nutzer zieht oder wählt package.zip per Drag & Drop
  2. Streaming-Unzip mit fflate (speichereffizient auch bei großen Paketen)
  3. Erkennung des Message-Roots, der Kontoinformationen und des Formattyps (altes CSV oder neues JSON)
  4. Parsen des Kanal-Index und der einzelnen Nachrichtendateien
  5. In-Memory-Datenstruktur mit vollständigem Nachrichteninhalt
  6. Reaktive Benutzeroberfläche (Svelte) zum Filtern, Suchen und Anzeigen

Alle Schritte laufen vollständig client-seitig ab.

Warum eine Single-File-Architektur? ​

Das Originalprojekt nutzte eine klassischere Struktur mit separaten Views, Komponenten und Stores. Wir haben den Großteil der Logik in src/App.svelte zusammengefasst.

Gründe:

  • Reduziert die Fläche, die Nutzer verstehen müssen, wenn sie den Code prüfen.
  • Einfacher als reines statisches Deployment.
  • Für diesen Anwendungsbereich (einmal parsen → lokal erkunden) waren komplexes Routing und aufwändiges State-Management nicht notwendig.
  • Schnellere Iteration bei kleiner Bundle-Größe.

Wichtige Teile der Logik (ZIP-Verarbeitung, Nachrichten-Parsing, Statistikberechnung) sind dennoch als eigene Funktionen innerhalb der Komponente klar abgetrennt.

Parsing-Ansatz ​

Wir haben die exzellente Streaming-Parser-Logik des Originalprojekts übernommen und angepasst:

  • Unterstützt Pakete mit und ohne c-Präfix bei Kanalordnern.
  • Verarbeitet sowohl alte CSV-Nachrichtendateien als auch moderne JSON-Dateien.
  • Nutzt DecodeUTF8 von fflate für effizientes Text-Dekodieren während des Streamings.
  • Behält den vollständigen Nachrichteninhalt (im Gegensatz zum Original, das Inhalte für reine Statistiken gekürzt hat).

Diese Änderung war notwendig, um die serverübergreifende Suchfunktion zu ermöglichen.

State-Management ​

Wir verwenden die eingebaute Reaktivität von Svelte (let-Deklarationen und $:-reaktive Statements) statt eines separaten Store-Systems. Das hält den Code zugänglich und liefert dennoch reaktive Aktualisierungen beim Filtern oder Suchen.

Deployment-Modell ​

Die Anwendung ist ausschließlich für statisches Hosting ausgelegt:

  • GitHub Pages (primär)
  • Jeder andere statische Host (Netlify, Vercel, Cloudflare Pages usw.)

Da es keine Server-Komponente gibt, ist der einzige „Backend“ der Browser des Nutzers.

Dokumentation ​

Getrennt von der Anwendung pflegen wir eine Dokumentation mit VitePress. Das ermöglicht:

  • Reichhaltigere Erklärungen (Architektur, Datenformate, Datenschutz)
  • Mehrsprachige Unterstützung ohne Aufblähung der Haupt-App
  • Klare Trennung zwischen dem Tool und seiner Dokumentation

Die Dokumentation selbst steht unter der Lizenz CC-BY-SA 4.0 (siehe LICENSE im docs-Ordner).

Kompromisse ​

Diese Architektur macht einiges einfacher und anderes schwieriger:

  • Einfacher: Auditierbarkeit, statisches Deployment, Such-Performance, Transparenz
  • Schwieriger: Komplexe UI-Flows, schwere Visualisierungen oder mehrseitige Navigation

Wir glauben, dass dieser Kompromiss für das erklärte Ziel eines reinen, vertrauenswürdigen, statischen Datenpaket-Explorers richtig ist.

Dokumentation lizenziert unter CC-BY-SA 4.0