TimeMe - Das digitale Zeiterfassungssystem von Studio Justin Braun.
  • JavaScript 75.7%
  • HTML 11.5%
  • CSS 8.6%
  • Shell 4.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-09 14:36:33 +02:00
assets Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
public Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
scripts Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
src Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
test Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
tutorial Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
tutorial-v2 Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
.env.example Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
.gitignore Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
AGENT.md Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
CHANGELOG.md Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
DATEV-SS.md Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
package-lock.json Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
package.json Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
README.md Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
server.js Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
TODO.txt Initial import of TimeMe application 2026-10-09 14:36:33 +02:00
UBUNTU_DEPLOYMENT.md Initial import of TimeMe application 2026-10-09 14:36:33 +02:00

TimeMe – Studio Justin Braun

TimeMe

Arbeitszeiten einfach erfassen. Sicher im Überblick.
Mandantenfähige Zeiterfassung für Unternehmen – vom RFID-Kiosk bis zum Lohnbüro-Export.

Produktwebsite · Tutorials · Installation & Betrieb · DATEV-Schnittstelle

Node.js 22+ HTML, CSS und JavaScript SQLite Lizenz: proprietär


TimeMe verbindet drei eigenständige Oberflächen mit einem gemeinsamen Node.js-Backend. Die Daten aller Kunden werden mit Mandantentrennung in SQLite gespeichert. Der Quellcode wird von Studio Justin Braun gepflegt.

Produktbereiche

Bereich Zweck Oberfläche
Admin SJB B2B-Mandate, Zugänge, ID-Chips und Systemmeldungen verwalten admin.html
Manager Standorte und Mitarbeitende verwalten, Buchungen prüfen, Berichte und Abrechnungen erstellen manager.html
Zeiterfassung Check-in, Pausen und Check-out per RFID-Tastaturleser am Tablet kiosk.html
TM Export Geprüfte Abrechnungsdaten mit dem Lohnbüro austauschen tm-export.html
Produktwebsite Funktionen, Preise, FAQs und Kontakt /
Tutorials Schritt-für-Schritt-Videos und Playlist tutorials.html

Funktionen im Überblick

Zeiterfassung und Verwaltung
  • Mandanten, Standorte, Mitarbeitende und Berechtigungen verwalten.
  • Feste Arbeitszeiten oder Tagesmindeststunden sowie optionale Arbeitstage und individuelle Pausenmodelle hinterlegen.
  • RFID-Chips am Kiosk zuordnen; Check-in, Pause und Check-out serverseitig validieren.
  • Live-Übersicht, sekundengenaue Buchungsdetails, Korrekturanfragen und Änderungsverlauf verwenden.
  • Tages-, Wochen- und Monatsberichte als CSV oder PDF erstellen und per E-Mail versenden.
Abrechnung und Integrationen
  • Abrechnungszeiträume prüfen und Abwesenheitstage mit Schlüssel dokumentieren.
  • TimeMe-CSV für die Weiterverarbeitung exportieren. Das ist kein bestätigtes DATEV-ASCII-Importformat.
  • DATEV hr:files für die Übermittlung gemäß den DATEV-Vorgaben anbinden; Verfügbarkeit setzt passende DATEV-Berechtigungen und technische Freigabe voraus.
  • Geprüfte Arbeitszeit- und Abwesenheitsdatensätze mit verbundenen Lohnbüros über TM Export austauschen.
  • Zeitereignisse optional über einen abgesicherten Webhook an n8n weiterleiten.

Schnellstart

Voraussetzung: Node.js 22.9 oder neuer. TimeMe benötigt keine externe Datenbank.

npm ci
cp .env.example .env
npm start

Öffne .env und setze ein einzigartiges Admin-Passwort, ein zufälliges Token-Secret mit mindestens 32 Zeichen sowie die UID deines mandantenunabhängigen SJB-Admin-Chips. Ohne konfigurierte Chip-ID bleibt der Kiosk-Admin-Unlock gesperrt. Für den lokalen Schnellstart können optionale SMTP-, DATEV- und n8n-Einstellungen zunächst leer bleiben. .env wird von Git ignoriert.

Unter Windows PowerShell lässt sich die Konfiguration so kopieren:

npm ci
Copy-Item .env.example .env
npm start

Standardmäßig lauscht der Entwicklungsserver auf http://localhost:4000 (laut .env.example).

URL Seite
http://localhost:4000/ Produktwebsite
http://localhost:4000/admin.html Admin SJB
http://localhost:4000/manager.html Manager
http://localhost:4000/kiosk.html Zeiterfassung
http://localhost:4000/tm-export.html TM Export für Lohnbüros
http://localhost:4000/tutorials.html Tutorials
http://localhost:4000/api/health Health-Check

Für lokale Entwicklung ohne automatisches .env-Laden kann npm run dev verwendet werden. Ohne gesetztes Admin-Passwort nutzt eine lokale Neuinstallation das Startpasswort admin; ändere es vor jeder Bereitstellung.

Konfiguration

Alle Variablen und unverbindliche Beispielwerte stehen in .env.example. Zugangsdaten ausschließlich in der lokalen .env-Datei oder im Secret Store des Servers ablegen.

