Geen rooster-appje uit de store. Geen abonnement. Geen WhatsApp-chaos meer.
🇳🇱 Nederlands · 🇬🇧 English
Eén gratis, op maat gebouwde app die precies doet wat een kantine met vrijwilligers nodig heeft — en verder niks. Geen los WhatsApp-groepje waarin het laatste rooster ligt te verstoffen, geen Excel-bestand dat maar op één laptop staat: iedereen ziet zijn eigen diensten, geeft beschikbaarheid door en ruilt met een collega. De beheerder keurt goed, betaalt uit en heeft altijd een actueel overzicht.
- Wat kan MHVwork?
- Rollen & bevoegdheden
- Technologie
- Installeren als app
- Aan de slag
- Projectstructuur
- Beveiliging
- Dank aan
- Gebruikte bibliotheken & licenties
- Licentie
|
|
|
|
|
|
|
|
Zwevende, glazen navigatie of de klassieke volle-breedte-balk — naar keuze per account. Licht, donker of een verborgen NASA-APOD-thema, los van de systeeminstelling. Wachtwoord-sterktemeter bij aanmaken én wijzigen.
| Rol | Toegang |
|---|---|
| 👤 Medewerker | Eigen rooster, beschikbaarheid, chat, profiel, agenda-export, dienst ruilen |
| 🛠️ Beheerder | Alles van medewerker + roosters beheren, medewerkers uitnodigen, uitbetalingen, aankondigingen, functies uitzetten voor één profiel — tenzij dev een specifieke bevoegdheid heeft ingetrokken |
| 💻 Dev | Eigen omgeving: accountbeheer, bevoegdheden per beheerder, functies app-breed uitzetten, aankondigingen, logboek, harde reset — géén toegang tot financiële gegevens |
Bevoegdheden zijn fijnmazig, niet alles-of-niets:
- Dev kan een beheerder-account specifieke bevoegdheden ontnemen (medewerkers toevoegen, diensten aanmaken/verwijderen/goedkeuren, uitbetalen, aankondigingen plaatsen, medewerkers beheren, functies per profiel uitzetten) zonder het hele account te schorsen — afgedwongen in zowel de app als de databaseregels zelf, en zichtbaar voor de betrokken beheerder in het eigen profiel
- Een beheerder kan nooit een aankondiging van dev verwijderen, en kan geen functie app-breed uitzetten (zoals de chat) — dat blijft voorbehouden aan dev. Een beheerder kan wel een functie uitzetten voor één profiel, bijvoorbeeld tijdens onboarding
- Harde reset (alleen dev): wist in één keer alle diensten, chat, meldingen en betaalhistorie, met dubbele bevestiging — accounts en logboek blijven altijd staan
| Onderdeel | Technologie |
|---|---|
| Hosting | GitHub Pages (gratis) |
| Database | Firebase Firestore (Spark-plan, gratis tier) |
| Authenticatie | Firebase Authentication |
EmailJS (optioneel: Gmail SMTP via Cloud Functions, zie index.js) |
|
| Push | Browser Notification API + Service Worker |
| PWA | Web App Manifest + Service Worker |
| Agenda-export | .ics-bestand (iPhone, Android, Windows, Mac) |
| Excel-export | SheetJS (client-side, geen server nodig) |
Geen build-stap, geen framework — puur HTML/CSS/JavaScript, direct leesbaar en aanpasbaar.
MHVwork is een Progressive Web App: geen appstore nodig.
🍎 iPhone / iPad
- Open MHVwork in Safari
- Tik op Deel
- Kies Zet op beginscherm
🤖 Android
- Open MHVwork in Chrome
- Open het browsermenu
- Kies App installeren of Toevoegen aan startscherm
💻 Desktop
Gebruik Chrome of Edge en klik op het installatie-icoon in de adresbalk.
Volledige installatie- en updatehandleiding: zie HANDLEIDING.md. Overzicht van alle wijzigingen per versie: zie CHANGELOG.md.
In het kort:
- Fork of clone deze repository
- Maak een eigen Firebase-project aan (Spark-plan volstaat)
- Vul je Firebase-configuratie in bovenaan
app.html,index.html,register.htmlenreset-pw.html - Publiceer de
firestore.rulesin de Firebase Console - Zet GitHub Pages aan voor deze repository
├── index.html Inlogpagina
├── register.html Accountregistratie (via uitnodigingslink)
├── reset-pw.html Wachtwoord opnieuw instellen
├── app.html De volledige applicatie (alle rollen)
├── voorwaarden.html Gebruiksvoorwaarden & privacyverklaring
├── promo.html Presentatie "Wat is MHVwork?"
├── firestore.rules Firestore security rules
├── manifest.json PWA-manifest
├── sw.js Service worker
├── index.js Optionele Cloud Functions (Gmail SMTP, accountbeheer)
├── icon.svg / icon-*.png App-iconen
├── HANDLEIDING.md Installatie- en updatehandleiding
└── CHANGELOG.md Overzicht van alle wijzigingen
- Alle databasetoegang loopt via Firestore Security Rules — medewerkers kunnen alleen hun eigen gegevens aanpassen, beheerders beheren roosters/uitbetalingen binnen hun bevoegdheden, en de dev-rol heeft geen toegang tot financiële gegevens
- Installatie wordt per account én per toestel bijgehouden (Profiel → App): is de app op één apparaat geïnstalleerd, dan komt de installatie-barricade nooit meer terug — een bekend maar nog niet geïnstalleerd apparaat krijgt alleen een kleine melding met een installeerknop
- Alleen een dev-account kan de dev-rol toewijzen of intrekken, en alleen dev kan een beheerder specifieke bevoegdheden ontnemen — of een app-brede functie uitzetten — allebei afgedwongen in zowel de app als de databaseregels, niet alleen in het scherm
- Wachtwoord-reset verloopt via Firebase's eigen, beveiligde flow
- Geschorste accounts worden bij inloggen direct geweigerd
⚠️ Controleer altijd de actuelefirestore.rulesvoordat je naar een productieomgeving gaat.
Met dank voor het testen en meedenken:
- R. Massalt
- I. Massalt
- C. Koning
- J. v Heun (dev)
- Jou, als je meehelpt!
MHVwork is zelf geschreven zonder framework, maar leunt op de volgende diensten en bibliotheken:
| Bibliotheek / dienst | Doel | Licentie |
|---|---|---|
| Firebase (Firestore, Auth, Cloud Functions) | Database, login, optionele mailserver | Google APIs Terms of Service |
| EmailJS | E-mailverzending vanuit de browser | Eigen servicevoorwaarden (emailjs.com/legal) |
| SheetJS (xlsx) | Excel-export in de browser | Apache License 2.0 |
| Nodemailer | Gmail SMTP-verzending (optioneel, index.js) |
MIT License |
| Outfit (Google Fonts) | Lettertype | SIL Open Font License 1.1 |
Deze applicatie is gebouwd voor en het interne gebruik van MHV. De broncode mag vrij bekeken, aangepast en hergebruikt worden voor gelijksoortige vrijwilligersorganisaties; gebruik op eigen risico en zonder enige garantie. Bovenstaande externe diensten en bibliotheken vallen onder hún eigen licentievoorwaarden (zie tabel hierboven) — check die zelf even als je deze app elders wil inzetten of doorontwikkelen.