Een geavanceerde Progressive Web App voor het bijhouden van mechanische stier rijtijden tijdens StuDAY 2025, ontwikkeld door/voor GRNDbrekers - de makerspace van JC Bouckenborgh.
"Think like an engineer, build like a lunatic" - GRNDbrekers motto
- Camera integratie met voorkeur voor achtercamera
- Automatische compressie naar 150x150px bij 70% kwaliteit voor minimale opslag
- Foto's bij rijders zichtbaar in alle schermen
- Bewerk functie voor foto's van rijders die nog niet gereden hebben
- Strikte validatie van natuurlijke getallen
- Real-time filtering voorkomt ongeldige invoer
- Maximumlimiet controle (seconden β€ 59, honderdsten β€ 99)
- Enter-toets ondersteuning voor snellere invoer
- Unified lijst - geen apart podium, alle posities in één scrollbare lijst
- Medaille emoji's voor top 3 (π₯π₯π₯) in de lijst
- Groter logo dat even breed is als de lijst
- Live waitlist functie in aparte leaderboard pagina
- Naam en foto wijzigen voor rijders zonder tijd
- Bescherming - rijders op leaderboard kunnen niet meer bewerkt worden
- Modal interface voor gebruiksvriendelijk bewerken
- Home - Welkomstscherm met logo
- Rijders Toevoegen - Naam + foto invoer met bewerk opties
- Tijden Toevoegen - Gevalideerde tijdsinvoer
- Leaderboard - Unified ranglijst met foto's
index.html- Hoofdapplicatie met alle functionaliteitleaderboard.html- Standalone live leaderboard met waitlist togglemanifest.json- PWA configuratiesw.js- Service Worker voor offline functionaliteit
// Automatische compressie naar ~10-15KB per foto
compressImage(file, maxWidth = 150, maxHeight = 150, quality = 0.7)- Minuten: 0-999 (natuurlijke getallen)
- Seconden: 0-59 (automatisch begrensd)
- Honderdsten: 0-99 (automatisch begrensd)
- Real-time filtering van niet-numerieke karakters
// localStorage structuur
{
riders: [
{
name: "Rijder Naam",
photo: "data:image/jpeg;base64,/9j/4AAQ...", // Gecomprimeerde base64
time: "01:23:45", // MM:SS:HH formaat
timeValue: 8345, // Voor sortering (minuten*6000 + seconden*100 + honderdsten)
timestamp: "2025-09-19T..."
}
],
leaderboard: [...] // Gesorteerde resultaten
}git checkout -b imagesUpload naar images branch:
grndbrekers-bull-logo-transparant.jpg- Hoofdlogo (transparante achtergrond)icon-192.png- App icoon 192x192pxicon-512.png- App icoon 512x512px
Vervang in alle bestanden:
SergeHanssens/grndbrekers-bull-studay2025
Door je eigen GitHub username/repository-name
- Maak nieuwe public repository op GitHub
- Upload alle bestanden naar main branch
- Maak images branch en upload logo bestanden
- Repository β Settings β Pages
- Source: Deploy from a branch
- Branch: main / / (root)
- Save
Na 5-10 minuten beschikbaar op:
https://jouwusername.github.io/jouw-repo-naam
- Open app β "Start Leaderboard!"
- Voeg rijders toe:
- Klik "Foto Maken" β neem foto rijder
- Voer naam in β "Voeg Rijder Toe"
- Herhaal voor alle deelnemers
- Tijd toevoegen: "Naar Tijden" β selecteer rijder β voer tijd in
- Live monitoring: "Bekijk Leaderboard" voor real-time standings
- Correcties: Bewerk alleen rijders die nog niet gereden hebben
- Open
leaderboard.htmlop tweede scherm/tablet - "Waitlist" knop toont wachtende rijders
- "Ranking" knop toont huidige standings
- Auto-refresh elke 5 seconden
- Registratie: Zorg dat organizer je toevoegt met foto
- Wachtrij: Check waitlist op leaderboard scherm
- Resultaten: Bekijk je positie in live rankings
// In compressImage() functie aanpassen voor andere kwaliteit:
maxWidth = 150, // Kleinere waarde = minder opslag
maxHeight = 150, // Kleinere waarde = minder opslag
quality = 0.7 // 0.1 (laag) tot 1.0 (hoog)// In addTime() functie:
const timeString = `${minInt.toString().padStart(2, '0')}:${secInt.toString().padStart(2, '0')}:${hunInt.toString().padStart(2, '0')}`;
// Wijzig naar gewenst format// Huidige sortering: langste tijd eerst (wie bleef het langst op)
window.leaderboardData.sort((a, b) => b.timeValue - a.timeValue);
// Voor kortste tijd eerst:
window.leaderboardData.sort((a, b) => a.timeValue - b.timeValue);- App werkt zonder internet na eerste load
- Data opgeslagen in browser localStorage
- Service Worker cached alle bestanden
iPhone (Safari):
- Safari β Deel β "Voeg toe aan beginscherm"
Android (Chrome):
- Chrome menu β "App installeren"
- β iOS Safari 12+
- β Android Chrome 60+
- β Desktop browsers
- β Offline functionaliteit
- β Touch-optimized interface
- Lokale opslag: Alle data blijft op apparaat
- Geen servers: Geen data upload naar externe servers
- Foto's gecomprimeerd: Minimale opslagruimte
- No-tracking: Geen analytics of externe scripts
<!-- In index.html en leaderboard.html -->
<img src="https://raw.githubusercontent.com/username/repo/images/jouw-logo.jpg">/* CSS variabelen aanpassen */
--primary-color: #4CAF50; /* Hoofdkleur knoppen */
--accent-color: #FFD700; /* Goud voor leaderboard */
--background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);// In HTML sectie wijzigen:
<title>Jouw Makerspace - Bull Riding</title>// Vervang localStorage calls door API calls:
function saveData() {
// POST to your server
fetch('/api/save', {
method: 'POST',
body: JSON.stringify(window.riders)
});
}- Foto compressie: ~95% reductie (2MB β 15KB)
- App grootte: <100KB total
- Laadtijd: <2 seconden op 3G
- Offline capability: 100% na eerste load
- Chrome 60+ β
- Safari 12+ β
- Firefox 60+ β
- Edge 79+ β
- Controleer GitHub Pages status
- Wacht 10 minuten na eerste deployment
- Test in incognito/privΓ© modus
- Controleer HTTPS (vereist voor camera)
- Geef browser cameratoegang
- Test op fysiek apparaat (niet simulator)
// Verlaag compressie in compressImage():
quality = 0.5 // Van 0.7 naar 0.5
maxWidth = 100 // Van 150 naar 100- Browser localStorage gewist
- Implementeer data export/import functie indien gewenst
- Check images branch bestaat en gepushed is
- Test URL direct:
https://raw.githubusercontent.com/username/repo/images/logo.jpg - Zorg dat repository public is
GRNDbrekers is een makerspace project dat in 2020 startte in JC Bouckenborgh (Merksem), waarbij een gezamenlijke werkruimte wordt uitgebouwd voor het maken, leren, verkennen en delen.
- JC Bouckenborgh - Bredabaan 559, 2170 Merksem
- CO Merksem Dok - Emiel Lemineurstraat 72, 2170 Merksem
- Bib Park - Bibliotheek Park
- Broedplaats Borrewater - Borrewaterstraat 1, 2170 Antwerpen
- 3D-printers, lasersnijders, snijplotters
- Arduino's en microcontrollers
- Soldeerbouten en electronica tools
- En veel meer hightech apparatuur!
- #openGRND - Open toegang (wo/vr/za)
- GRNDbrekers Workshops - 5 per trimester
- IJSbrekers - Voor kinderen (5de/6de leerjaar)
- GRNDrepair - Repair CafΓ© (1ste/3de woensdag)
MIT License - Open Source voor alle makerspaces wereldwijd:
- β Gebruiken en aanpassen toegestaan
- β Commercieel gebruik voor goede doelen
- β Delen van verbeteringen wordt aangemoedigd
- β Attribution vereist: Vermeld GRNDbrekers als originele makers
Ontwikkeld met β€οΈ voor GRNDbrekers door Serge Hanssens
A.d.h.v. Python-code aangeleverd door Thomas Willems
Voor vragen: contact via JC Bouckenborgh of GitHub Issues