Bereich Variablen Zweck
Server HOST, PORT Bind-Adresse und HTTP-Port
Sicherheit TIMEME_ADMIN_PASSWORD, TIMEME_TOKEN_SECRET Adminzugang und Signatur von Sitzungen
Speicherung TIMEME_DB_PATH, TIMEME_AD_PATH SQLite-Datenbank und hochgeladene Werbemedien
E-Mail TIMEME_SMTP_HOST, TIMEME_SMTP_PORT, TIMEME_SMTP_USER, TIMEME_SMTP_PASSWORD, TIMEME_MAIL_FROM SMTP für Benachrichtigungen, Berichte und Kontaktformular
n8n TIMEME_N8N_WEBHOOK_URL, TIMEME_N8N_API_KEY, TIMEME_N8N_WEBHOOK_ENABLED Optionale Zeitereignis-Übertragung
DATEV TIMEME_DATEV_ENV, TIMEME_DATEV_CLIENT_ID, TIMEME_DATEV_CLIENT_SECRET, TIMEME_DATEV_REDIRECT_URI Serverseitige OAuth-/API-Konfiguration für hr:files

Das Kontaktformular sendet Nachrichten an service@st-braun.de und über SMTP eine Eingangsbestätigung an den Absender. YouTube-Player werden erst nach Zustimmung zu optionalen Medien geladen. Die Videotitel und Links stehen in public/tutorial-videos.json.

Ubuntu-Server

Für Ubuntu 26.04 stehen ein interaktiver Installationsassistent und ein Update-Skript bereit. Der Installer richtet Node.js, Nginx, systemd und Certbot ein und fragt Domains, Zugangsdaten und SMTP-Einstellungen ab.

chmod +x scripts/install-ubuntu.sh scripts/update-ubuntu.sh
sudo ./scripts/install-ubuntu.sh

Details zu DNS, TLS-Zertifikaten, Sicherungen, Updates und Wiederherstellung enthält UBUNTU_DEPLOYMENT.md. Nach der Ersteinrichtung können Updates über sudo timeme-update installiert werden.

Einrichtung eines Mandats

  1. In Admin SJB ein Mandat erstellen und Zugangsdaten sicher übergeben.
  2. Im Manager mindestens einen Standort anlegen.
  3. Mitarbeitende mit Personalnummer, Standort, Arbeitszeitmodell und Pausenregel konfigurieren.
  4. Am Tablet Mandat und Standort einrichten.
  5. RFID-Chip scannen und dem passenden Mitarbeitenden zuordnen.

Ein RFID-Leser muss die Chip-UID wie eine Tastatur senden und mit Enter abschließen. Pro Mitarbeitendem kann jeweils ein Chip aktiv sein. Kiosksitzungen und Standortzuweisung werden auf dem Tablet gespeichert. Die SJB-Admin-Chip-ID hat keinen eingebauten Standardwert und muss in .env gesetzt werden.

DATEV und Lohnbüro

Die DATEV-Cloud-Anbindung benötigt eine registrierte und freigegebene DATEV-App sowie korrekt erteilte Mandantenberechtigungen. Ein erfolgreiches OAuth-Token allein bestätigt noch nicht, dass der Mandant für den Datenbestand berechtigt ist. Ablauf und offene Formatfragen stehen in DATEV-SS.md.

Der TM Export ist ein separater Austausch geprüfter Zeit- und Abwesenheitsdaten mit verbundenen Lohnbüros. Die Formate für CSV und TXT lassen sich im Lohnbüroportal einstellen. Der Export ersetzt keine Prüfung durch das Lohnbüro oder Steuerberatung.

Entwicklung und Qualität

npm ci
npm test

Der Integrationstest startet eine isolierte Instanz mit temporärer SQLite-Datenbank und prüft zentrale Mandanten-, RFID-, Buchungs-, Korrektur- und Berichtsabläufe sowie die öffentlichen Seiten und deren Tutorialdaten.

Projektstruktur

assets/                 Logos, Sounds, Animationen und SJB-Motive
public/                 Eigenständige HTML-Oberflächen und statische Dateien
public/css/             Layouts für Desktop und Kiosk
public/js/              Frontendlogik
public/tutorial-videos.json
src/                    Authentifizierung, E-Mail und Datenbankzugriff
scripts/                Ubuntu-Installation und Update
test/                   Integrationstests
tutorial/               Quellmaterial für das erste Tutorial
tutorial-v2/            Skripte und Quellen für Tutorialproduktionen
server.js               Express-Server und API
AGENT.md                Entwicklungs- und Versionsregeln
CHANGELOG.md            Änderungen je Komponente und Version

Generierte Videos, lokale Renderings, Abhängigkeiten, .env und Laufzeitdaten werden nicht versioniert. Vorhandene Logos, Sounds und Animationen im Ordner assets/ sind die kanonischen Markenmedien.

Sicherheit und Datenschutz

  • Mandantendaten werden im Backend durch tenant_id-Prüfungen getrennt.
  • Passwörter werden gehasht gespeichert; Geheimnisse gehören ausschließlich in die Serverkonfiguration.
  • Die SQLite-Datenbank und hochgeladene Medien müssen regelmäßig gemeinsam gesichert werden.
  • Die Seiten zeigen unten rechts jeweils ihre eigene Versionsnummer; Änderungen und Versionsregeln sind in AGENT.md und CHANGELOG.md dokumentiert.

Lizenz

Eine Lizenzdatei liegt diesem Repository nicht bei. Nutzungsrechte richten sich nach der gesondert vereinbarten Lizenz von Studio Justin Braun.