Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Gratis mini games voor tussendoor, gemaakt door Gloop. Gebouwd met Next.js (App Router). Alle pagina's worden vooraf als statische HTML gebouwd, en elke game wordt pas geladen als iemand hem opent.
npm install
npm run dev # http://localhost:3000
Productiebuild testen:
npm run build
npm start
git init, git add ., git commit, git push).lib/site.js het veld url in (bijv. https://gloop.nl) en push. Dit wordt gebruikt
voor deellinks, de sitemap en Google. Laat je het leeg, dan gebruikt de site op Vercel
automatisch het productiedomein van het project.Spelers kunnen een account maken met alleen een spelersnaam en een pincode van 4 of 6 cijfers (geen e-mail). Records gaan dan automatisch mee naar elk apparaat. Accounts staan in Supabase; alleen de server praat met de database.
supabase/schema.sql en klik Run.select cron.schedule('gloop-cleanup', '17 3 * * *', 'select public.gloop_cleanup()');
Zo worden accounts die 400 dagen niet zijn gebruikt automatisch verwijderd (dat belooft de privacyverklaring).SUPABASE_URL – Project Settings → API → Project URLSUPABASE_SERVICE_ROLE_KEY – Project Settings → API → service_role key (geheim, nooit NEXT_PUBLIC_ ervoor zetten)Zonder deze instellingen werkt de site gewoon; op de inlogpagina staat dan dat inloggen nog niet beschikbaar is.
Lokaal (npm run dev) wordt zonder instellingen een tijdelijke database in het geheugen gebruikt.
| Bestand | Wat |
|---|---|
lib/accountRules.js | Regels voor namen en pincodes (o.a. blokkade van makkelijke codes) |
lib/account.js | Inloggen/uitloggen in de browser en records automatisch bewaren |
lib/merge.js | Records van apparaat en account samenvoegen (beste score wint) |
lib/server/* | Database, pincode-hashing (scrypt), sessies, beperking van inlogpogingen |
app/api/account/* | De account-API |
lib/server/admin.js, app/api/beheer/*, app/beheer | Beheer (zie hieronder) |
Op /beheer kan een beheerder spelers zoeken, verbergen op de ranglijst, hernoemen, hun scores wissen of het account verwijderen,
en per spel/niveau losse scores van de ranglijst halen (bijv. bij valsspelen). Een weggehaalde score komt niet terug via een ander apparaat
(staat in de kolom players.cleared). Elke beheeractie staat in de Vercel-logs ([gloop beheer]).
Er zijn twee sloten, omdat een pincode van een kinderaccount makkelijk te raden is:
supabase/schema.sql opnieuw (voegt is_admin en cleared toe).is_admin op true.ADMIN_PASSWORD toe (minstens 12 tekens, niet je pincode), en deploy opnieuw.Lokaal zonder Supabase: GLOOP_DEV_ADMIN=JouwNaam ADMIN_PASSWORD=... npm run dev.
Gloop is te installeren als app op telefoon, tablet en computer, zonder app store.
| Bestand | Wat |
|---|---|
app/manifest.ts | Naam, kleuren, icoontjes en snelkoppelingen van de app |
public/icons/ | App-icoontjes (icon-* gewoon, maskable-* met extra rand voor Android) |
app/apple-icon.png | Icoontje voor iPhone/iPad |
app/sw.js/route.ts | Service worker: bewaart pagina's en games, zodat ze ook offline werken |
components/InstallApp.tsx | Knop/banner "Installeren" (met uitleg voor iPhone/iPad en Mac) |
Leuke vernieuwingen voor spelers staan in lib/updates.js en op de pagina /nieuw.
Zet een nieuw nieuwtje bovenaan de lijst. Met popup: true krijgen spelers één keer een pop-up
"Nieuw in Gloop!" (nooit tijdens het spelen; nieuwe bezoekers krijgen geen oude nieuwtjes).
Technische of kleine verbeteringen horen er niet in.
| Map / bestand | Wat staat erin |
|---|---|
lib/site.js | Sitegegevens: eigenaar, e-mail, plaats, KvK, hosting, live-URL |
lib/games.js | Lijst met alle games (titel, categorie, kleuren, speelbaar of "Binnenkort") |
lib/engine/*.js | Eén bestand per game (canvas/DOM-code) |
lib/engine/index.js | Koppeling game-id → game-bestand (code-splitting) |
lib/engine/common.js | Gedeeld resultaatscherm, delen en dagelijkse uitdaging |
lib/store.js | Lokale opslag (records, gespeelde potjes, naam), dagelijkse uitdaging, recordteksten |
lib/content.js | Teksten van info- en juridische pagina's (privacy, cookies, voorwaarden, FAQ…) |
lib/blob.js | Gloopie-tekening (SVG) en iconen |
app/ | Pagina's (home, games, ranglijst, profiel, info-pagina's, sitemap, robots) |
components/ | React-onderdelen (header, footer, gamekaarten, uitdaging…) |
app/globals.css | Alle vormgeving (Gloop-huisstijl) |
Alles staat in lib/stickers.js:
This is the beginning of the README. Read the rest at the original. Read the full README ↗