尚未检测到更新。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)