Wiki source code of Schwarmspeicher Electrify

Version 29.3 by Patrizia Gurschka on 2026/10/14 13:08

Hide last authors
Patrizia Gurschka 17.1 1 |(% style="width:650px" %)(((
Patrizia Gurschka 11.2 2 = 🔋  Schwarmspeicher Electrify =
Dimitri Rupp 1.1 3
Patrizia Gurschka 10.2 4 {{info}}
Patrizia Gurschka 28.3 5 **Zweck:** Webbasiertes Projektmanagementsystem zur Verwaltung von Batterie-Großspeicherprojekten in Deutschland und Österreich – vom Standort über Genehmigungen bis zur Projektsteuerung und Dokumentation. Deckt zwei Use-Cases ab: klassische Schwarmspeicher-Standorte und PV-Co-Location-Standorte. Externe Akquisiteure arbeiten in einem eigenen, eingeschränkten Bereich nur an den ihnen zugeteilten Schwarmspeicher-Standorten.
Patrizia Gurschka 8.2 6
7 **Zielgruppe: **Vertriebs-/Projektentwicklungsteam und IT/DevOps-Betrieb.
Patrizia Gurschka 10.2 8 {{/info}}
Patrizia Gurschka 17.1 9 )))|(% style="width:418px" %)(((
Patrizia Gurschka 15.1 10 **Auf dieser Seite**
Patrizia Gurschka 8.2 11
Patrizia Gurschka 15.1 12 {{toc/}}
13
14
15 )))
16
Patrizia Gurschka 29.2 17 = Ăśberblick =
Patrizia Gurschka 15.1 18
Patrizia Gurschka 29.2 19 Schwarmspeicher Electrify unterstützt den gesamten Projektlebenszyklus: Standortidentifikation, Akquise, Genehmigungen, Projektsteuerung und Dokumentation — für beide Use-Cases parallel, über einen Umschalter in der Seitenleiste.
Patrizia Gurschka 15.1 20
Patrizia Gurschka 22.1 21 * **Frontend:** React 18 · TypeScript · Vite · Tailwind CSS · shadcn/ui · React Router · React Query · Leaflet + leaflet.markercluster (Kartendarstellung) · Recharts (Diagramme) · XLSX (Excel-Import/-Export)
22 * **Backend:** Supabase (self-hosted) — PostgreSQL, Authentication, Storage, Edge Functions, Row Level Security (RLS)
Patrizia Gurschka 29.2 23 * **Datenquellen:** Nominatim/OpenStreetMap (Geocoding, Straßenkarte) · basemap.at (Luftbild) · Edge Function fetch-noe-gemeinden (NÖ-Gemeindedaten) · EVN-Trafokarte (WMS-Layer, Netzkapazitäten, UW-Versorgungsgebiete) · Netz NÖ (Kapazitätsliste der Umspannwerke) · Tabelle trafo_stationen (Trafostationen, einmalig aus der EVN-Trafokarte übernommen, danach eigene Bearbeitung) · BEV-Kataster (Grundstücksgrenzen per WMS, Gst.Nr/Einlagezahl/KG-Nr per Vektorkacheln) · Land NÖ OGD (Windkraftzonen und Windkraftanlagen) · OpenStreetMap/Overpass (Positionen der Umspannwerke)
Patrizia Gurschka 22.1 24 * **Orchestrierung:** eigener Docker-Compose-Stack, nginx als Reverse-Proxy (TLS-Terminierung + same-origin-Routing zu Supabase/Kong)
Patrizia Gurschka 21.2 25
Patrizia Gurschka 29.2 26 = Architektur =
Patrizia Gurschka 18.1 27
Patrizia Gurschka 29.2 28 [[image:Architektur_Schwarmspeicher.png||height="510" width="537"]]
Patrizia Gurschka 18.1 29
30 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
31
Patrizia Gurschka 29.2 32 = Technologie-Stack =
Patrizia Gurschka 15.1 33
Patrizia Gurschka 29.2 34 **Frontend:** React 18 · TypeScript · Vite · Tailwind CSS · shadcn/ui · React Router · React Query · Leaflet + leaflet.markercluster (Kartendarstellung) · Recharts (Diagramme) · XLSX (Excel-Import/-Export)
Patrizia Gurschka 15.1 35
Patrizia Gurschka 29.2 36 **Backend:** Supabase (self-hosted) — PostgreSQL, Authentication, Storage, Edge Functions, Row Level Security (RLS)
Patrizia Gurschka 15.1 37
Patrizia Gurschka 29.2 38 = Hauptfunktionen =
Dimitri Rupp 1.1 39
Patrizia Gurschka 29.2 40 == 1. Dashboard ==
Patrizia Gurschka 6.1 41
Patrizia Gurschka 8.2 42 Zentrale Ăśbersicht ĂĽber Projekte, Status, Kennzahlen und Projektfortschritt.
Dimitri Rupp 1.1 43
Patrizia Gurschka 29.2 44 * **Schwarmspeicher:** Dashboard.tsx — Pipeline-Summary (Vorprojekte und Standorte in Akquise, darunter die Anzahl in Akquise), kW/kWh-KPIs, Plan-vs-Ist-Charts pro Meilenstein. Standorte in Akquise zählen in den Standort-Kennzahlen erst ab „Vollmacht erhalten“.
45 * **PV-Co-Location:** CoLocationDashboard.tsx — gleiche Struktur, Einheiten angepasst (kWp/kW), zweite Übersichtskarte zeigt Standortpartner-Anzahl statt Gemeinden
Dimitri Rupp 1.1 46
Patrizia Gurschka 29.2 47 == 2. Projektverwaltung / Standortverwaltung ==
Dimitri Rupp 1.1 48
Patrizia Gurschka 29.2 49 Standorte anlegen, bearbeiten, importieren, Historie, Dokumente, sortierbare Tabelle mit Meilenstein- und Akquisiteur-Filter, Bulk-Bearbeitung, Als-abgebrochen-markieren/Reaktivieren.
Dimitri Rupp 1.1 50
Patrizia Gurschka 29.2 51 * **Schwarmspeicher:** ProjectTable, StandortDetail, CreateStandortFormNew, StandortImportDialog, StandortDokumente, AbbruchDialog, StandortAusscheiden, MeilensteinQuickEdit, MeilensteinMatrix, BulkEditStandortDialog, BatterieKandidaten
52 * **PV-Co-Location:** CoLocationProjectTable, CoLocationStandortDetail, CreateCoLocationForm, CoLocationImportDialog, CoLocationStandortDokumente, CoLocationAbbruchDialog, CoLocationMeilensteinQuickEdit, CoLocationMeilensteinMatrix, CoLocationBulkEditDialog
Dimitri Rupp 1.1 53
Patrizia Gurschka 29.2 54 Unter „Projekte“ erscheinen Standorte, die über „Zur Akquise freigeben“ entstanden sind, erst ab dem Meilenstein „Vollmacht erhalten“; davor stehen sie in der Pipeline unter „In Akquise“. Die Seite hat die Tabs Standorte, Meilensteine und Standortpartner; die Buttons oben rechts richten sich nach dem Tab (Standorte: Import und Standort anlegen, Standortpartner: Neuer Standortpartner).
55
56 Im Standort-Dialog können alle Rollen einen Standort mit Begründung ausscheiden (die verknüpfte Trafostation wird mit ausgeschieden); Reaktivieren ist nur intern möglich. Das Feld „Betreuung“ wählt der Leiter bzw. seine Stellvertretung aus seinem Team. Die Batterie-Standorte werden als Rangliste (bis zu 4) mit Akzeptieren/Verwerfen und Eigentümerdaten geführt; Eigentümerdaten sind auch im Bearbeiten-Modus erfassbar. Hat ein Standort noch keine Rangliste, legt „Eigentümer erfassen“ den Batterie-Standort 1 aus der aktuellen Position an.
57
Patrizia Gurschka 8.2 58 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.
Dimitri Rupp 1.1 59
Patrizia Gurschka 29.2 60 === Meilensteinverwaltung ===
Patrizia Gurschka 27.2 61
62 Projektfortschritt ĂĽber Meilensteine, matrixartige Ăśbersicht mit Bulk-Setzen, Gruppierung.
63
Patrizia Gurschka 29.2 64 * **Schwarmspeicher:** MeilensteinMatrix, MeilensteinQuickEdit (inkl. Sonderfall-Dialog NetzvertragAnpassungDialog). Die Akquise-Meilensteine (Vollmacht gesendet/erhalten, Optionsvertrag gesendet/erhalten, Pachtvertrag unterschrieben) dĂĽrfen auch externe Akquisiteure setzen.
65 * **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)
Patrizia Gurschka 27.2 66
Patrizia Gurschka 29.2 67 == 3. Gemeinden ==
Dimitri Rupp 1.1 68
Patrizia Gurschka 8.2 69 Verwaltung der Gemeinden (CreateGemeindeForm, nur Schwarmspeicher). Edge Function fetch-noe-gemeinden lädt NÖ-Gemeinden.
Dimitri Rupp 1.1 70
Patrizia Gurschka 29.2 71 == 4. Kartenansicht ==
Dimitri Rupp 1.1 72
Patrizia Gurschka 29.2 73 Interaktive Karte aller Standorte (Leaflet + Clustering), Adress- und Koordinatensuche, Vollbildmodus, Flächenauswahl (Shift+Ziehen), Zoom bis Stufe 21, Umschaltung Straßenkarte/Luftbild (basemap.at), Trafokarte-NÖ-Layer mit Legende.
Dimitri Rupp 1.1 74
Patrizia Gurschka 29.2 75 * **Schwarmspeicher:** ProjectMap — Ebenen Trafokarte NÖ, Grundstücke (BEV-Kataster), Umspannwerke (Versorgungsgebiete mit Kapazität, Akquisiteur-Zuteilung je Gebiet, UW-Standorte als Dreiecke; mehrere UW am selben Ort als ein Dreieck mit Anzahl), Windkraft (Windkraftzonen und Windkraftanlagen des Landes NÖ). Klick auf eine Trafostation öffnet TrafoStationSheet mit „Zur Akquise freigeben“.
76 * **PV-Co-Location:** CoLocationMap
77 * **Gemeinsam genutzt:** LocationPickerMap (Einzelstandort-Kartenauswahl, Großbild über das ganze Fenster), KartenSuche (Adresse, Ort, PLZ oder Koordinaten), src/lib/mapCoordinates.ts (dedupeCoordinates — verhindert sofortiges Auftrennen bei identischen Koordinaten), src/lib/kartenZoom.ts, src/lib/koordinatenSuche.ts, src/lib/windkraft.ts
Dimitri Rupp 1.1 78
Patrizia Gurschka 29.2 79 Die UW-Standorte werden aus OpenStreetMap (Overpass) importiert oder von Admins im Gebiets-MenĂĽ von Hand gesetzt (von Hand gesetzte Punkte ĂĽberschreibt der Import nicht). Umspannwerke der Netz-NĂ–-Liste ohne eigenes EVN-Gebiet (z. B. Windpark-Umspannwerke) werden unter dem SchlĂĽssel kap:<Name> gefĂĽhrt. Abweichende Schreibweisen zwischen Netz-NĂ–-Liste und EVN-Gebiet werden in der Tabelle uw_namen zugeordnet.
Dimitri Rupp 1.1 80
Patrizia Gurschka 29.2 81 **Zur Akquise freigeben:** Im Dialog werden Name, Akquisiteur (vorbelegt aus dem UW-Gebiet) und bis zu 4 Batterie-Standorte nach Priorität festgelegt. Die Freigabe legt den Standort an (Netzbetreiber „Netz NÖ“), verknüpft die Trafostation und erstellt die Rangliste der Batterie-Standorte. Eine Trafostation kann nur einmal freigegeben werden.
82
83 == 5. Potenzialanalyse ==
84
Patrizia Gurschka 8.2 85 Bewertung möglicher Standorte (PotenzialTabelle, PotenzialPage) — nur Schwarmspeicher, kein Pendant bei PV-Co-Location.
Dimitri Rupp 1.1 86
Patrizia Gurschka 29.2 87 == 6. Pipeline ==
Dimitri Rupp 1.1 88
Patrizia Gurschka 29.2 89 * **Schwarmspeicher:** zwei Reiter — **Vorprojekte** (VorprojektePipeline, VorprojektTimeline; Kennzahlen Vorprojekte, Pot. Standorte, Pot. BESS, Pot. kW, Pot. kWh; ohne Realisierungswahrscheinlichkeit und ohne Gewonnen/Verloren) und **In Akquise** (AkquisePipeline; zur Akquise freigegebene Standorte bis „Vollmacht erhalten“, Filter nach Akquisiteur, Kennzahlen, Spalten Gemeinde, Netzbetreiber, Trafo mit Koordinaten, Akquisiteur, Freigabedatum, letzter Meilenstein)
90 * **PV-Co-Location:** CoLocationPipeline (Felder an kWp/BESS-kW angepasst; kein Pendant zu VorprojektTimeline)
Dimitri Rupp 1.1 91
Patrizia Gurschka 29.2 92 == 7. Stockend ==
Dimitri Rupp 1.1 93
Patrizia Gurschka 8.2 94 Zeigt Standorte, bei denen die Lead-Time zwischen zwei Meilensteinen ĂĽberschritten ist, konfigurierbare Regeln.
Dimitri Rupp 1.1 95
Patrizia Gurschka 29.2 96 * **Schwarmspeicher:** StuckPage
97 * **PV-Co-Location:** CoLocationStuckPage (eigene, getrennt gespeicherte Lead-Time-Regeln entlang der neuen Meilensteinkette)
Dimitri Rupp 1.1 98
Patrizia Gurschka 29.2 99 == 8. Forecast ==
Patrizia Gurschka 5.1 100
Patrizia Gurschka 8.2 101 Monatliche Zielvorgaben, Plan-vs-Ist-Charts pro Kennzahl.
Patrizia Gurschka 5.1 102
Patrizia Gurschka 29.2 103 * **Schwarmspeicher:** ForecastPage (kW und kWh pro Monat/Meilenstein, nach Land AT/DE getrennt)
104 * **PV-Co-Location:** CoLocationForecastPage — 4 KPI-Charts entlang Netzantrag gestellt / Netzvertrag erhalten / Standort gebaut / Standort live Trading (kein Land-Split)
Patrizia Gurschka 5.1 105
Patrizia Gurschka 29.2 106 == 9. Aufgabenverwaltung ==
Patrizia Gurschka 5.1 107
Patrizia Gurschka 8.2 108 Projektbezogene Aufgaben, jeweils eigene, komplett getrennte Liste pro Use-Case.
Patrizia Gurschka 5.1 109
Patrizia Gurschka 29.2 110 * **Schwarmspeicher:** TaskManager, TasksPage, Hook useTasks()
111 * **PV-Co-Location:** CoTaskManager, CoLocationTasksPage, Hook useCoTasks()
Patrizia Gurschka 5.1 112
Patrizia Gurschka 29.2 113 == 10. Dokumentenverwaltung ==
Dimitri Rupp 1.1 114
Patrizia Gurschka 8.2 115 Zu jedem Standort und jedem Standortpartner können Dokumente hochgeladen werden.
Dimitri Rupp 1.1 116
Patrizia Gurschka 29.2 117 * **Schwarmspeicher:** StandortDokumente, PartnerDokumente, Hook useDokumente()
118 * **PV-Co-Location:** CoLocationStandortDokumente, CoLocationPartnerDokumente, Hook useCoDokumente() — eigener Storage-Bucket co-dokumente
Dimitri Rupp 1.1 119
Patrizia Gurschka 29.2 120 == 11. Standortpartner ==
Dimitri Rupp 1.1 121
Patrizia Gurschka 8.2 122 Verwaltung von Projektpartnern, eigene, komplett getrennte Partnerliste pro Use-Case.
Dimitri Rupp 1.1 123
Patrizia Gurschka 29.2 124 * **Schwarmspeicher:** StandortpartnerTable (Tab „Standortpartner“ unter Projekte)
125 * **PV-Co-Location:** CoLocationStandortpartnerManager, CoLocationStandortpartnerTable
Dimitri Rupp 1.1 126
Patrizia Gurschka 29.2 127 == 12. Benutzerverwaltung ==
Patrizia Gurschka 5.1 128
Patrizia Gurschka 29.2 129 Anmeldung, Passwortänderung, Rollen (admin/user/akquisiteur). 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; externe Akquisiteure auf "/meine-standorte".
Patrizia Gurschka 5.1 130
Patrizia Gurschka 29.2 131 Zusätzliche Rechte: „Akquise zuteilen“ (kann_akquise_zuteilen — Trafostationen freigeben und Akquisiteure zuteilen) und „sich selbst zuteilen“ (kann_sich_selbst_zuteilen — sich selbst als Akquisiteur eintragen). Bei externen Akquisiteuren werden in der Benutzerverwaltung der Leiter und optional die Stellvertretung festgelegt (siehe 16.).
Dimitri Rupp 1.1 132
Patrizia Gurschka 29.2 133 == 13. Audit Log ==
134
Patrizia Gurschka 8.2 135 Nachvollziehbarkeit von Änderungen (AuditLogPage), tabellenübergreifend über beide Use-Cases.
Patrizia Gurschka 6.1 136
Patrizia Gurschka 29.2 137 == 14. Landingpage „Fläche verpachten" (im Aufbau) ==
Patrizia Gurschka 6.1 138
Patrizia Gurschka 8.2 139 Ö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.
Dimitri Rupp 1.1 140
Patrizia Gurschka 8.2 141 * Legt ĂĽber die Edge Function public-lead-intake automatisch einen neuen Eintrag in der Schwarmspeicher-Pipeline (vorprojekte) an
142 * E-Mail-Benachrichtigung optional (RESEND_API_KEY + LEAD_NOTIFY_EMAIL) — Anfrage wird auch ohne E-Mail-Konfiguration zuverlässig gespeichert
Patrizia Gurschka 5.1 143
Patrizia Gurschka 29.2 144 **⚠️  Hinweis: Platzhalter-Firmendaten**
Patrizia Gurschka 5.1 145
Patrizia Gurschka 29.2 146 In FlaecheVerpachtenPage.tsx sind Firmenname und Telefonnummer aktuell Platzhalter (Rateware). Vor dem Livegang unbedingt durch die echten Kontaktdaten ersetzen.
Dimitri Rupp 1.1 147
Patrizia Gurschka 29.2 148 == 15. Akquisiteure ==
Dimitri Rupp 1.1 149
Patrizia Gurschka 29.2 150 Performance-Übersicht der Akquisiteure (AkquisiteurePerformancePage, AkquisiteurVerlaufCharts) — nur Schwarmspeicher, nur intern. Erfolg ist der Meilenstein „Vollmacht erhalten“.
Dimitri Rupp 1.1 151
Patrizia Gurschka 29.2 152 * Kennzahlen im wählbaren Zeitraum (30 / 90 Tage, 12 Monate, gesamt): aktive Akquisiteure, in Akquise, ohne Meilenstein seit über 30 Tagen, neu freigegeben, Vollmachten erhalten, Erfolgsquote
153 * Tabelle je Akquisiteur, sortierbar; zugeordnete Akquisiteure stehen unter ihrem Leiter
154 * Verlauf je Kalenderjahr fĂĽr Freigegeben, Vollmacht gesendet/erhalten und Optionsvertrag gesendet/erhalten, umschaltbar kumuliert/Monatswerte
Patrizia Gurschka 6.1 155
Patrizia Gurschka 29.2 156 == 16. Externe Akquisiteure und Teams ==
157
158 Externe Akquisiteure (Rolle akquisiteur) sehen nur „Meine Standorte“ (AkquisiteurPage, AkquisiteurStandortTabelle) mit ihren Standorten, Meilensteinen, Dokumenten, Batterie-Standorten und Tasks.
159
160 * **Leiter:** Akquisiteur, dem andere Akquisiteure zugeordnet sind. Seine Standorte bleiben ihm zugeteilt; im Feld „Betreuung“ gibt er sie an ein Teammitglied weiter und sieht sie weiterhin in der Tabelle „An Team übergeben“.
161 * **Betreuer:** bearbeitet den Standort mit denselben Rechten wie einen eigenen.
162 * **Stellvertretung:** ĂĽbernimmt die Rolle des Leiters, betreut automatisch alle seine Standorte und vergibt die Betreuung im Team.
163
164 = Routing =
165
Patrizia Gurschka 8.2 166 |**Pfad**|**Seite**|**Use-Case**|**Login nötig**
167 |/|Dashboard|Schwarmspeicher|ja
168 |/projekte|Standorte|Schwarmspeicher|ja
Patrizia Gurschka 29.2 169 |/pipeline|Vorprojekte / In Akquise|Schwarmspeicher|ja
Patrizia Gurschka 8.2 170 |/potenzial|Potenzialanalyse|Schwarmspeicher|ja
171 |/karte|Kartenansicht|Schwarmspeicher|ja
172 |/forecast|Forecast|Schwarmspeicher|ja
173 |/tasks|Aufgaben|Schwarmspeicher|ja
174 |/stockend|Stockende Standorte|Schwarmspeicher|ja
Patrizia Gurschka 29.2 175 |/akquisiteure|Akquisiteure|Schwarmspeicher|ja
176 |/meine-standorte|Meine Standorte|– (externe Akquisiteure)|ja
Patrizia Gurschka 8.2 177 |/benutzer|Benutzerverwaltung|– (Admin)|ja
178 |/historie|Audit Log|– (Admin)|ja
179 |/pv-colocation|Dashboard|PV-Co-Location|ja
180 |/pv-colocation/projekte|Standorte|PV-Co-Location|ja
181 |/pv-colocation/pipeline|Vorprojekte|PV-Co-Location|ja
182 |/pv-colocation/karte|Kartenansicht|PV-Co-Location|ja
183 |/pv-colocation/forecast|Forecast|PV-Co-Location|ja
184 |/pv-colocation/tasks|Aufgaben|PV-Co-Location|ja
185 |/pv-colocation/stockend|Stockende Standorte|PV-Co-Location|ja
186 |/flaeche-verpachten|Landingpage „Fläche verpachten"|—|NEIN – öffentlich
187
188
Patrizia Gurschka 29.2 189
190 = Datenzugriff =
191
Patrizia Gurschka 8.2 192 Der Zugriff erfolgt über Custom Hooks, die sämtliche Kommunikation mit Supabase kapseln:
193
194 ~/~/ Schwarmspeicher
195
196 useStandorte()   useGemeinden()   useVorprojekte()
197
198 useTasks()       usePotenzialDaten()   useStandortpartner()
199
200 useMonatsziele() useDokumente()   useIsAdmin()
201
Patrizia Gurschka 29.2 202 useAkquisePhase()   useTrafoStationen()   useBatterieKandidaten()
Patrizia Gurschka 8.2 203
Patrizia Gurschka 29.2 204 useAkquisiteurTeam   useKannZuteilen()   useUwZuteilungen()
205
206 useUwKapazitaeten()
207
208
Patrizia Gurschka 8.2 209 ~/~/ PV-Co-Location
210
211 useCoLocationStandorte()        useCoLocationStandortpartner()
212
213 useCoVorprojekte()   useCoTasks()   useCoMonatsziele()   useCoDokumente()
214
215
216 ~/~/ Use-Case-ĂĽbergreifend
217
218 useUseCase()   useAuth()
219
Patrizia Gurschka 29.3 220 = Supabase =
Patrizia Gurschka 8.2 221
Patrizia Gurschka 29.2 222 **Authentication:** Login, Passwortänderung, Rollenverwaltung.
Patrizia Gurschka 8.2 223
Patrizia Gurschka 29.2 224 **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. FĂĽr die Schwarmspeicher-Akquise u. a. trafo_stationen, standort_batterie_kandidaten, uw_kapazitaeten, uw_namen, uw_standorte, uw_zuteilungen und akquisiteur_team sowie das Feld standorte.betreuer_id. Die Rechte externer Akquisiteure laufen ĂĽber RLS mit den Funktionen akquise_standort_zugriff() und is_own_akquise_standort() (zugeteilt, betreut oder Stellvertretung des Leiters).
Patrizia Gurschka 8.2 225
Dimitri Rupp 1.1 226 **Edge Functions:**
227
Patrizia Gurschka 8.2 228 * fetch-noe-gemeinden — lädt Gemeinden aus Niederösterreich
229 * manage-users — Benutzerverwaltung, prüft Admin-Berechtigung serverseitig
230 * public-lead-intake — nimmt Anfragen der öffentlichen Landingpage entgegen
Patrizia Gurschka 29.2 231 * uw-kapazitaeten-aktualisieren — lädt die Kapazitätsliste der Umspannwerke von Netz NÖ
232 * uw-trafos-zuordnen — ordnet Trafostationen den UW-Gebieten zu
233 * grundstuecke-ermitteln — ermittelt Grundstücksdaten zu Standorten
Dimitri Rupp 1.1 234
Patrizia Gurschka 29.2 235 **Storage:** zwei Buckets — dokumente (Schwarmspeicher) und co-dokumente (PV-Co-Location).
Patrizia Gurschka 5.1 236
Patrizia Gurschka 29.3 237 = Use-Case-Umschalter =
Patrizia Gurschka 5.1 238
Patrizia Gurschka 19.1 239 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.
240
Patrizia Gurschka 29.2 241 = Server =
Patrizia Gurschka 14.1 242
Patrizia Gurschka 8.2 243 Das Projekt liegt unter /mnt/data/schwarmspeicher/schwarmspeicher-electrify_lokal und läuft in einem eigenständigen Docker-Compose-Stack (schwarmspeicher-electrify_lokal).
244
Patrizia Gurschka 29.2 245 Erreichbar unter:
Patrizia Gurschka 8.2 246
Patrizia Gurschka 28.1 247 Ă–ffentlich: https:~/~/schwarmspeicher.electrify.at:8200 (Wildcard-Zertifikat *.electrify.at, Let's Encrypt, gĂĽltig bis 26.10.2026)
Patrizia Gurschka 8.2 248
249 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/.