115f0f5671c23a9ba2cd0ade7dd4fdc0f70ac8d1
Projektübersicht — README
Übersicht
Dieses Projekt ist eine lokale Single-Page-Webanwendung zur Verwaltung elektrotechnischer Projekte und Sitzungsübersichten. Die Anwendung besteht aus:
- einem Frontend in
Test.html,styles.cssund den JS-Modulen unterpublic/js/ - einem einfachen Node.js-Server in
server.js - einem Datenspeicher in CSV-Dateien unter
sessions/ - einem Docker-Setup unter
Docker/
Datei- und Komponentenübersicht
Wichtige Laufzeit-Dateien
-
server.js- Node.js/Express-Server
- dient als API für das Frontend
- stellt statische Dateien (
Test.html, die Module unterjs/,styles.css, etc.) bereit - implementiert Endpunkte:
GET /→ liefertTest.htmlGET /load-all→ lädt alle CSV-Dateien aus dem aktivensessions/<DEPARTMENT>/-Ordner inkl._people.csvPOST /save-csv→ speichert eine CSV-Datei (Dateiname wird validiert)POST /delete-csv→ löscht eine CSV-DateiGET /health→ Gesundheitscheck
- legt das
sessions-Verzeichnis beim Start an, falls es nicht existiert - beendet sich mit aussagekräftiger Fehlermeldung, wenn der Port belegt ist
-
package.json- definiert den Node.js-Startbefehl
npm start - enthält Produktionsabhängigkeiten
expressundcors
- definiert den Node.js-Startbefehl
-
package-lock.json- wird für reproduzierbare Docker-Builds verwendet (
npm ci)
- wird für reproduzierbare Docker-Builds verwendet (
-
public/js/(Module)- Die Client-Logik ist in kleine klassische Script-Dateien aufgeteilt (alle Funktionen global auf
window):globals.js,utils.js,ui.js,date-picker.js,csv.js,server.js,store.js,weeks.js,board.js,people.js,projects.js,load.js,gantt.js,showmode.js,tabs-auth.js,pdf.js,init.jssowie die Plan-Module unterjs/plan/(plan-state,plan-build-gantt,plan-gantt,plan-drag,plan-modals,plan-schedule). - rendert das Projektboard, die Projekt- und Personenverwaltung sowie die Auslastungsansicht
- lädt Daten über den Server und speichert Änderungen zurück als CSV
- verwendet
currentDepartmentzur Trennung von Abteilungen (ELT,HLS,ARCH) - speichert:
sessions/<DEPT>/<WEEK>.csvsessions/<DEPT>/_people.csv(globale Personenliste pro Abteilung)
- sortiert Sitzungen nach Kalenderwoche, nicht alphabetisch
- sperrt historische Sitzungen automatisch (bis auf die chronologisch letzte)
- Personen sind global pro Abteilung verwaltet; historische Sitzungen behalten ihre lokalen Personenkopien
- Die Client-Logik ist in kleine klassische Script-Dateien aufgeteilt (alle Funktionen global auf
-
Test.html- die Benutzeroberfläche der Anwendung
- lädt
styles.cssund die JS-Module ausjs/in fester Reihenfolge (sieheAGENTS.md) - enthält die Abteilungsauswahl, Sitzungsnavigation, Tab-Navigation und das Passwort-Modal
-
project-plan.html- die Planungsansicht (GANTT/TODOs/Meilensteine) pro Projekt
- öffnet sich in einem neuen Tab über
openProjectPlan()(js/gantt.js) - lädt nur die gemeinsamen Helfermodule plus
js/plan/*
-
styles.css- Layout und Styling der Oberfläche
Docker-bezogene Dateien
-
Docker/Dockerfile- Basis-Image:
node:20-alpine - kopiert
package.jsonundpackage-lock.json, installiert Produktionsabhängigkeiten mitnpm ci - kopiert den Rest des Projekts in
/app - legt sicherheitshalber
/app/sessionsan - läuft als nicht-root-User
node - enthält einen
HEALTHCHECKauf/health - startet
node server.js
- Basis-Image:
-
docker-compose.yml- definiert den Service
projektuebersicht - baut das Image aus dem Projektstamm mit
Docker/Dockerfile - mappt Port
3003:3003 - bindet das Host-Verzeichnis
./sessionsin den Container nach/app/sessions - setzt
restart: unless-stopped - definiert einen
healthcheck
- definiert den Service
-
.dockerignore- schließt unnötige Dateien aus dem Docker-Build aus:
Docker/,node_modules/,npm-debug.log,.git,.gitignore
- schließt unnötige Dateien aus dem Docker-Build aus:
Sonstige Dateien
-
dein_bild.ico- optionales Icon, wird vom Server statisch ausgeliefert, wenn angefragt
-
AGENTS.md- Projektnotizen / Dokumentation, aber nicht Teil des Anwendungslaufs
Speicherorte und Datenfluss
Speicherung
- Alle persistierten Daten werden als CSV-Dateien in
sessions/gespeichert. - Innerhalb von
sessions/existieren Abteilungsordner:sessions/ELT/sessions/HLS/sessions/ARCH/
- Jede Abteilung enthält mindestens:
_people.csv→ globale Personenliste mit Rollen und vollständigem NamenKW_XX___YYYY.csvoder vergleichbare Sitzungsdateien → Sitzungsdaten mit Projekten, Zuordnungen und Anwesenheit
Wo wird der Server erstellt?
- Der Server wird in
server.jserstellt. server.jsstartet einen Express-Server auf Port3003oder dem Wert vonprocess.env.PORT.- Das Frontend ruft diesen Server über
window.location.originan.
Wo werden die Dateien gespeichert?
- Das Frontend schreibt über den Server in das Dateisystem.
- In
js/store.jsruft die Anwendung beim Speichern/save-csvauf. - Der Server legt CSV-Dateien unter
sessions/<DEPARTMENT>/ab. - Beispiel:
sessions/ELT/KW_32___2026.csvsessions/ELT/_people.csv
Betrieb
Lokal mit Node.js
npm install
npm start
Danach ist die Anwendung erreichbar unter http://localhost:3003.
Falls der Port belegt ist:
PORT=3004 npm start
Mit Docker
Im Projektstamm ausführen:
docker compose -f Docker/docker-compose.yml up --build
Danach ist die Anwendung erreichbar unter:
http://localhost:3003
Wichtige Hinweise
- Der Server benötigt Lese-/Schreibzugriff auf
sessions/. - Die Docker-Compose-Konfiguration mountet
./sessionsin den Container. Achte darauf, dass der relative Pfad im Kontext korrekt ist, wenn dudocker composeaus einem anderen Verzeichnis startest. js/store.jsundjs/server.jsarbeiten mit Abteilungsparametern und speichern Daten abteilungsweise in separaten Unterordnern.- Die Passwortfunktion ist nur ein einfacher Client-Mechanismus im Frontend und kein echter Sicherheitsmechanismus.
- Globale Personen werden in
_people.csvverwaltet. Wird eine Person global gelöscht, bleibt sie in bereits existierenden Sitzungen sichtbar.
Languages
JavaScript
76.5%
CSS
17.1%
HTML
5.5%
Shell
0.8%