Skip to content

Latest commit

 

History

124 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MHVwork logo

🍺 MHVwork

Het rooster van de MHV-kantine — gebouwd vóór en dóór de barhulp

Geen rooster-appje uit de store. Geen abonnement. Geen WhatsApp-chaos meer.


🇳🇱 Nederlands · 🇬🇧 English


PWA Hosting Database Licentie


🌐 Open de app · 📖 Handleiding · 📝 Changelog · 🎨 Promopagina


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.

📋 Inhoud


✨ Wat kan MHVwork?

📅 Rooster & diensten

  • Diensten aanmaken — ook zónder direct iemand toe te wijzen
  • Eindtijd "Sluit" voor diensten met een onbekende sluitingstijd, telt pas mee zodra de medewerker de werkelijke tijd doorgeeft
  • Bevestigen, of een afwijkende gewerkte tijd melden
  • Notitie + foto per dienst
  • Live voortgangsbalk en countdown op Home zodra een dienst bezig is
  • Export naar de eigen agenda (.ics) of Excel

🔄 Dienst ruilen

  • Medewerker plaatst een ruilverzoek in de groepschat
  • Collega's tonen interesse
  • Beheerder keurt goed
  • Dienst wordt automatisch overgezet, beide partijen krijgen een melding

💬 Groepschat & privéberichten

  • @naam, @iedereen, @beheerder, @dev — direct een pushmelding
  • Foto's, automatisch gecomprimeerd
  • Berichten vastpinnen of verwijderen
  • Privéberichten (DM) tussen medewerker en beheerder/dev

📢 Aankondigingen

  • Op Home alleen de titel, volledige tekst pas na aantikken
  • Basisopmaak (vet, tabs, witregels) bij het aanmaken
  • Speciale aankondigingen met eigen kleur en directe pop-up

💶 Uitbetalingen

  • Bevestigd → goedgekeurd → uitbetaald
  • Apart overzicht van wat nog goedgekeurd moet worden
  • Export naar boekhouding: nette grootboekregels per medewerker per dienst

🔔 Meldingen

  • In-app, e-mail én browser push
  • Een dag van tevoren, een uur van tevoren, direct na afloop
  • Vervolgherinnering als een dienst na verloop van tijd nog niet bevestigd is

🍺 Sociale hygiëne

  • Per medewerker bijhouden of iemand mag schenken (IVA-certificaat)
  • Zichtbaar voor iedereen via "Andere gebruikers" bij Profiel

📺 Idle-modus

  • Kiosk-weergave voor een tablet achter de bar
  • Rooster van vandaag met live tijdbalk per dienst
  • Start met een zelfgekozen 4-cijferige code, nergens opgeslagen

🎨 Weergave

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.


👤 Rollen & bevoegdheden

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

🛠 Technologie

Onderdeel Technologie
Hosting GitHub Pages (gratis)
Database Firebase Firestore (Spark-plan, gratis tier)
Authenticatie Firebase Authentication
E-mail 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.


📲 Installeren

MHVwork is een Progressive Web App: geen appstore nodig.

🍎 iPhone / iPad
  1. Open MHVwork in Safari
  2. Tik op Deel
  3. Kies Zet op beginscherm
🤖 Android
  1. Open MHVwork in Chrome
  2. Open het browsermenu
  3. Kies App installeren of Toevoegen aan startscherm
💻 Desktop

Gebruik Chrome of Edge en klik op het installatie-icoon in de adresbalk.


🚀 Aan de slag

Volledige installatie- en updatehandleiding: zie HANDLEIDING.md. Overzicht van alle wijzigingen per versie: zie CHANGELOG.md.

In het kort:

  1. Fork of clone deze repository
  2. Maak een eigen Firebase-project aan (Spark-plan volstaat)
  3. Vul je Firebase-configuratie in bovenaan app.html, index.html, register.html en reset-pw.html
  4. Publiceer de firestore.rules in de Firebase Console
  5. Zet GitHub Pages aan voor deze repository

📁 Projectstructuur

├── 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

🔒 Beveiliging

  • 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 actuele firestore.rules voordat je naar een productieomgeving gaat.


🙏 Dank aan

Met dank voor het testen en meedenken:

  • R. Massalt
  • I. Massalt
  • C. Koning
  • J. v Heun (dev)
  • Jou, als je meehelpt!

📦 Gebruikte bibliotheken & licenties

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

📄 Licentie

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.


🍺 MHVwork

Eén rooster. Eén team. Eén plek.

Gebouwd voor MHV.

Vragen, bugs of support: h.mhvwork@gmail.com

Releases

Packages

Contributors

Languages