v18
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 201 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 188 KiB |
|
|
@ -407,7 +407,7 @@ const PHASEN = {
|
|||
support:{label:"Support", color:"var(--support)"},
|
||||
review:{label:"Review", color:"var(--review)"}
|
||||
};
|
||||
/* Action Cards: 6 Services × 5 Change-Typen (aus „Use Cases mit möglichen Changes"). */
|
||||
/* Action Cards: 6 Services × 4 Change-Arten (aus „Use Cases mit möglichen Changes"). */
|
||||
const CHANGE_TYPES = [
|
||||
"Major Change",
|
||||
"Normal Change",
|
||||
|
|
@ -499,7 +499,7 @@ const USE_CASES = [
|
|||
desc:"Zentrales Web-Portal, über das Bürger*innen Meldungen (z. B. Straßenreparatur, Lärm) und Anträge (z. B. Baugenehmigung, Personalausweis) digital einreichen und den Status verfolgen.",
|
||||
changes:[
|
||||
{titel:"Mitreden, Pflicht!", text:"Ein neues Landesgesetz schreibt digitale Bürgerbeteiligung vor — das Portal muss um komplette Beteiligungs-Module erweitert werden."},
|
||||
{titel:"Rotstift gefragt", text:"Der Bürgerservice meldet einen Rechtschreibfehler in einem statischen Hinweistext, der korrigiert werden muss."},
|
||||
{titel:"Licht an!", text:"Das Amt für öffentliche Ordnung möchte eine neue Mängel-Kategorie „Beleuchtung und Strom“ zu den bestehenden Kategorien hinzufügen."},
|
||||
{titel:"Patchday", text:"Das monatliche Sicherheits-Patch des Webservers (Apache/Nginx) steht an."},
|
||||
{titel:"Lücke im Formular!", text:"In einem Eingabe-Formular wird eine kritische XSS-Schwachstelle entdeckt — ein Hotfix muss sofort raus."}
|
||||
]},
|
||||
|
|
@ -515,7 +515,7 @@ const USE_CASES = [
|
|||
desc:"Web-basiertes Karten- und Analyse-Portal, das Fachämtern (Bau, Umwelt, Verkehr) räumliche Daten (Flurstücke, Infrastruktur, Umweltzonen) und bearbeitbare Layer bereitstellt.",
|
||||
changes:[
|
||||
{titel:"Norm-Zwang", text:"Eine bundesweite Vorgabe zu EU-Standards erzwingt die komplette Migration des GIS-Stacks auf konforme Services und Datenmodelle."},
|
||||
{titel:"Falsch beschriftet", text:"Das Bauamt meldet eine falsche Beschriftung eines Karten-Layers, die korrigiert werden muss."},
|
||||
{titel:"Grün dazu!", text:"Das Umweltamt möchte im Analyse-Modul „Klimarisiko-Analyse“ eine weitere Datenquelle zu städtischen Grünflächen anbinden."},
|
||||
{titel:"GeoServer-Update", text:"Das monatliche Update der GIS-Software (GeoServer 2.23 → 2.24) steht an."},
|
||||
{titel:"Schnittstelle offen!", text:"An einer Schnittstelle wird eine kritische Schwachstelle entdeckt, die unautorisierten Datenzugriff erlaubt — Dienst sofort abschalten und patchen."}
|
||||
]},
|
||||
|
|
@ -523,7 +523,7 @@ const USE_CASES = [
|
|||
desc:"Web-Applikation, über die Fachämter interne Beschaffungen (Material, Dienstleistungen) anlegen, prüfen und Verträge digital verwalten.",
|
||||
changes:[
|
||||
{titel:"Vergabe neu!", text:"Eine neue EU-Vergaberichtlinie zwingt zur Einführung von E-Invoicing und erweiterten Transparenz-Reports."},
|
||||
{titel:"Vierstellig, bitte", text:"Das Finanzamt wünscht eine kleine Anpassung: aus dem Label „Kostenstelle“ wird „Kostenstelle (4-stellig)“."},
|
||||
{titel:"Format-Wechsel", text:"Die Verträge der Fachämter liegen wegen aktualisierter Sicherheitsrichtlinien in einem neuen Dateiformat vor — die Schnittstellen der Web-Applikation müssen entsprechend angepasst werden."},
|
||||
{titel:"Patch-Quartal", text:"Das quartalsweise Sicherheits-Patch des Anwendungsservers steht an."},
|
||||
{titel:"Upload-Falle!", text:"Im Vertrags-Upload wird eine kritische Lücke entdeckt, über die sich Schadcode hochladen lässt — Endpoint sofort sperren, Hotfix einspielen."}
|
||||
]}
|
||||
|
|
@ -1119,7 +1119,7 @@ function cardHtml(si, ci){ const c = acard(si, ci);
|
|||
return `<div style="font-weight:800;font-size:18px;color:var(--ink);margin-bottom:6px">${c.titel}</div>`
|
||||
+ `<div>${c.text}</div>`
|
||||
+ `<div style="color:var(--muted);font-style:italic;margin-top:8px">Was passiert an welchen Stellen?</div>`; }
|
||||
// Finale Action-Card-Grafik (cards/s<service>-c<change>.png) — alle 30 vorhanden.
|
||||
// Finale Action-Card-Grafik (cards/s<service>-c<change>.png) — alle 24 vorhanden.
|
||||
function cardImg(si, ci){ return `cards/s${si}-c${ci}.png`; }
|
||||
function cardMedia(si, ci){ const f = cardImg(si, ci);
|
||||
return f ? `<img class="acImg" src="${f}" alt="Action Card: ${acard(si,ci).titel}"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */
|
||||
const CACHE = "slc-companion-v21";
|
||||
const CACHE = "slc-companion-v23";
|
||||
const SHELL = ["./", "index.html", "manifest.webmanifest", "icon.svg"];
|
||||
// Action-Card-Grafiken (cards/s<service>-c<change>.png) fuer Offline vorab cachen (alle 30).
|
||||
// Action-Card-Grafiken (cards/s<service>-c<change>.png) fuer Offline vorab cachen (alle 24).
|
||||
const CARDS = [];
|
||||
for (let s = 0; s <= 5; s++) for (let c = 0; c <= 3; c++) {
|
||||
CARDS.push(`cards/s${s}-c${c}.png`);
|
||||
|
|
|
|||