Een tijdregistratieapp bouwen: timers, urenstaten en rapportages
Een tijdregistratieapp legt vast wie aan wat heeft gewerkt, hoe lang, en of die tijd gefactureerd kan worden. Om er een te bouwen heb je klanten en projecten nodig om tijd op te registreren, een timer die een gesloten browsertab overleeft, een manier om items handmatig toe te voegen en te corrigeren, een wekelijkse urenstaat en rapportages die ruwe registraties omzetten in totalen. Een AI-app-builder kan op basis van één duidelijke prompt een werkende eerste versie maken. De beslissingen die ertoe doen gaan over regels: afronding, wie wat mag bewerken, wanneer een week wordt vergrendeld, en wat factureerbaar is.
Bepaal waarvoor je de tijd bijhoudt
Dezelfde app ziet er anders uit, afhankelijk van de reden erachter:
- Klanten factureren. Uren per klant, een tarief per persoon of project, en een nette export voor facturen. Nauwkeurigheid en een controleerbaar spoor zijn het belangrijkst.
- Salarisadministratie voor uurloners. Inklokken en uitklokken, pauzes, overwerkregels en goedkeuring door een manager. Lokale arbeidsregels gelden, dus controleer welke registraties je moet bewaren.
- Inzicht in waar de tijd naartoe gaat. Persoonlijk of teambreed inzicht, schattingen tegenover werkelijke uren. Snelheid van invoer weegt zwaarder dan goedkeuringsstromen.
Kies er één als hoofdtaak voor de eerste versie. Een urenregistratie voor een zzp'er en een shifklok voor een magazijn delen een timer en heel weinig verder.
Wat de app nodig heeft
Gegevens
| Tabel | Belangrijkste velden |
|---|---|
| Klanten | Naam, standaard uurtarief, actief ja/nee |
| Projecten | Klant, naam, budget in uren (optioneel), standaard factureerbaar ja/nee |
| Taken of categorieën | Project, naam (ontwerp, vergaderingen, support) — eerst optioneel |
| Tijdregistraties | Persoon, project, taak, starttijd, eindtijd, duur, notitie, factureerbaar ja/nee, status (concept, ingediend, goedgekeurd), gefactureerd ja/nee |
| Personen | Naam, e-mail, rol, kostentarief of factuurtarief |
Sla op elke registratie de start- en eindtijd op en bereken de duur daaruit. Registraties die als "2u 15m" zonder tijden worden ingevoerd, kunnen alleen de duur opslaan, maar houd wel een datum bij.
Pagina's
- Timer en vandaag: een grote start-stopknop, een projectkiezer, en de registraties van vandaag eronder.
- Weekweergave: een raster met projecten onder elkaar en dagen naast elkaar, waar mensen uren direct intypen. Veel mensen geven hier de voorkeur aan boven timers.
- Rapportages: uren per klant, project en persoon voor een datumbereik, met de verdeling factureerbaar en niet-factureerbaar, en een CSV-export.
- Beheer: klanten, projecten, personen en tarieven beheren.
Rechten
Leg vast wie wat mag voordat je bouwt:
- Mensen zien en bewerken hun eigen registraties.
- Managers zien de registraties van hun team en keuren weken goed.
- Alleen beheerders wijzigen tarieven, en het liefst zien alleen beheerders ze ook maar.
- Niemand bewerkt een registratie zodra die is goedgekeurd of gefactureerd, tenzij een beheerder deze weer openzet.
Die laatste regel maakt de rapportages betrouwbaar. Onze gids over inloggen aan je app toevoegen behandelt de inlogkant, en op rollen gebaseerde toegangscontrole behandelt de rollen.
Beslissingen en afwegingen
Timer, handmatige invoer, of beide
Timers zijn nauwkeurig als mensen ze altijd starten, wat niet altijd gebeurt. Handmatige invoer is snel voor mensen die hun week op vrijdag invullen. De meeste teams hebben beide nodig, plus een manier om een timerregistratie achteraf te bewerken. Als je er maar één bouwt, bouw dan de weekweergave; die is eenvoudiger en dekt het geval "vergeten te starten".
Waar de lopende timer leeft
Een timer die in de browser telt, verliest alles zodra het tabblad sluit. Sla de starttijd in de database op wanneer iemand op start drukt, en toon de verstreken tijd door die af te trekken van nu. De timer blijft dan lopen na verversen, op laptops en op telefoons. Beslis of één persoon twee timers tegelijk mag laten lopen. Meestal is het antwoord nee: een nieuwe starten stopt de oude.
Afronden
Gangbare regels zijn elke registratie omhoog afronden op 6, 15 of 30 minuten. Bewaar exacte tijden in de database en pas afronding alleen toe in rapportages en facturen. Toon in rapportages beide getallen, zodat niemand verrast wordt.
Vergrendelen en goedkeuren
Zonder vergrendeling kunnen de gefactureerde uren van vorige maand veranderen nadat de factuur is verstuurd. Een eenvoudig model: mensen dienen een week in, een manager keurt hem goed, en goedgekeurde registraties worden alleen-lezen. Als je vanuit de app factureert, markeer registraties als gefactureerd zodat ze niet dubbel gefactureerd kunnen worden.
Tijdzones en middernacht
Sla tijden op in UTC en toon ze in de tijdzone van de persoon. Beslis tot welke dag een registratie van 23:00 tot 01:00 behoort. Het gebruikelijke antwoord is de dag waarop hij begon.
Een eerste prompt die werkt
Bouw een tijdregistratieapp voor een ontwerpstudio van zes personen. Gegevens: klanten (naam, uurtarief), projecten (klant, naam, budgetuur) en tijdregistraties (persoon, project, start, eind, notitie, factureerbaar ja/nee, status concept/ingediend/goedgekeurd). Pagina's: een pagina Vandaag met een start-stoptimer en projectkiezer die de starttijd in de database opslaat, zodat de timer een verversing overleeft; een pagina Week met projecten als rijen en maandag tot en met zondag als kolommen, waar mensen uren direct kunnen intypen; een pagina Rapportages met uren per klant, project en persoon voor een datumbereik, gesplitst in factureerbaar en niet-factureerbaar, met CSV-export; en een beheerpagina voor klanten, projecten en personen. Er loopt maximaal één timer per persoon. Goedgekeurde registraties kunnen niet meer worden bewerkt. Sla tijden op in UTC en toon ze in de tijdzone van de gebruiker. Schoon, snel, toetsenbordvriendelijk ontwerp.
De prompt benoemt de tabellen, de pagina's, het gedrag van de timer en de vergrendelingsregel, de dingen die een AI anders zou moeten raden.
Bouwstappen
- Eerst projecten en handmatige invoer. Klanten, projecten, een formulier om een registratie toe te voegen, en een lijst. Zorg dat de totalen kloppen.
- Timer. Start, stop, één lopende timer per persoon, opgeslagen starttijd. Test door een timer te starten, het tabblad te sluiten en het weer te openen.
- Weekraster. Het intypen van uren in een cel maakt een registratie aan of werkt die bij.
- Login en rollen. Voeg ze toe voordat echte mensen het gebruiken, zodat niemand per ongeluk tarieven of andermans registraties ziet.
- Indienen en goedkeuren. Wekelijks indienen, goedkeuring door de manager, alleen-lezen na goedkeuring.
- Rapportages en export. Datumbereik, groepering, verdeling factureerbaar, CSV.
- Tarieven en factuurkoppelingen als je klanten factureert. Houd het aanmaken van facturen in een aparte stap of app; zie hoe je een factuurapp bouwt.
- Test de randgevallen. Een registratie over middernacht, een week met zomertijd, twee timers gestart vanaf twee apparaten, een goedgekeurde registratie bewerken.
Veelgemaakte fouten
- Tijd alleen in de browser bijhouden. Het werkt in de demo en verliest uren in echt gebruik.
- Opgeslagen waarden afronden. Je krijgt de exacte tijd nooit meer terug.
- Geen vergrendeling op goedgekeurde weken. Rapportages sluiten dan niet meer aan op facturen.
- Iedereen ziet elkaars tarieven. Verberg tarieven vanaf dag één per rol.
- Te veel verplichte velden. Als het registreren van tijd meer dan een paar seconden kost, stoppen mensen ermee en wordt de data fictie. Maak taak en notitie eerst optioneel.
- Een volledig projectmanagementsysteem in de tracker bouwen. Houd projecten als eenvoudige labels. Als je taken, borden en deadlines nodig hebt, is dat een projectmanagementtool, een afzonderlijke bouwklus.
Wanneer een kant-en-klare tracker de betere keuze is
Als je team een timer, een weekweergave en rapportages nodig heeft, doen speciale tijdregistratieproducten dit al goed. Ze bieden ook dingen die echt werk kosten om te bouwen: desktop- en telefoonapps, detectie van inactiviteit, koppelingen met agenda's en tools, en herinneringen om urenstaten in te vullen. Voor uurloners in de salarisadministratie gaat een tool die daarvoor is gebouwd veiliger om met pauzes, overwerk en bewaarplicht dan een eerste eigen versie.
Bouw zelf wanneer je regels niet passen, wanneer je uren wilt koppelen aan gegevens die je al bijhoudt (opdrachten, werkorders, retainers, facturen), wanneer de prijs per zetel voor een groot team oploopt, of wanneer tijdregistratie één onderdeel is van een grotere interne tool. Onze gids over bouwen versus kopen van software loopt de afweging door, en als je uren nu in een gedeelde spreadsheet staan, zie hoe je een spreadsheet omzet in een app.
Bouwen met Mythex
Bij Mythex beschrijf je de tracker in de chat en bouwt de agent hem in een live preview. Er wordt een eigen Postgres-database toegevoegd als registraties moeten worden opgeslagen; je kunt dat direct vragen of typ /database. De gebruiksvoorbeeld interne tool in de documentatie raadt aan één pijnlijke stap voor de eerste versie te kiezen, wat hier past: begin met registraties en de weekgrid, en voeg daarna timers en goedkeuringen toe.
Inloggen voor je team voeg je toe met je eigen authenticatieaanpak (recept inloggen toevoegen). Mythex-accounts zijn voor de mensen die bouwen, niet voor de mensen die je app gebruiken. Zodra de kernstroom werkt, laat /test de agent door de preview klikken (een timer starten, een registratie toevoegen, een rapport draaien) en melden wat er misgaat. Voor een visueel startpunt kun je de app-sjablonen bekijken.
Veelgestelde vragen
Welke functies heeft een tijdregistratieapp nodig?
Een lijst van klanten en projecten, een start-stoptimer, een manier om items handmatig toe te voegen of te corrigeren, een wekelijkse urenstaat en een rapport van uren per project en persoon. Goedkeuringen, factuurtarieven en exports komen daarna.
Hoe voorkom ik dat een timer tijd verliest als de browser sluit?
Sla de starttijd op in de database op het moment dat de timer start, en bereken de lopende duur vanaf die opgeslagen tijd. Dan gaat er niets verloren als je het tabblad sluit, ververst of naar een ander apparaat overstapt.
Moet tijd worden afgerond?
Sla de exacte start- en eindtijden op en pas afronding alleen toe in rapportages en facturen. Zo kun je de afrondingsregel later wijzigen zonder de geschiedenis te herschrijven.
Is het de moeite waard een eigen tijdregistratie te bouwen?
Meestal alleen als je regels ongewoon zijn of je uren wilt koppelen aan andere gegevens die je al bijhoudt, zoals opdrachten, klanten of facturen. Voor gewone timers en rapportages is een bestaande tracker goedkoper en sneller.