BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
Alvis 포트나이트 챌린지를 위한 행운의 룰렛·로드아웃 주사위·드롭 스팟·빙고·전리품 경매·규칙 상승·크리에이터 리그·미니게임·통계 제공
Glücksrad, Loadout-Würfel, Drop-Spot, Bingo, Loot-Auktion, Regel-Eskalation, Creator-Liga, Minispiele und Stats für Alvis Fortnite-Challenges.
게임TypeScript · PLpgSQLGitHub @flobasstico온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Website für Alvis Fortnite-Challenges: konstruieren, auswürfeln, abstimmen und tracken. Gespielt wird in Fortnite. Die Seite wird per Screen-Share im Stream oder Video gezeigt.
| Seite | Funktion |
|---|---|
/ | Lobby im Fortnite-Stil: Alvi und die Top-3 der Creator-Liga als Party (Skin-Bilder unter /admin?tab=liga, sonst Profilbild), Aufträge & Stats, Kanäle, Support-a-Creator, Live-Hinweis und der ausgewählte Modus mit SPIELEN-Button (Auswahl wird im Browser gemerkt) |
/entdecken | Entdecken: alle Modi als Karten wie die Map-Auswahl in Fortnite (Feature-Banner, Reihen, Info-Fenster mit „Spielen“ und „In Lobby auswählen“). Eigene Vorschaubilder je Modus unter /admin?tab=seite, sonst gezeichnete |
/rad | Challenge-Glücksrad: alle Regeln gleich wahrscheinlich, mehrfach drehen stapelt die Regeln |
/loadout | Loadout-Würfel: 5 Slots aus dem Loot-Pool der aktuellen Season, mit Item-Bildern. Slots sperren oder einzeln neu würfeln, Raritäts-Filter, Heilung garantiert, jedes Item nur einmal. Solo oder Mehrspieler (jeder würfelt sein eigenes Loadout) |
/drop | Drop-Spot-Roulette: zufälliger Landebereich (Kreis um einen der gesetzten Spots, Größe per Regler) plus Zusatzregel. Mit mehreren Spielern (Namen eintippen) bekommt jeder seinen eigenen, farbigen Kreis, ohne Überschneidung |
/bingo | Bingo: Mehrspieler auf einer gemeinsamen 3×3-Karte – jeder hakt für sich ab. Karten mit eigenen Aufgaben erstellt jeder mit Twitch-Login (/bingo/karten), getrennt in die Ordner Admin-Karten und Zuschauer-Karten. Punkte: 1 pro Feld, +3 pro Bingo; höchste Punktzahl gewinnt. Zwei OBS-Overlays (Karte, Rangliste) |
/auktion | Loot-Auktion: 4 Creator mit je 500 Gold bieten verdeckt am eigenen Gerät auf zufällige Items. Der Höchstbieter gewinnt, bei Gleichstand entscheidet das Los. Haben alle geskippt, wird das Item verworfen. Gespielt wird, bis jeder 5 Items hat. Am Ende gibt es eine Loadout-Übersicht als Bild |
/eskalation | Regel-Eskalation: Grundregel per Glücksrad, danach kommt alle 4 Minuten (einstellbar) eine neue Zufallsregel dazu, mit Alarm-Ton. Die Regelkachel gibt es als OBS-Overlay |
/winchallenge | Winchallenge: Spiele mit je einer Zahl benötigter Siege, gemeinsamer Countdown (oder ohne Zeitlimit). Siege per +1/−1 zählen, Timer starten/pausieren, Spiele unterwegs ergänzen. Schlichtes OBS-Overlay unter /overlay/winchallenge (immer die neueste Winchallenge). Geschafft = alle Ziele erreicht |
/olympiade | Olympiade: Spiele per Textfeld eintragen, sie landen auf einem Glücksrad (gleiche Chancen, jedes Spiel nur einmal). Lobby mit Twitch-Login (mind. 2 Spieler), der Host dreht, gespielt wird extern, dann markiert der Host genau einen Sieger. Punkte steigen: 1. Spiel 1 Punkt, 2. Spiel 2 Punkte usw. Kleine Punkteanzeige als OBS-Overlay (/overlay/olympiade) |
/liga | Creator-Liga: Challenges, die die Creator außerhalb der Website spielen. Admins tragen sie unter Admin → Creator-Liga ein (Titel, YouTube-Link Pflicht, Kategorie, Datum, Sieger und optional Plätze, Teilnehmer aus der Creator-Liste – auch ohne Login; jeder Creator mit verlinktem YouTube-Kanal, Profilbild wird automatisch vom Kanal übernommen). Eine ewige Tabelle nach Ligapunkten = geschlagene Gegner (1 Punkt für jeden, der hinter einem landet: bei 8 Teilnehmern Sieger 7 … Letzter 0, im Duell Sieger 1; gleiche Plätze teilen sich den Platz), Kuchendiagramm „Anteil an allen Siegen“, Verlauf der Ligapunkte, Kopf-an-Kopf-Vergleich |
/stats | Challenge-Stats (über das Menü) mit zwei Tabs: 👥 Spieler – oben Alvis Kurzbilanz, darunter die Tabelle mit allen, die bei Challenges dabei waren (Teilnahmen, Siege, Siegquote, bei Bingo Punkte gesamt und Ø; Alvis Solo-Challenges zählen mit, geschafft = Sieg; Filter je Spiel, Spalten sortierbar) – und 🎮 Alvi – Erfolgsquote, Serien, Aufschlüsselung je Tool, Liste aller Challenges |
/admin | Glücksrad, Loot-Pool (inkl. neue Season), Drop-Spots/Map, Bingo-Aufgaben, Drop-Regeln, Ergebnisse eintragen, Nutzer (Twitch-Accounts sperren/entsperren) |
Stack: Next.js 15 (App Router), TypeScript, Tailwind CSS 4, framer-motion, Supabase (Postgres + RLS, Auth mit Twitch, Realtime, Storage).
npm install
cp .env.example .env.local # Supabase-URL + Publishable Key
npm run dev # http://localhost:3000
Checks: npm run lint, npm run typecheck, npm test (Vitest), npm run build.
Das Projekt Alvi (bvkpbqsmwmaczqfxvvgn, eu-central-1) ist schon angelegt. Migrationen und Startdaten sind eingespielt. Für ein neues Projekt spielst du supabase/migrations/*.sql in dieser Reihenfolge ein und danach supabase/seed.sql.
Datenbank-Änderungen gehen automatisch live: Die GitHub Action .github/workflows/supabase-migrations.yml spielt bei jedem Push auf claude/alvi-challenge-website, der supabase/migrations/ ändert, die neuen Migrationen per supabase db push ein. Schon eingespielte werden übersprungen (Tabelle supabase_migrations.schema_migrations). Manuell starten: GitHub → Actions → „Supabase-Migrationen“ → Run workflow. Dafür muss das Repository-Secret SUPABASE_DB_URL gesetzt sein: Supabase-Dashboard → Connect → Session pooler → Verbindungs-URI kopieren und [YOUR-PASSWORD] durch das Datenbank-Passwort ersetzen (Sonderzeichen im Passwort URL-kodieren).
https://bvkpbqsmwmaczqfxvvgn.supabase.co/auth/v1/callbackhttps://alvi.vercel.app) eintragen. Dazu kommen als Redirect-URLs https://<deine-domain>/auth/callback und für lokal http://localhost:3000/auth/callback.Admin-Rechte vergibt eine Liste von Twitch-Namen in der Tabelle admin_logins. Wer dort steht, wird beim ersten Twitch-Login automatisch Admin. Hat er sich schon eingeloggt, wird er sofort befördert. flobasstico und alvivb sind bereits eingetragen. Weitere Admins trägst du im Supabase SQL-Editor so nach (Twitch-Name kleingeschrieben):
insert into public.admin_logins (twitch_login) values ('twitch_name');
Das Repo in Vercel importieren und die Umgebungsvariablen NEXT_PUBLIC_SUPABASE_URL und NEXT_PUBLIC_SUPABASE_ANON_KEY setzen (Werte wie in .env.example).
Kleine OBS-Anzeigen für Loadout-Würfel und Drop-Spot: Jeder mit Twitch-Login hat einen eigenen festen Link (aufklappbar unter „📺 OBS-Overlay“ auf der Seite): /overlay/loadout/<twitch-name> zeigt das zuletzt gewürfelte Loadout als kleine Hotbar, /overlay/drop/<twitch-name> den Landespot (bei mehreren Spielern jeder mit Farbe) und die Zusatzregel. Beide aktualisieren sich bei jedem Wurf live; Hintergrund transparent.
Nachspielen: Abgeschlossene Challenges lassen sich identisch nachspielen – Button „🔁 Nachspielen“ auf der Runden-Seite bzw. in den Stats (Tab Alvi). Regel-Eskalation: exakt gleiche Grundregel und Zusatzregeln in gleicher Reihenfolge und Taktung. Winchallenge: gleiche Spiele, Ziel-Siege und Timer. Glücksrad und Drop-Spot: zeigen Alvis Regeln bzw. Landekreise. Bingo: „Nochmal mit dieser Karte“. Loot-Auktion und Loadout-Würfel haben keine Nachspiel-Option. Wer nachspielt (Twitch-Login), ist Host seiner Kopie und lädt Freunde per Link ein. Nur Runden, bei denen mindestens ein Admin mitmacht, erscheinen in Übersichten und Stats; alle anderen werden beim Beenden gelöscht. Alvis fester OBS-Link der Winchallenge zeigt nie Nachspiel-Runden von Zuschauern.
Spieleranzahl: Loot-Auktion, Regel-Eskalation und Loadout-Würfel (Mehrspieler) haben beim Eröffnen das Feld „Spieler (max.)“ (2–8, Standard 4). Sind alle Plätze belegt, kann niemand mehr beitreten.
Rad, Loadout und Drop: Als Admin erscheinen nach dem Wurf die Buttons „Challenge starten“ und „Für später merken“. Das Ergebnis (geschafft/gescheitert, Video-Link) trägst du unter /admin ein.
Bingo: Unter /bingo/karten erstellt jeder (Twitch-Login) eigene 3×3-Karten; sie heißen automatisch wie die Person (mehrere Karten werden durchnummeriert: „Kevin“, „Kevin 2“ …) – Karten von Admins im Ordner „Admin-Karten“, alle anderen unter „Zuschauer-Karten“. „Leere Felder zufällig füllen“ nutzt den Aufgaben-Pool aus /admin?tab=bingo. Eine Runde startet über „+ Neue Runde“: zuerst die Karte wählen oder neu erstellen, dann Lobby öffnen (Spieler max. 2–8), Mitspieler treten per Link bei, der Host startet. Alle spielen dieselbe Karte, jeder hakt seine eigenen Felder an. Punkte: 1 pro Feld, +3 pro Bingo (Reihe, Spalte, Diagonale), maximal 33. Der Host beendet die Runde, die höchste Punktzahl gewinnt (bei Gleichstand alle). Spielt Alvi mit, kommt die Runde in seine Quote: geschafft mit voller Karte. Runden ohne Admin werden nach dem Ende gelöscht. „🔁 Nochmal mit dieser Karte“ startet eine neue Lobby. OBS-Overlays (Links in der Runde, zeigen immer die neueste offizielle Runde): /overlay/bingo/karte (Alvis Karte, sonst die des Hosts) und .
Löschen: Admins sehen auf jeder Runden-Seite (Eskalation, Loadout, Auktion, Bingo, Winchallenge, Olympiade) „🗑 Runde löschen“ und in den Stats (Tab Alvi) neben jeder Challenge 🗑 – gelöscht werden Runde und Stats-Eintrag zusammen.
Mehrspieler für alle: Regel-Eskalation, Loadout-Würfel, Loot-Auktion, Bingo und Olympiade kann jeder mit Twitch-Login eröffnen (Chat-Abstimmung der Eskalation nur Admins). Offiziell – also in Übersichten und Stats – sind nur Runden, die ein Admin eröffnet oder bei denen ein Admin mitspielt; alle anderen werden beim Abschluss gelöscht, nicht beendete nach 2 Tagen (Olympiade 4).
Join-Code: Jede Runde mit Mitspielern (Auktion, Eskalation, Loadout, Bingo, Olympiade) hat einen 4-stelligen Code (nach 5 falschen Versuchen ist die Runde für diese Person 10 Minuten gesperrt). Host und Admins sehen ihn (verdeckt, „anzeigen“) samt „Einladungslink kopieren“ (Link enthält den Code) und brauchen selbst keinen. Alle anderen müssen ihn eingeben – die Rundenseite allein (z. B. aus dem Stream) reicht nicht. Der Code ist per API nicht lesbar.
Moderation: Bingo-Karten von Zuschauern sind erst nach Freigabe durch einen Admin für alle sichtbar (Ordner „🕓 Zu prüfen“ unter /bingo/karten); der Ersteller kann sie sofort selbst spielen. Höchstens 5 neue Karten pro Person und Tag (Admins unbegrenzt). Gesperrte Accounts (Admin → Nutzer) dürfen nur noch lesen – das erzwingt eine zentrale Prüfung vor jeder schreibenden API-Anfrage (check_request). Profile (Twitch-Name, Anzeigename, Bild) kommen ausschließlich aus der Twitch-Anmeldung. Nicht beendete Runden ohne Admin werden automatisch gelöscht: Olympiade nach 4 Tagen, Bingo, Eskalation und Winchallenge nach 2 Tagen.
Schreibrechte erzwingt die Datenbank per Row Level Security. Stammdaten und Live-Tools darf nur role = 'admin' ändern. Zuschauer dürfen eigene Bingo-Karten anlegen und Runden mitspielen; abhaken kann jeder nur auf seiner eigenen Karte, Punkte und Sieger berechnet die Datenbank beim Beenden. Bei der Loot-Auktion laufen Item-Ziehung, Gebotsprüfung (Mindestgebot, 10er-Schritte, Gold-Limit, ein Gebot pro Runde), Losentscheid, Gold-Abzug und die Auslosung am Ende komplett in Datenbankfunktionen. Fremde Gebote sind per RLS bis zur Auswertung unsichtbar.
Das klassische Layout vor dem Fortnite-Umbau liegt im Branch layout-klassisch. Die Commits des Umbaus beginnen mit Fortnite-Layout: und lassen sich gezielt rückgängig machen (git revert), ohne spätere Änderungen zu verlieren.
Unter /admin?tab=liga → „Videos aus den Kanälen“ gleicht „Kanäle jetzt abgleichen“ alle Creator-Kanäle (YouTube-Link beim Creator) ab. Shorts fallen raus, Challenge-Videos werden über Stichwörter im Titel erkannt (Standard „Challenge“, im Admin erweiterbar). Jedes Video zeigt, ob es schon in der Liga steckt; „Eintragen“ füllt das Formular vor, „Ausblenden“ entfernt unpassende Treffer dauerhaft.
Für alle (auch alte) Videos braucht es einen kostenlosen API-Schlüssel:
YOUTUBE_API_KEY = Schlüssel, dann neu deployen.Das Gratis-Kontingent (10.000 Einheiten/Tag) reicht locker: ein Abgleich kostet ca. 1 Einheit pro 50 Videos.
/overlay/bingo/ranglisteLoadout-Würfel Mehrspieler: Unter /loadout → 👥 Mehrspieler eröffnet ein Admin eine Runde und legt Seltenheiten und „mindestens eine Heilung“ fest. Den Seitenlink an die Mitspieler schicken; sie treten mit Twitch-Login bei und würfeln am eigenen Gerät ihr eigenes Loadout, mit Sperren und Neu-Würfeln wie solo. Alle sehen alle Loadouts live. Mit ▶ Start sind die Loadouts fest, danach kann niemand mehr würfeln oder beitreten. Mit ⏹ Ende wählt der Host den Sieger (oder ohne Wertung). Siege erscheinen in den Stats in „Loadout-Würfel (Mehrspieler) – Siege“; für Alvis Quote zählt ein Alvi-Sieg als geschafft.
Loot-Auktion: Unter /auktion eine Lobby öffnen und dabei Startgold, Items pro Spieler, Bietzeit, Seltenheiten und „Keine Duplikate“ einstellen. Den Einladungslink an die anderen Creator schicken, die sich mit Twitch einloggen und Platz nehmen. Starten kann man ab 2 Spielern. Jeder sieht nur sein eigenes Gebot, bis alle gehandelt haben oder die Bietzeit abläuft (dann wird automatisch geskippt). Das Mindestgebot ist 10 Gold. Wer weniger als 10 Gold hat, bietet nicht mehr mit. Seine offenen Slots werden am Ende der Auktion zufällig aus dem Pool zugelost, gratis und im Abschluss-Screen mit 🎲 markiert. Mit „Keine Duplikate“ kommen bereits gewonnene oder zugeloste Items nicht mehr vor. Reicht der Pool nicht, endet die Auktion vorzeitig. Nach dem Spiel wählt der Host auf dem Abschluss-Screen den Sieger (oder „ohne Wertung“); ein Alvi-Sieg zählt für seine Quote als geschafft. Bilder für die Items pflegst du unter /admin?tab=loot.
Regel-Eskalation: Unter /admin?tab=eskalation gibt es zwei getrennte Pools (beide starten leer): Grundregeln für das Glücksrad zum Start und Zusatzregeln, die nach jedem Timer-Ablauf dazukommen bzw. im Chat zur Abstimmung stehen. Mit „→ Grundregel“ / „→ Zusatzregel“ verschiebst du eine Regel in den anderen Pool. Zum Eröffnen braucht jeder Pool mindestens eine aktive Regel. Unter /eskalation eröffnet ein Admin eine Runde, dreht das Glücksrad für die Grundregel und drückt nach dem gemeinsamen Spielstart auf Start. Danach kommt nach jedem Ablauf des Timers automatisch eine neue Zufallsregel dazu, ohne Wiederholungen, solange der Pool reicht. Den Overlay-Link /overlay/eskalation/<id> (auf der Rundenseite zum Kopieren) bindet jeder Teilnehmer als OBS-Browserquelle ein: Der Hintergrund ist transparent, der Alarm läuft über OBS. Auf der Website muss man den Ton einmal per Klick aktivieren. Mitspieler treten über den Seitenlink bei, Twitch-Login nötig. Der Host ist automatisch dabei und kann Mitspieler entfernen. Mit ⏹ Ende beendet der Host die Runde und wählt den Sieger aus den Mitspielern, alternativ ohne Wertung. Siege erscheinen in den Stats in der Bestenliste „Regel-Eskalation – Siege“. Für Alvis Erfolgsquote zählt ein Alvi-Sieg als geschafft, jeder andere Sieger als gescheitert. Wer als Alvi gilt, steht in site_settings (main_creator_login = alvivb).
Regel-Eskalation mit Chat-Abstimmung: Beim Eröffnen den Modus Chat-Abstimmung wählen (Twitch-Kanal, Standard alvivb). Ab dem Start stimmt der Twitch-Chat über jede neue Regel ab: Die Website postet 3 Optionen in den Chat, Zuschauer schreiben !1, !2 oder !3. Jeder hat eine Stimme, die letzte zählt. Nach Ablauf des Timers gewinnt die Option mit den meisten Stimmen; bei Gleichstand entscheidet das Los, ohne Stimmen der Zufall. Die Gewinner-Regel wird mit Alarm eingeblendet, das Ergebnis geht in den Chat, und die nächste Abstimmung startet. Overlay und Regelkachel zeigen die Abstimmung mit Live-Balken.
chat:read chat:edit). Danach postet die Seite unter dem Twitch-Namen des Hosts. Das Token gilt etwa 4 Stunden. Ohne diese Rechte zählt die Seite trotzdem die Stimmen und zeigt den Abstimmungstext zum Kopieren.Kanäle, Impressum, Datenschutz (/admin?tab=seite): Links zu Alvis Kanälen (YouTube, Twitch, Instagram, TikTok, Merch, X, Discord) erscheinen als Icons im Kasten „Kanäle“ der Lobby (die Fußzeile enthält nur Impressum und Datenschutz). Vor dem Verlassen der Seite kommt eine Rückfrage (Abbrechen möglich). Bei YouTube sind mehrere Kanäle möglich (ein Kanal pro Zeile, Name | https://…) – Besucher wählen dann zuerst aus einer Übersicht. Leere Felder werden ausgeblendet. Impressum (/impressum) und Datenschutzerklärung (/datenschutz) sind Vorlagen mit [Platzhaltern] – vor einer Veröffentlichung ausfüllen (keine Rechtsberatung).
Lootpool pflegen (/admin?tab=loot): Unter „Lootpool aktualisieren“ fügst du eine Liste ein, z. B. • Pump Shotgun (Legendary). Überschriften wie „Waffen“, „Healing & Consumables“ oder „Mobility & Utility“ setzen den Typ. Die Seltenheit steht in Klammern, auf Englisch oder Deutsch. „Pool ersetzen“ tauscht den Pool der Season aus, „Nur hinzufügen“ ergänzt ihn und überspringt Duplikate. Jede Seltenheit hat ihr eigenes Bild: Klickst du auf das Bildfeld einer Variante, lädst du ihr Bild hoch; mit „Ein Bild für alle Seltenheiten“ bekommen alle Varianten (gleicher Name und Typ) dasselbe Bild, „Alle Seltenheiten deaktivieren“ schaltet sie gemeinsam ab. Klickst du auf den Namen der Seltenheit darunter (✎), kannst du die Variante bearbeiten, deaktivieren oder löschen. Beim Import bleiben Bilder pro Item und Seltenheit erhalten. Die aktuelle Liste liegt unter supabase/loot/aktuelle-season.txt.
Karte für das Drop-Spot-Roulette: Unter /admin?tab=spots (oder auf /drop über „🗺️ Karte & Spots bearbeiten“) lädst du die aktuelle Fortnite-Map hoch oder ersetzt sie. Am besten nimmst du ein quadratisches Bild. Passen die alten Spots nicht mehr, löschst du sie mit „Alle Spots löschen“ und setzt sie per Klick auf die Karte neu.
Neue Season: Unter /admin?tab=loot im Kasten „Season“ eine neue Season starten. Loot-Pool (mit Bildern), Spots und Map werden optional übernommen, die alte Season bleibt erhalten. Danach lädst du die neue Map hoch und setzt die Spots per Klick auf die Karte.