Schwarmspeicher Electrify
đ Schwarmspeicher Electrify
|
Ăbersicht
Schwarmspeicher Electrify unterstĂŒtzt den gesamten Projektlebenszyklus: Standortidentifikation, Genehmigungen, Projektsteuerung und Dokumentation â fĂŒr beide Use-Cases parallel, ĂŒber einen Umschalter in der Seitenleiste.
Technologie-Stack
Frontend: React 18 · TypeScript · Vite · Tailwind CSS · shadcn/ui · React Router · React Query · Leaflet + leaflet.markercluster (Kartendarstellung) · Recharts (Diagramme) · XLSX (Excel-Import/-Export)
Backend: Supabase (self-hosted) â PostgreSQL, Authentication, Storage, Edge Functions, Row Level Security (RLS)
Use-Case-Umschalter
Zwei Buttons oben in der Seitenleiste ("Schwarmspeicher" / "PV-Co-Location"). Welcher Use-Case aktiv angezeigt wird, leitet sich direkt aus der aktuellen URL ab (Hook useUseCase.tsx, /pv-colocation/*-Pfade vs. Rest) â nicht aus einem gespeicherten Zustand. Dadurch zeigt die Seitenleiste nach Login oder direktem Aufruf eines Links immer konsistent den richtigen Use-Case.
Hauptfunktionen
Dashboard
Zentrale Ăbersicht ĂŒber Projekte, Status, Kennzahlen und Projektfortschritt.
- Schwarmspeicher: Dashboard.tsx â Pipeline-Summary, kW/kWh-KPIs, Plan-vs-Ist-Charts pro Meilenstein
- PV-Co-Location: CoLocationDashboard.tsx â gleiche Struktur, Einheiten angepasst (kWp/kW), zweite Ăbersichtskarte zeigt Standortpartner-Anzahl statt Gemeinden
Projektverwaltung / Standortverwaltung
Standorte anlegen, bearbeiten, importieren, Historie, Dokumente, sortierbare Tabelle mit Meilenstein-Filter, Bulk-Bearbeitung, Als-abgebrochen-markieren/Reaktivieren.
- Schwarmspeicher: ProjectTable, StandortDetail, CreateStandortFormNew, StandortImportDialog, StandortDokumente, AbbruchDialog, MeilensteinQuickEdit, MeilensteinMatrix, BulkEditStandortDialog
- PV-Co-Location: CoLocationProjectTable, CoLocationStandortDetail, CreateCoLocationForm, CoLocationImportDialog, CoLocationStandortDokumente, CoLocationAbbruchDialog, CoLocationMeilensteinQuickEdit, CoLocationMeilensteinMatrix, CoLocationBulkEditDialog
Import-Dialoge (beide Use-Cases) unterstĂŒtzen: direkte Koordinatenspalten, DMS-Format, Koordinatenpaare im Adressfeld, Gemeinde-Auflösung per PLZ, mehrstufige strukturierte Geocoding-Anfragen (inkl. Konskriptionsnummern) mit Validierung gegen Gemeinde-Zentroide, sowie automatische Erkennung der Kopfzeile.
Gemeinden
Verwaltung der Gemeinden (CreateGemeindeForm, nur Schwarmspeicher). Edge Function fetch-noe-gemeinden lĂ€dt NĂ-Gemeinden.
Kartenansicht
Interaktive Karte aller Standorte (Leaflet + Clustering), Adresssuche, Vollbildmodus, FlĂ€chenauswahl (Shift+Ziehen), Trafokarte-NĂ-Layer mit Legende.
- Schwarmspeicher: ProjectMap
- PV-Co-Location: CoLocationMap
- Gemeinsam genutzt: LocationPickerMap (Einzelstandort-Kartenauswahl), src/lib/mapCoordinates.ts (dedupeCoordinates â verhindert sofortiges Auftrennen bei identischen Koordinaten)
Potenzialanalyse
Bewertung möglicher Standorte (PotenzialTabelle, PotenzialPage) â nur Schwarmspeicher, kein Pendant bei PV-Co-Location.
Pipeline
- Schwarmspeicher: VorprojektePipeline, VorprojektTimeline
- PV-Co-Location: CoLocationPipeline (Felder an kWp/BESS-kW angepasst; kein Pendant zu VorprojektTimeline)
Meilensteinverwaltung
Projektfortschritt ĂŒber Meilensteine, matrixartige Ăbersicht mit Bulk-Setzen, Gruppierung.
- Schwarmspeicher: MeilensteinMatrix, MeilensteinQuickEdit (inkl. Sonderfall-Dialog NetzvertragAnpassungDialog)
- PV-Co-Location: CoLocationMeilensteinMatrix, CoLocationMeilensteinQuickEdit â eigene Meilensteinkette: Vollmacht gestellt â Vollmacht erhalten â Netzantrag gestellt â Netzvertrag erhalten â Pachtvertrag unterschrieben â Standort gebaut â Standort live Trading (Kurzbeschriftungen: VM ges. / VM erh. / NA gest. / NV erh. / PV unt. / Gebaut / Trading)
Stockend
Zeigt Standorte, bei denen die Lead-Time zwischen zwei Meilensteinen ĂŒberschritten ist, konfigurierbare Regeln.
- Schwarmspeicher: StuckPage
- PV-Co-Location: CoLocationStuckPage (eigene, getrennt gespeicherte Lead-Time-Regeln entlang der neuen Meilensteinkette)
Forecast
Monatliche Zielvorgaben, Plan-vs-Ist-Charts pro Kennzahl.
- Schwarmspeicher: ForecastPage (kW und kWh pro Monat/Meilenstein, nach Land AT/DE getrennt)
- PV-Co-Location: CoLocationForecastPage â 4 KPI-Charts entlang Netzantrag gestellt / Netzvertrag erhalten / Standort gebaut / Standort live Trading (kein Land-Split)
Aufgabenverwaltung
Projektbezogene Aufgaben, jeweils eigene, komplett getrennte Liste pro Use-Case.
- Schwarmspeicher: TaskManager, TasksPage, Hook useTasks()
- PV-Co-Location: CoTaskManager, CoLocationTasksPage, Hook useCoTasks()
Dokumentenverwaltung
Zu jedem Standort und jedem Standortpartner können Dokumente hochgeladen werden.
- Schwarmspeicher: StandortDokumente, PartnerDokumente, Hook useDokumente()
- PV-Co-Location: CoLocationStandortDokumente, CoLocationPartnerDokumente, Hook useCoDokumente() â eigener Storage-Bucket co-dokumente
Standortpartner
Verwaltung von Projektpartnern, eigene, komplett getrennte Partnerliste pro Use-Case.
- Schwarmspeicher: StandortpartnerManager, StandortpartnerTable
- PV-Co-Location: CoLocationStandortpartnerManager, CoLocationStandortpartnerTable
Benutzerverwaltung
Anmeldung, PasswortĂ€nderung, Rollen (admin/user). Komponenten: AuthProvider, ProtectedRoute, BenutzerPage, LoginPage. LĂ€uft ĂŒber die Edge Function manage-users (Supabase Admin-API, prĂŒft Admin-Rechte serverseitig). Nach Login wird immer auf "/" weitergeleitet, unabhĂ€ngig von der zuvor besuchten URL.
Audit Log
Nachvollziehbarkeit von Ănderungen (AuditLogPage), tabellenĂŒbergreifend ĂŒber beide Use-Cases.
Landingpage âFlĂ€che verpachten"
Ăffentlich erreichbare Seite ohne Login unter /flaeche-verpachten â fĂŒr GrundstĂŒckseigentĂŒmer, die eine FlĂ€che fĂŒr einen Batteriespeicher zur VerfĂŒgung stellen wollen. Kartenbasierte Standortauswahl, Formular mit Honeypot-Spamschutz.
- Legt ĂŒber die Edge Function public-lead-intake automatisch einen neuen Eintrag in der Schwarmspeicher-Pipeline (vorprojekte) an
- E-Mail-Benachrichtigung optional (RESEND_API_KEY + LEAD_NOTIFY_EMAIL) â Anfrage wird auch ohne E-Mail-Konfiguration zuverlĂ€ssig gespeichert
â ïžÂ Hinweis: Platzhalter-Firmendaten
|
Routing
| Pfad | Seite | Use-Case | Login nötig |
| / | Dashboard | Schwarmspeicher | ja |
| /projekte | Standorte | Schwarmspeicher | ja |
| /pipeline | Vorprojekte | Schwarmspeicher | ja |
| /potenzial | Potenzialanalyse | Schwarmspeicher | ja |
| /karte | Kartenansicht | Schwarmspeicher | ja |
| /forecast | Forecast | Schwarmspeicher | ja |
| /tasks | Aufgaben | Schwarmspeicher | ja |
| /stockend | Stockende Standorte | Schwarmspeicher | ja |
| /benutzer | Benutzerverwaltung | â (Admin) | ja |
| /historie | Audit Log | â (Admin) | ja |
| /pv-colocation | Dashboard | PV-Co-Location | ja |
| /pv-colocation/projekte | Standorte | PV-Co-Location | ja |
| /pv-colocation/pipeline | Vorprojekte | PV-Co-Location | ja |
| /pv-colocation/karte | Kartenansicht | PV-Co-Location | ja |
| /pv-colocation/forecast | Forecast | PV-Co-Location | ja |
| /pv-colocation/tasks | Aufgaben | PV-Co-Location | ja |
| /pv-colocation/stockend | Stockende Standorte | PV-Co-Location | ja |
| /flaeche-verpachten | Landingpage âFlĂ€che verpachten" | â | NEIN â öffentlich |
Datenzugriff
Der Zugriff erfolgt ĂŒber Custom Hooks, die sĂ€mtliche Kommunikation mit Supabase kapseln:
// Schwarmspeicher useStandorte()Â Â useGemeinden()Â Â useVorprojekte() useTasks()Â Â Â Â Â Â usePotenzialDaten()Â Â useStandortpartner() useMonatsziele() useDokumente()Â Â useIsAdmin() // PV-Co-Location useCoLocationStandorte()Â Â Â Â Â Â Â useCoLocationStandortpartner() useCoVorprojekte()Â Â useCoTasks()Â Â useCoMonatsziele()Â Â useCoDokumente() // Use-Case-ĂŒbergreifend useUseCase()Â Â useAuth() |
Supabase
Authentication: Login, PasswortÀnderung, Rollenverwaltung.
Datenbank: Wird ĂŒber SQL-Migrationen verwaltet (supabase/migrations/), inkl. komplettes PV-Co-Location-Schema: co_standorte, co_standortpartner, co_prozessschritte, co_vorprojekte, co_monatsziele, co_dokumente, co_tasks.
Edge Functions:
- fetch-noe-gemeinden â lĂ€dt Gemeinden aus Niederösterreich
- manage-users â Benutzerverwaltung, prĂŒft Admin-Berechtigung serverseitig
- public-lead-intake â nimmt Anfragen der öffentlichen Landingpage entgegen
Storage: zwei Buckets â dokumente (Schwarmspeicher) und co-dokumente (PV-Co-Location).
Architektur

ZusĂ€tzlich ĂŒbernimmt nginx im Frontend-Container TLS-Terminierung und same-origin-Routing (/auth, /rest, /storage, /realtime, /functions â supabase-kong) â dadurch lĂ€uft die App ohne CORS- oder Private-Network-Access-Probleme im Browser
Offene Punkte / zu verifizieren
â ïžÂ Vor einem breiteren Rollout klĂ€ren
|
Server
Das Projekt liegt unter /mnt/data/schwarmspeicher/schwarmspeicher-electrify_lokal und lÀuft in einem eigenstÀndigen Docker-Compose-Stack (schwarmspeicher-electrify_lokal).
Erreichbar unter:
- VPN: http://schwarmspeicher.spl-tele.com:8200 (SPL-TELE-Netzwerk)
- Ăffentlich: https://schwarmspeicher.electrify.at:8200 (Wildcard-Zertifikat *.electrify.at, Let's Encrypt, gĂŒltig bis 26.10.2026)
Supabase (Postgres, Auth, Kong, Storage, Edge Functions) lĂ€uft als eigener Docker-Compose-Stack im selben Docker-Netzwerk wie der Frontend-Container. Edge Functions werden ĂŒber einen zentralen main-Router an die jeweilige Unterfunktion weitergereicht; das Verzeichnis liegt unter /mnt/data/supabase/docker/docker/volumes/functions/.