尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Dark-Mode Link-Hub für die Berufsschulklasse H-FI24-1B an der SBSZ Hermsdorf. Vanilla HTML/CSS/JS mit Vite, gehostet auf Vercel.
PDF in den Ordner berichte/ legen und pushen. Fertig.
Der Dateiname muss KW<Woche>_<Jahr> enthalten, z. B. KW43_26.pdf oder
SchoolBH_KW43_26.pdf. Daraus werden Titel und Sortierung erzeugt, der
neueste Bericht steht automatisch vorne und bekommt ein „NEU“.
Geht auch direkt auf GitHub im Browser: Ordner berichte/ öffnen →
Add file → Upload files → PDF reinziehen → Commit changes.
Vercel deployt danach automatisch.
Datei lks.json bearbeiten (auf GitHub: Datei öffnen → Stift-Symbol):
[
{ "datum": "2026-11-04", "fach": "Englisch", "art": "Klassenarbeit", "thema": "Business English" },
{ "datum": "2026-11-12", "fach": "LF8", "art": "Kurztest" }
]
datum im Format JJJJ-MM-TT, fach ist Pflicht, art und thema optionalDie aktuellen Preise für Super E5, E10 und Diesel kommen live von der Markttransparenzstelle für Kraftstoffe (MTS-K) über die Tankerkönig-API (Lizenz CC BY 4.0, deshalb steht klein die Quelle darunter).
Einrichtung, einmalig:
TANKERKOENIG_API_KEY = dein KeyDie Funktion api/sprit.js findet die Globus-Tankstelle in Hermsdorf automatisch
und speichert die Antwort 10 Minuten zwischen. Falls die falsche Tankstelle
erscheint, kann man mit TANKERKOENIG_STATION_ID eine feste ID setzen.
Lokal funktioniert /api/sprit nur mit npx vercel dev, bei npm run dev
steht dort „gerade nicht verfügbar“.
Tankerkönig liefert nur die aktuellen Preise. Den Verlauf der letzten 7 Tage
schreibt die Seite deshalb selbst mit: Jeder Abruf von /api/sprit (höchstens
alle 10 Minuten) legt den Preis pro Stunde in einer Redis-Datenbank ab (9 Tage lang),
dazu kommt ein täglicher Cron-Job (vercel.json → /api/sprit-speichern), damit
auch Tage ohne Besucher einen Wert haben. /api/sprit-verlauf liefert je Tag
Schnitt, Tiefst- und Höchstpreis; die Seite zeigt daraus den Verlauf und ob es
gerade teurer oder billiger ist als an den Vortagen.
Einrichtung, einmalig:
KV_REST_API_URL und KV_REST_API_TOKEN automatisch.CRON_SECRET als Umgebungsvariable setzen (beliebiger langer Text),
dann darf nur Vercels Cron-Job /api/sprit-speichern aufrufen.Ohne Datenbank bleibt der Verlauf einfach ausgeblendet. Die ersten Vergleiche erscheinen ab dem zweiten Tag, die volle Woche nach 7 Tagen.
├── index.html # Seite
├── style.css # Alle Styles
├── main.js # Einstieg Hub
├── spiele.html # Spiele-Seite
├── spiele.js # Einstieg Spiele
├── games/ # die 26 Spiele (Liste in games/katalog.js)
├── shell.js # gemeinsam: Sterne, POWER, Void
├── vite.config.js # baut beide Seiten
├── lks.js # Leistungskontrollen aus lks.json
├── lks.json # ← LKs hier eintragen
├── berichte.js # Berichte automatisch aus berichte/
├── berichte/ # ← PDFs hier ablegen
├── sprit.js # Spritpreise im Globus-Fenster
├── api/sprit.js # Vercel-Funktion → Tankerkönig-API (merkt sich nebenbei den Preis)
├── api/sprit-verlauf.js / sprit-speichern.js # Wochenverlauf (Redis) und täglicher Cron-Job
├── api/bestenliste.js # Klassen-Bestenliste (Redis, Regeln gegen Fake-Einträge)
├── vercel.json # Cron-Job für den Wochenverlauf
├── canvas.js # Sternenfeld im Hintergrund
├── void.js # Void-Funktion (Easter Egg)
└── public/ # Bilder, Favicon, Schriften (fonts/, selbst gehostet, OFL-Lizenz)
Unter /spiele.html (Gamepad-Icon in der Leiste) gibt es 26 Spiele, die meisten in
Leicht, Mittel und Schwer. Name, Beschreibung und Kategorie stehen zentral in
games/katalog.js. Auf der Spieleseite stehen die Lernspiele oben, die Klassiker
darunter. Der Hub zeigt nur drei Lernspiele als Vorschau, die ganze Fläche führt zur
Spieleseite.
Klassiker
games/pong.js): erster bei 7 Punkten gewinnt; gegen den Computer oder zu zweit an einem Gerät (W/S gegen ↑/↓, am Handy je ein Finger pro Hälfte)games/schach.js, Regeln + KI in games/schach-engine.js): eigene
Zuggenerierung inkl. Rochade, en passant, Umwandlung; der Computer rechnet je nach
Stufe 1, 2 oder 4 Halbzüge voraus, im Hintergrund (games/schach-worker.js).
Die Elo-Angaben (ca. 400 / 900 / 1400) sind grobe Schätzungen.
Premoves (schon ziehen, während der Computer denkt), Nachspielen mit den Pfeiltasten
und sechs Figurenstile: „Pixel“ ist selbst gezeichnet, die übrigen Sätze stammen von
Lichess und liegen mit Lizenzangaben in public/pieces/ (siehe public/pieces/LICENSE.md).
Effekte beim Schlagen (games/schach-effekte.js): Explosion oder passend zur Figur
(Bauer sticht, Springer stampft, Läufer schneidet, Turm rammt, Dame blitzt, König drückt platt)games/bits.js): eigenes Labyrinth, Bits sammeln, Bugs ausweichengames/snake.js): Leicht ohne Wände, Schwer mit Hindernissengames/minen.js): Minesweeper-Prinzip, 9×9 / 16×16 / 30×16, erster Klick ist sichergames/z2048.js): 5×5, 4×4 oder 3×3 Feldergames/vier.js, KI in games/vier-engine.js im Worker): in voller Auflösung gezeichnet, die Siegerreihe blinkt 4× grün; Modus „Zu zweit“ in der Werkzeugleiste, dann wird nichts gewertetgames/mauer.js): Ball und Schläger, jede Mauer wird schnellergames/skate.js, skate-welten.js, skate-fortschritt.js): Weltkarte mit 7 Welten (Stadt, Sonnenstrand, Dschungel, Eiswelt, Hölle, Himmel, Mond), die man durch Weiterfahren freischaltet (alle 450 m ein Portal); je Welt eigene Hindernisse und Physik (Eis rutscht, Himmel und Mond mit weniger Schwerkraft, Pilze federn, Lava-Geysire); Garage mit 8 Boards (Werte Tempo/Sprung/Schub, Spuren), gekauft mit dem Münzkonto; 3 Aufgaben mit Bonus-Münzen; Fortschritt im localStorage (Schlüssel skate-fortschritt-v1). In der Stadt die Zonen „Über den Dächern“, „Skatepark“ (Funboxen, Ledges, Publikum) und „Innenstadt“ (Läden, Autos, Scooter-Kids, Baustellen); Boost-Sprünge über Autos und durch den Feuerring; Highscore = Münzen (Tricks und Sprünge geben Bonus-Münzen); Tempo nur durch AnschiebenLernen (Prüfungsstoff, auf Zeit, mit Lösung bei Fehlern; gemeinsame Oberfläche in games/quiz-ui.js).
Jede Karte hat „So geht's“ zum Aufklappen: Erklärungen, Beispiele und Tabellen aus
games/lernhilfe.js (Befehle und Ports kommen direkt aus den Spieldaten).
games/binaer.js): Binär, Dezimal und Hex umrechnengames/subnetz.js): Netz, Broadcast, Maske, Hosts berechnengames/befehle.js): Aufgabe + System (Linux, Windows CMD/PowerShell, Git, Docker), den Befehl selbst eintippen; aufdeckbarer Hinweis kostet die halben Punktegames/ports.js): Standard-Ports und Dienstegames/csharp.js): Datentypen, Variablen, Konstruktoren, static, Properties (get; set;), Unterprogramme mit return, Signatur, Überladung, Standardparameter, oft mit Code-Ausschnitt; bei einem Fehler hält die Zeit an, bis man auf „Weiter“ tipptgames/osi.js): Protokolle, Geräte und Dateneinheiten auf die richtige Schicht ziehen (oder Taste 1–7)games/sql.js, kleine SQL-Engine im Browser in games/sql-engine.js): Abfrage schreiben, die Seite führt sie aus und vergleicht das Ergebnis (SELECT, WHERE, JOIN, GROUP BY, HAVING, ORDER BY, LIMIT, Aggregatfunktionen)games/gatter.js): AND, OR, XOR in eine Schaltung setzen (mit NOT), bis die Wahrheitstabelle passtgames/memory.js): Begriff und Erklärung aufdecken, Bestzeit zähltNeues Spiel: Eintrag in games/katalog.js, Modul mit start() in games/,
Lader in spiele.js und eine Vorschau in games/vorschau.js.
Siege, Highscores bzw. Bestzeiten speichert jeder Browser für sich (localStorage).
Eigene Kategorie mit fünf Karten: Spielautomat (games/casino-automat.js), Glücksrad (casino-rad.js), Blackjack (casino-blackjack.js), Roulette (casino-roulette.js) und Preis-Shop. Gemeinsamer Rahmen mit Kontostand und Tagesbonus in games/casino.js (fuer(id)), Highscore je Spiel = größter Gewinn in einer Runde. Gespielt wird mit Hotte-Dollar (H$), reinem Spielgeld: nicht kaufbar und nicht in echtes Geld tauschbar, gespeichert im Browser (games/casino-konto.js, Schlüssel casino:konto-v1).
games/preise.js): Snake-Skins, Block-Stapler-Farben, Ping-Pong-Bälle mit Leuchtspur und Abzeichen für die Klassen-Bestenliste. Die Spiele lesen ihren Stil über gewaehlt(kategorie).Unter jedem Punkte- oder Zeit-Spiel steht die Top 10 der Klasse (je Stufe). Nach einer
Runde kann man sein Ergebnis freiwillig mit Namen eintragen. Gespeichert wird in derselben
Upstash-Redis-Datenbank wie der Tankverlauf (api/bestenliste.js), ohne Datenbank bleibt
der Bereich ausgeblendet.
Regeln gegen Fake-Einträge:
., -, _; keine Links, keine Beleidigungen. Pro Name zählt nur der beste Wert.BESTENLISTE_ADMIN in Vercel auf ein langes Passwort setzen, dann
curl -X DELETE -H "Authorization: Bearer <Passwort>" "https://<seite>/api/bestenliste?spiel=snake&stufe=mittel&name=<Name>".Ganz verhindern lässt sich Schummeln so nicht (der Browser rechnet die Punkte selbst aus), aber offensichtliche Fantasiewerte und Spam werden abgewiesen.
Dunkler „Data terminal“-Stil: Icon-Leiste links (auf dem Handy unten), oben die
nächste Leistungskontrolle als Countdown, daneben die Spritpreise, darunter
Schnellzugriff und Berichtsheft. Zahlen in JetBrains Mono, Text in Public Sans,
der Titel in Press Start 2P. Alle drei Schriften liegen in public/fonts/ und
werden nicht von Google geladen. Icons sind als SVG direkt in index.html.
POWER (unten in der Leiste) schaltet die Seite aus, nur die Sterne bleiben.
npm install
npm run dev
Vercel-Projekt mit dem Repo verbinden, Framework Preset Vite. Jeder Push
auf main wird automatisch deployt.
games/bloecke.jsgames/flatter.js): Pixel-Computer fliegt durch Lücken zwischen Serverschränken, eine Taste; ein Modus, alle 10 Schränke ein neuer Abschnitt (schneller, engere Lücken)games/billard.js, Physik und 8-Ball-Regeln in games/billard-physik.js, Computer in games/billard-ki.js): Pooltisch in voller Auflösung, Kugeln rollen in 3D mit (Zahlen und Streifen drehen sich mit, games/billard-kugel.js), die Löcher sind Netze, in denen die versenkten Kugeln liegen bleiben, Zielen per Zeigen/Antippen, Stoßen durch Zurückziehen; Ziellinie mit Geisterkugel und Laufrichtung (auf Schwer kürzer); Fouls (Weiße versenkt, keine oder falsche Kugel zuerst) geben Ball in der Hand; der Computer sucht Lochstöße über die Geisterkugel, rechnet die besten mit derselben Physik voraus und streut je Stufe beim Stoß; Modus „Zu zweit“ in der Werkzeugleiste (wird nicht gewertet)games/bubble.js): Blasen im Wabenraster, ab drei gleichen Farben platzen sie, lose Gruppen fallen (doppelte Punkte); nach 7 / 5 / 4 Fehlschüssen schiebt sich oben eine neue Reihe ein; 4 / 5 / 6 Farben, Ziellinie lang / bis zur Bande / kurz; jede Farbe hat zusätzlich ein Zeichen; geräumtes Feld gibt Bonus und ein neues, volleres Feldgames/invasion.js): Bugs in Reihen mit dem Debugger abschießen, Firewalls als Deckung, Bonus-Bug, Wellengames/sudoku.js): Generator mit eindeutiger Lösung, 40 / 32 / 26 Vorgaben, Notizen, Bestzeit; jede falsche Zahl kostet ein Leben (5 / 4 / 3)games/ttt.js): Leicht macht Fehler, Mittel blockt immer, Schwer rechnet per Minimax alles durch (unschlagbar); Effekte: Siegerlinie mit Konfetti, Niederlage wackelt rot, Remis als graue Welle; Modus „Zu zweit“ in der Werkzeugleiste (X und O abwechselnd, wird nicht gewertet)games/schlagzeug.js, schlagzeug-klang.js): Bass, Snare, drei Toms, Hi-Hat (zu/offen), Crash und Ride mit Tastatur, Maus oder Finger; vier Kits: „Black Pearl“ und „Red Zeppelin“ mit echten Aufnahmen (je drei Anschlagstärken, public/drums/), „Elektro“ und „8-Bit“ per Web Audio erzeugt; Tasten frei belegbar (wird im Browser gespeichert); frei spielen mit Metronom (60–180 BPM) oder Rhythmus-Challenge mit Notenband (Leicht 80, Mittel 96, Schwer 112 BPM), Highscore = Punkte. Samples: AVL-Drumkits von Glen MacArthur, CC BY-SA 3.0 (Details in public/drums/LIZENZ.txt)