# README.md · Wie diese Seite gebaut ist
Über diese Seite
Diese Seite ist meine persönliche Website im Rahmen der IMS-Ausbildung und gleichzeitig Teil meiner Bewerbungsunterlagen. Ich habe sie von Hand gebaut, ohne Baukasten und ohne Framework.
Hier steht, warum sie so aussieht und funktioniert, wie sie es tut. Gestalterische Entscheidungen sind nachvollziehbar oder sie sind Zufall; ich möchte, dass meine nachvollziehbar sind.
- Aufbau
- Code-Editor als Oberfläche
- Technik
- HTML, CSS, JavaScript von Hand
- Abhängigkeiten
- keine
- Farbdesigns
- sechs, umschaltbar
- Sprachen
- Deutsch und Englisch
- Bedienung
- vollständig per Tastatur
Warum ein Code-Editor als Oberfläche
Die Seite richtet sich an Betriebe, die Applikationsentwicklung ausbilden. Deshalb ist die Oberfläche selbst eine Arbeitsprobe: Sie ist einem Code-Editor nachempfunden, also der Umgebung, in der ich täglich arbeite.
Jeder Abschnitt ist eine Datei, deren Endung zum Inhalt passt: skills.py, techstack.ts, kontakt.sql. Das ist kein Selbstzweck: Die Endung sagt schon vor dem Lesen, worum es geht, und der Explorer links zeigt die ganze Struktur auf einen Blick. Wer lieber klassisch navigiert, benutzt die Tableiste oben; beides führt zum selben Inhalt.
Schrift
| Schrift | Eingesetzt für | Begründung |
| JetBrains Mono |
Überschriften, Tabellen, Codeblöcke, Navigation |
Für Code entworfen: feste Zeichenbreite, klar unterscheidbares 0/O und 1/l/I. Hält Tabellenspalten optisch in Flucht. |
| Inter |
Fliesstext und Beschreibungen |
Eine Monospace-Schrift ermüdet über mehrere Sätze. Inter ist für Bildschirme optimiert und auch in kleinen Graden gut lesbar. |
Zwei Schriften mit klarer Aufgabenteilung: Monospace für Struktur und Daten, Inter für Sprache. Der Wechsel ist kein Stilmittel, sondern ein Hinweis darauf, welche Art von Information gerade folgt.
Farben
Die Farben stammen aus den echten VS-Code-Themes. Ein einziger Akzentton führt durch die ganze Seite: aktiver Tab, Links, Schaltflächen, Fokusrahmen. Wer ihn einmal zugeordnet hat, findet sich überall zurecht.
Grün, Orange und Rot sind für Bedeutung reserviert, nicht für Dekoration: Einstufungen bei den Skills, Notenwerte, Fehlermeldungen. Farbe ist dabei nie der einzige Träger einer Information. Überall steht auch der Text dabei, damit die Seite bei einer Farbsehschwäche verständlich bleibt.
- Editor
#1e1e1e
- Seitenleiste
#252526
- Aktivitätsleiste
#333333
- Statusleiste
#2d5876
- Akzent
#4FA3E3
css
/* Dark+, das Standarddesign von VS Code */
:root {
--bg: #1e1e1e; /* editor.background */
--sb: #252526; /* sideBar.background */
--act-bg: #333333; /* activityBar */
--status-bg: #2d5876; /* statusBar, gedämpft */
}
Grafische Elemente
Es gibt bewusst keine Schmuckbilder und keine Symbolfotos. Jedes grafische Element hat eine Aufgabe:
| Element | Warum es da ist |
| Technologie-Icons | Originallogos der jeweiligen Technologie. Ein Stack ist damit auf einen Blick erfassbar, ohne jede Zeile zu lesen. |
| Tableiste & Explorer | Tragen die Editor-Metapher und sind gleichzeitig die Navigation. Zwei Wege zum selben Ziel. |
| Zeilennummern | Verstärken die Metapher und zeigen nebenbei, wie lang ein Abschnitt ist. Auf schmalen Bildschirmen ausgeblendet, weil dort der Platz wichtiger ist. |
| Farbige Syntax | Die Codeblöcke sind echt eingefärbt statt als Bild eingebunden. Dadurch bleiben sie markierbar, durchsuchbar und für Screenreader lesbar. |
Bedienung und Barrierefreiheit
Die ganze Seite lässt sich ohne Maus bedienen. In der Tableiste wechseln die Pfeiltasten zwischen den Dateien, Pos1 und Ende springen an den Rand, Entf schliesst einen Tab. Jedes bedienbare Element hat einen sichtbaren Fokusrahmen, und ganz oben führt eine Sprungmarke direkt zum Inhalt.
Wer im Betriebssystem reduzierte Bewegung eingestellt hat, bekommt die Seite ohne Animationen. Jeder Abschnitt hat eine eigene Adresse: #projekte lässt sich zum Beispiel direkt verschicken.
Technische Angaben
| Bereich | Umsetzung |
| Frontend | HTML, CSS und JavaScript von Hand, ohne Framework und ohne Build-Schritt. Was im Browser ankommt, ist genau das, was ich geschrieben habe. |
| Backend | Serverless Functions (Node.js) für Login und geschützte Inhalte |
| Passwortschutz | scrypt mit Salt, Vergleich in konstanter Zeit; Sitzung über ein signiertes Token mit vier Stunden Laufzeit |
| Abhängigkeiten | Keine. Weder Frontend noch Backend laden ein npm-Paket. |
| Hosting | Vercel |
| Versionsverwaltung | github.com/Lro-rgb/PortfolioV1, der komplette Quellcode dieser Seite ist öffentlich einsehbar |
| Browser | Getestet in Chrome, Edge und Firefox. Funktioniert in jedem aktuellen Browser; ältere bekommen dieselben Inhalte, nur ohne einzelne visuelle Effekte. |
Warum ohne Framework
Ein Framework hätte mir Arbeit abgenommen, und genau deshalb habe ich darauf verzichtet. Tabverwaltung, Tastatursteuerung, Fokusverwaltung und der Login-Ablauf sind Dinge, die ich verstehen will, statt sie einzubinden.
Hilfsmittel
Ein Teil dieser Seite berührt Themen, die im Unterricht bisher nicht vorkamen, allen voran die Absicherung der Daten im geschützten Bereich: Passwörter als scrypt-Hash statt im Klartext, signierte Tokens mit Ablauf und die verschlüsselt abgelegten Unterlagen. Dazu kommt das Suchen hartnäckiger Fehler.
Für beides habe ich mit Claude Code gearbeitet und in Blogs und Dokumentationen nachgelesen, vor allem MDN und der Node-Dokumentation. Was ich übernommen habe, habe ich vorher nachvollzogen. Sonst stünde hier nicht, warum die Seite so gebaut ist, wie sie gebaut ist. Der Inhalt, der Aufbau und die Entscheidungen darüber sind meine.