diff --git a/package.json b/package.json
index e4a9a4f..1a63c56 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lageplan",
- "version": "1.7.2",
+ "version": "1.7.3",
"description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation",
"private": true,
"scripts": {
diff --git a/src/app/app/page.tsx b/src/app/app/page.tsx
index 7c7f38e..68ca656 100644
--- a/src/app/app/page.tsx
+++ b/src/app/app/page.tsx
@@ -20,6 +20,7 @@ import { Button } from '@/components/ui/button'
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog'
import { JournalView } from '@/components/journal/journal-view'
import { Lock, Eye, Pencil, AlertTriangle, WifiOff, GraduationCap, Map as MapIcon, ClipboardList, LayoutGrid } from 'lucide-react'
+import { UsageNoticeBanner } from '@/components/legal/usage-notice-banner'
import { CustomDragLayer } from '@/components/map/custom-drag-layer'
import { OnboardingTour, resetOnboardingTour } from '@/components/onboarding/onboarding-tour'
import { useKeyboardShortcuts } from '@/hooks/use-keyboard-shortcuts'
@@ -1035,6 +1036,8 @@ export default function AppPage() {
editingLoading={editingLoading}
/>
+
+ Lageplan ist ein unterstützendes Werkzeug ohne garantierte Verfügbarkeit. Bitte haltet aktuelle + Offline- und Notfallunterlagen bereit.{' '} + Mehr erfahren. +
+ +- Länge inkl. 10% Verlegereserve · Höhendaten: {measurement.elevationSource === 'open-meteo' ? 'Open-Meteo DEM (~90 m Raster)' : measurement.elevationSource === 'open-elevation' ? 'Open-Elevation' : 'keine'} · Richtwerte, ersetzt keine Lagebeurteilung. + Länge inkl. 10% Verlegereserve · Höhendaten: {measurement.elevationSource === 'open-meteo' ? 'Open-Meteo DEM (~90 m Raster)' : measurement.elevationSource === 'open-elevation' ? 'Open-Elevation' : 'keine'}. +
++ Berechnungshilfe: Ergebnis vor der operativen Verwendung fachlich prüfen. Karten-/Geodaten können ungenau sein.
diff --git a/src/hooks/use-map-export.ts b/src/hooks/use-map-export.ts index 55aa3e0..ff8cd05 100644 --- a/src/hooks/use-map-export.ts +++ b/src/hooks/use-map-export.ts @@ -313,6 +313,19 @@ export function useMapExport({ } if (format === 'png') { + // Rechtlicher Prüf-Hinweis unten einbrennen + const disclaimer = 'Mit Lageplan erstellt · Angaben vor Verwendung fachlich prüfen · Offline-/Einsatzunterlagen der Organisation bleiben massgebend' + const barH = Math.max(18, Math.round(exportCanvas.width * 0.014)) + ctx.save() + ctx.fillStyle = 'rgba(0,0,0,0.55)' + ctx.fillRect(0, exportCanvas.height - barH, exportCanvas.width, barH) + ctx.fillStyle = '#ffffff' + ctx.font = `${Math.round(barH * 0.55)}px sans-serif` + ctx.textBaseline = 'middle' + ctx.textAlign = 'center' + ctx.fillText(disclaimer, exportCanvas.width / 2, exportCanvas.height - barH / 2, exportCanvas.width - 20) + ctx.restore() + const link = document.createElement('a') link.download = `${safeName}.png` link.href = exportCanvas.toDataURL('image/png') @@ -435,6 +448,14 @@ export function useMapExport({ // ── Footer ── const footerY = pageH - m - 4 + // Rechtlicher Prüf-Hinweis (eine Zeile über dem Meta-Footer) + pdf.setFontSize(6.5) + pdf.setFont('helvetica', 'italic') + pdf.setTextColor(120, 120, 120) + pdf.text( + 'Mit Lageplan erstellt. Angaben vor Verwendung fachlich prüfen. Die aktuellen Offline- und Einsatzunterlagen der zuständigen Organisation bleiben massgebend.', + m, footerY - 4 + ) pdf.setFontSize(7) pdf.setFont('helvetica', 'normal') pdf.setTextColor(156, 163, 175) // gray-400 diff --git a/src/middleware.ts b/src/middleware.ts index 8ce5a8f..3be3d87 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -95,7 +95,15 @@ export async function middleware(req: NextRequest) { return new NextResponse(null, { status: 404 }) } - return NextResponse.next() + const res = NextResponse.next() + + // Private/authentifizierte Bereiche: nicht indexieren und nicht cachen. + if (PROTECTED_ROUTES.some(r => pathname.startsWith(r))) { + res.headers.set('X-Robots-Tag', 'noindex, nofollow, noarchive') + res.headers.set('Cache-Control', 'no-store, max-age=0, must-revalidate') + } + + return res } export const config = {