
Wie ich mit LLMs Fußnoten in Marginalien umgesetzt habe
Als ich Maggie Appletons Essay über A Treatise on AI Chatbots Undermining the Enlightenment las, gefiel mit nicht nur der Text selber, sondern auch die Fußnoten in den Marginalien. Also rechts neben dem Haupttext anstelle von dem Ende des Artikels.
Ich habe es mit diesen LLMs versucht, umzusetzen im Rahmen eines Vibe-Codings [1] Bei Vibe-Coding programmiert das LLM, das per Fragen und Prompts des Benutzers seine Ziele erhält. : Qwen3-30B-A3B-Instruct lokal mit llama.cpp gehostet, und mit Claude Sonnet 4 über Copilot. Beide habe ich in Visual Studio Code eingesetzt.
Wichtiger Hinweis VORM Vibe-Coding
Am besten, bevor ihr mit eurem Vibe-Coding beginnt, setzt ihr euch vorher einen neuen git-commit in eurem Code-Ordner. So könnt ihr die LLMs an eurem Code rumspielen lassen und wenn das LLM es nicht hinbekommt, geht ihr einfach wieder zu eurem Commit zurück und alle Änderungen sind weg.
Bevor ihr Vibe-Coding startet, erstmal commiten:
git add .
git commit -m "Vorbereitung Vibe-Coding für Problem Soundso"
Wenn euer Vibe-Coding nicht nach vorne losging, sondern (wie alles im Leben) nach hinten, geht ihr einfach wieder zurück:
git reset --hard HEAD^
Wenn ihr das aufgeben wollt, was eure LLM da verzapft hat, aber nicht wegschmeissen, dann so:
git stash
Übrigens hilft euch das vorher committen auch, wenn ihr nach mehreren Stunden Vibe-Coding wissen wollt, was die LLM da alles gemacht hat. Denn die Dinger verlieren manchmal durch ihre Kontextbeschränkung das Wissen darüber, was sie am Anfang langer Sessions gemacht haben.
Den Status Deines Code-Verzeichnisses und aller darin befindlichen Dateien anzeigen lassen geht mit git status
oder:
git status --porcelain
git status --porcelain2
In der git-Dokumentation findest Du die Erklärung für Short Format von –porcelain.
Und dann kannst Du Dir anzeigen lassen, wie die einzelnen Dateien geändert wurden:
git diff HEAD -- folder/datei1 folder/nocheinfolder/datei2
Das selbe geht natürlich auch in VS Code, wenn Du da die git-Extension installiert hast.
Meine Erfahrungen beim Vibe-Coding
Qwen3 Coder 30B A3B Instruct.gguf:
Diese LLM ist lokal gehostet auf einem MacStudio bei uns auf Arbeit. Einzubinden fürs Vibe-Coding in Visual Studio Code geht das nur über die VS-Code Extension Continue, die aber dann alle Funktionalität erlaubt (Dateien anlegen, löschen, verändern, Terminal etc.). Qwen3 soll richtig gut sein, aber ich habe die folgenden Probleme gehabt:
- Continue ist als Extension auf der linken Seite von VS Code, aber da ist auch der aktuelle Folder angeordnet, so dass ich also entweder Continue oder die Folder anschauen kann
- In meiner Konfiguration hat Qwen3 sich manchmal in Schleifen verfangen und endlos dasselbe Zeichen gesendet (meist am Ende irgendein Emoji, aber was weiß ich, vielleicht wäre es noch weiter gegangen)
- mein Qwen3 hat das Problem nicht lösen können
- dafür ist Qwen3 ganz gut im Browserfenster fürs Miteinander reden und recherchieren
Claude Sonnet 4:
In Visual Code gibt es ansonsten einen Copilot-Chat, wo man verschiedene kommerzielle LLMs einbinden kann. Dort habe ich Claude Sonnet 4 für diese Aufgabe verwendet und ea hat geklappt, wie man sieht. Wir sind aber auch mindestens vier Umwege abgelaufen, bis wir an einem Ziel angelangt sind (Fußnoten am rechten Rand innerhalb des Haupttextes), das vom ursprünglichen Ziel abweicht (Fußnoten neben dem Haupttext auf der rechten Seite im White Space).
Ich mag bislang den Copilot-Chat mehr, weil der (mit verschiedenen LLMs) bislang öfter meine Probleme gelöst hat als nicht, und ich eben alle meine Dateien im Folder sehen kann (so sonst die Extension Continue läuft).
Vibe-Coding hat aber die folgenden Probleme:
- da man in Gesprächsform “programmiert”, dauert das wirklich lange. Oft ist die LLM für mehrere Minuten hintereinander am Nachdenken oder am Texte ändern. Manchmal muss man dann noch Hugo neu starten etc.
- Vibe Code is Legacy Code sagt auch Maggie Appleton: man lernt nicht so viel dabei, daher ist der Code unverständlich und somit Legacy Code:
Per the original definition , it’s code written in contexts where you “forget that the code even exists.” Or as the fairly fleshed-out Wikipedia article puts it: ”A key part of the definition of vibe coding is that the user accepts code without full understanding.”
Like many developers, I’m constantly grappling with how much understanding I’m willing to hand over to Cursor or Claude Code.
- Vibe-Code funktioniert anfangs oft, später aber auch oft nicht mehr
- da man selber den Code kaum versteht, sieht man auch keine Sicherheitsrisiken im Code (angefangen beim Verwenden von Google Fonts per URL, was Probleme mit der DSGVO nach sich zieht bis hin zu viel zu vielen Paketen und Abhängigkeiten, wenn man nicht aufpasst, usw.)
Fußnoten am Rand
Und wie funktioniert das nun mit den Fußnoten? Für kurze Anmerkungen
[4]
Wie diese hier.
eignet sich der fn
Shortcode am besten:
{{< fn id="2" text="Wie diese hier." >}}
Für ausführlichere Erklärungen
[5]
Diese Fußnote enthält fett markierten Text und sogar einen Link zu Wikipedia.
Sie kann mehrere Zeilen umfassen und unterstützt die vollständige Markdown-Syntax.
verwende ich den footnote
Shortcode.
{{< footnote id="4" >}}
Diese Fußnote enthält **fett markierten Text** und sogar einen [Link zu Wikipedia](https://de.wikipedia.org).
Sie kann mehrere Zeilen umfassen und unterstützt die vollständige Markdown-Syntax.
{{< /footnote >}}
Beide habe ich mir als Tastaturkürzel in meiner App Text Expander zugewiesen, damit das alles schnell klappt.
Technische Umsetzung
1. Hugo Shortcodes erstellt:
/layouts/shortcodes/fn.html
- für kurze Inline-Fußnoten/layouts/shortcodes/footnote.html
- für ausführliche Fußnoten mit Markdown-Support
2. CSS Float-Layout implementiert:
- Fußnoten verwenden
float: right
undclear: right
- Text fließt automatisch um die Fußnoten herum
- Responsive Design: auf kleinen Bildschirmen (≤1200px) werden Fußnoten zu normalen Blöcken
- Mac-ähnliches Design mit dezenten Schatten und SF Pro Text Schriftart
3. Minimales JavaScript:
- Nur eine Zeile Code - die gesamte Positionierung erfolgt über CSS
- Keine Scroll-Event-Listener oder komplexe Berechnungen nötig
Die Vorteile dieser Art von Umsetzung (und wir sind ja hier nur angekommen, weil ich andere Wege irgendwann ausschloß, als mir die Konsequenzen klar wurden oder sie nicht richtig funktionieren wollten):
- DSGVO-konform - keine externen Fonts oder Scripts
- Performant - CSS-basiert ohne JavaScript-Overhead
- Responsive - funktioniert auf Desktop und Mobile
- Elegante Integration - Text umfließt Fußnoten natürlich
Wie immer, wenn ich Vibe code, lasse ich mir am Ende alles zusammenfassen und trage das in Readme.md im entsprechenden Folder ein. Weil man beim Vibe-Coding weniger nachdenkt, merkt man sich auch viel weniger, was man gemacht hat. Und kann sich dann oft auch nicht daran erinnern, wie man was machen wollte.