feat(legal): echte Betreiberangaben eingesetzt, Impressum als Privatperson (v1.7.6)

- Betreiber: Perparim Ziberi (Privatperson), Anglikerstrasse 56, 5612 Villmergen;
  Kontakt app@lageplan.ch, Datenschutz datenschutz@lageplan.ch
- Serverstandort/Hosting: Eigenbetrieb, Schweiz (beim Betreiber) — MinIO/PostgreSQL Region = Schweiz
- Backup-Aufbewahrung: bis zu 30 Tage · Gerichtsstand: Wohnsitz des Betreibers (Schweiz)
- Impressum: Firma "Kingstickers Ziberi" + UID entfernt (auf Wunsch Privatperson), Urheberrecht
  und Copyright auf Perparim Ziberi umgestellt; Home-Footer-Copyright angeglichen
- Alle Legal-Platzhalter damit gefüllt (keine Build-Warnung mehr)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pepe Ziberi
2026-07-23 12:47:04 +02:00
parent a14753c994
commit 836b231c42
4 changed files with 29 additions and 27 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "lageplan", "name": "lageplan",
"version": "1.7.5", "version": "1.7.6",
"description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation", "description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation",
"private": true, "private": true,
"scripts": { "scripts": {

View File

@@ -31,21 +31,23 @@ export default function ImpressumPage() {
<section> <section>
<h2 className="text-xl font-semibold text-gray-900 mb-3">Betreiber der Webseite</h2> <h2 className="text-xl font-semibold text-gray-900 mb-3">Betreiber der Webseite</h2>
<div className="bg-gray-50 rounded-xl p-6 space-y-1"> <div className="bg-gray-50 rounded-xl p-6 space-y-1">
<p className="font-semibold text-gray-900">Purepixel</p> <p className="font-semibold text-gray-900">Perparim Ziberi</p>
<p>Ein Angebot der Firma Kingstickers Ziberi</p> <p className="text-gray-500 text-sm">Privatperson</p>
<p className="mt-3">Perparim Ziberi</p> <p className="mt-3">Anglikerstrasse 56</p>
<p>Anglikerstrasse 56</p>
<p>5612 Villmergen</p> <p>5612 Villmergen</p>
<p>Schweiz</p> <p>Schweiz</p>
<p className="mt-3"> <p className="mt-3">
<span className="text-gray-500">UID:</span> CHE-353.865.879
</p>
<p>
<span className="text-gray-500">E-Mail:</span>{' '} <span className="text-gray-500">E-Mail:</span>{' '}
<a href="mailto:app@lageplan.ch" className="text-red-600 hover:text-red-500"> <a href="mailto:app@lageplan.ch" className="text-red-600 hover:text-red-500">
app@lageplan.ch app@lageplan.ch
</a> </a>
</p> </p>
<p>
<span className="text-gray-500">Datenschutz:</span>{' '}
<a href="mailto:datenschutz@lageplan.ch" className="text-red-600 hover:text-red-500">
datenschutz@lageplan.ch
</a>
</p>
</div> </div>
</section> </section>
@@ -89,9 +91,9 @@ export default function ImpressumPage() {
<h2 className="text-xl font-semibold text-gray-900 mb-3">Urheberrechte</h2> <h2 className="text-xl font-semibold text-gray-900 mb-3">Urheberrechte</h2>
<p> <p>
Die Urheber- und alle anderen Rechte an Inhalten, Bildern, Fotos oder anderen Dateien auf Die Urheber- und alle anderen Rechte an Inhalten, Bildern, Fotos oder anderen Dateien auf
dieser Website gehören ausschliesslich der Firma Kingstickers Ziberi oder den speziell dieser Website gehören ausschliesslich Perparim Ziberi oder den speziell genannten
genannten Rechtsinhabern. Für die Reproduktion jeglicher Elemente ist die schriftliche Rechtsinhabern. Für die Reproduktion jeglicher Elemente ist die schriftliche Zustimmung der
Zustimmung der Urheberrechtsträger im Voraus einzuholen. Urheberrechtsträger im Voraus einzuholen.
</p> </p>
</section> </section>
@@ -142,7 +144,7 @@ export default function ImpressumPage() {
</div> </div>
<div className="mt-12 pt-8 border-t border-gray-100 text-center"> <div className="mt-12 pt-8 border-t border-gray-100 text-center">
<p className="text-sm text-gray-400">&copy; {new Date().getFullYear()} Lageplan Purepixel / Kingstickers Ziberi</p> <p className="text-sm text-gray-400">&copy; {new Date().getFullYear()} Lageplan Perparim Ziberi</p>
</div> </div>
</main> </main>
</div> </div>

View File

@@ -538,7 +538,7 @@ export default function LandingPage() {
</div> </div>
</div> </div>
<div className="border-t border-gray-100 mt-8 pt-6 text-center space-y-1"> <div className="border-t border-gray-100 mt-8 pt-6 text-center space-y-1">
<p className="text-sm text-gray-500">&copy; {new Date().getFullYear()} Lageplan Purepixel. Alle Rechte vorbehalten.</p> <p className="text-sm text-gray-500">&copy; {new Date().getFullYear()} Lageplan Perparim Ziberi. Alle Rechte vorbehalten.</p>
<p className="text-xs text-gray-500">Taktische Symbole: Bildquelle Feuerwehr Koordination Schweiz FKS</p> <p className="text-xs text-gray-500">Taktische Symbole: Bildquelle Feuerwehr Koordination Schweiz FKS</p>
<p className="text-xs text-gray-400 mt-1">v{process.env.APP_VERSION}</p> <p className="text-xs text-gray-400 mt-1">v{process.env.APP_VERSION}</p>
</div> </div>

View File

@@ -59,11 +59,11 @@ export const legal = {
* "Pepe Ziberi / Purepixel" zugeschrieben; die rechtsverbindliche Bezeichnung inkl. * "Pepe Ziberi / Purepixel" zugeschrieben; die rechtsverbindliche Bezeichnung inkl.
* Rechtsform muss der Betreiber bestätigen. * Rechtsform muss der Betreiber bestätigen.
*/ */
operatorName: env('LEGAL_OPERATOR_NAME', 'Pepe Ziberi'), operatorName: env('LEGAL_OPERATOR_NAME', 'Perparim Ziberi'),
/** Rechtsform (z.B. Einzelunternehmen, Verein, GmbH) muss festgelegt werden */ /** Rechtsform */
operatorLegalForm: env('LEGAL_OPERATOR_FORM', '[RECHTSFORM]'), operatorLegalForm: env('LEGAL_OPERATOR_FORM', 'Privatperson'),
/** Vollständige Postadresse des Betreibers */ /** Vollständige Postadresse des Betreibers */
postalAddress: env('LEGAL_POSTAL_ADDRESS', '[POSTADRESSE]'), postalAddress: env('LEGAL_POSTAL_ADDRESS', 'Anglikerstrasse 56, 5612 Villmergen'),
// ─── Kontakt ─────────────────────────────────────────────── // ─── Kontakt ───────────────────────────────────────────────
/** Allgemeine Support-/Kontaktadresse (im Repo öffentlich verwendet) */ /** Allgemeine Support-/Kontaktadresse (im Repo öffentlich verwendet) */
@@ -81,16 +81,16 @@ export const legal = {
// ─── Recht & Gerichtsstand ──────────────────────────────── // ─── Recht & Gerichtsstand ────────────────────────────────
country: 'Schweiz', country: 'Schweiz',
governingLaw: 'Schweizer Recht', governingLaw: 'Schweizer Recht',
/** Gerichtsstand nur angeben, wenn juristisch sinnvoll/bestätigt; sonst Platzhalter. */ /** Gerichtsstand: gesetzlicher Standard am Wohnsitz des Betreibers; zwingende Gerichtsstände vorbehalten. */
jurisdiction: env('LEGAL_JURISDICTION', '[GERICHTSSTAND]'), jurisdiction: env('LEGAL_JURISDICTION', 'Wohnsitz des Betreibers in der Schweiz'),
// ─── Infrastruktur ──────────────────────────────────────── // ─── Infrastruktur ────────────────────────────────────────
/** Hostinganbieter muss bestätigt werden (im Repo nicht eindeutig belegt) */ /** Hostinganbieter: Eigenbetrieb (selbst gehosteter Server beim Betreiber). */
hostingProvider: env('LEGAL_HOSTING_PROVIDER', '[HOSTINGANBIETER]'), hostingProvider: env('LEGAL_HOSTING_PROVIDER', 'Eigenbetrieb (selbst gehosteter Server beim Betreiber)'),
/** Serverstandort muss für ALLE Anbieter, Backups und Logs bestätigt werden */ /** Serverstandort der primären Daten (DB/Objektspeicher). */
serverLocation: env('LEGAL_SERVER_LOCATION', '[SERVERSTANDORT]'), serverLocation: env('LEGAL_SERVER_LOCATION', 'Schweiz (beim Betreiber, Villmergen AG)'),
/** Aufbewahrungsfrist von Sicherungskopien muss festgelegt werden */ /** Aufbewahrungsfrist von Sicherungskopien. */
backupRetention: env('LEGAL_BACKUP_RETENTION', '[BACKUP-AUFBEWAHRUNGSFRIST]'), backupRetention: env('LEGAL_BACKUP_RETENTION', 'bis zu 30 Tage'),
// ─── Externe Dienstleister (Ist-Zustand aus dem Code abgeleitet) ── // ─── Externe Dienstleister (Ist-Zustand aus dem Code abgeleitet) ──
// Nichts erfinden: nur tatsächlich im Code kontaktierte Dienste. Sitz/Region, die nicht // Nichts erfinden: nur tatsächlich im Code kontaktierte Dienste. Sitz/Region, die nicht
@@ -104,8 +104,8 @@ export const legal = {
{ name: 'Open-Elevation', purpose: 'Höhendaten (Fallback)', data: 'Koordinaten', region: '[REGION]' }, { name: 'Open-Elevation', purpose: 'Höhendaten (Fallback)', data: 'Koordinaten', region: '[REGION]' },
{ name: 'Stripe', purpose: 'Zahlungsabwicklung freiwilliger Unterstützungsbeiträge', data: 'Betrag, freiwilliger Name/Nachricht, Zahlungsdaten (direkt bei Stripe)', region: '[REGION u.a. USA/EU; Auslandbearbeitung möglich]', optional: true }, { name: 'Stripe', purpose: 'Zahlungsabwicklung freiwilliger Unterstützungsbeiträge', data: 'Betrag, freiwilliger Name/Nachricht, Zahlungsdaten (direkt bei Stripe)', region: '[REGION u.a. USA/EU; Auslandbearbeitung möglich]', optional: true },
{ name: 'SMTP-/E-Mail-Anbieter', purpose: 'System-E-Mails (Verifizierung, Reset, Kontakt, Einladungen)', data: 'E-Mail-Adresse, Nachrichteninhalt', region: '[REGION abhängig vom konfigurierten Anbieter]', optional: true }, { name: 'SMTP-/E-Mail-Anbieter', purpose: 'System-E-Mails (Verifizierung, Reset, Kontakt, Einladungen)', data: 'E-Mail-Adresse, Nachrichteninhalt', region: '[REGION abhängig vom konfigurierten Anbieter]', optional: true },
{ name: 'MinIO (Objektspeicher)', purpose: 'Datei-/Bild-Uploads (Pläne, Logos, Symbole)', data: 'hochgeladene Dateien', region: '[SERVERSTANDORT]' }, { name: 'MinIO (Objektspeicher, Eigenbetrieb)', purpose: 'Datei-/Bild-Uploads (Pläne, Logos, Symbole)', data: 'hochgeladene Dateien', region: 'Schweiz (beim Betreiber)' },
{ name: 'PostgreSQL (Datenbank)', purpose: 'Primäre Datenhaltung', data: 'Konto-, Organisations-, Plan- und Journaldaten', region: '[SERVERSTANDORT]' }, { name: 'PostgreSQL (Datenbank, Eigenbetrieb)', purpose: 'Primäre Datenhaltung', data: 'Konto-, Organisations-, Plan- und Journaldaten', region: 'Schweiz (beim Betreiber)' },
] as ExternalProcessor[], ] as ExternalProcessor[],
// ─── Rechtsdokumente: bewusst gesetzte Versionen ────────── // ─── Rechtsdokumente: bewusst gesetzte Versionen ──────────