'use client' import { useState, useEffect } from 'react' import Link from 'next/link' import { Button } from '@/components/ui/button' import { Heart, Coffee, ArrowLeft, Loader2, Shield, Sparkles, Check, ChevronRight, Lightbulb, } from 'lucide-react' import { Logo } from '@/components/ui/logo' const tiers = [ { value: 10, label: 'Pizza', emoji: '\uD83C\uDF55', desc: 'Eine Pizza für die nächste Coding-Session' }, { value: 20, label: 'Server', emoji: '\uD83D\uDDA5\uFE0F', desc: 'Hilft die monatlichen Serverkosten zu decken' }, { value: 50, label: 'Feature', emoji: '\uD83D\uDE80', desc: 'Finanziert die Entwicklung eines neuen Features' }, ] export default function SpendenPage() { const [amount, setAmount] = useState(20) const [customAmount, setCustomAmount] = useState('') const [isCustom, setIsCustom] = useState(false) const [name, setName] = useState('') const [message, setMessage] = useState('') const [isLoading, setIsLoading] = useState(false) const [stripeConfigured, setStripeConfigured] = useState(null) const [error, setError] = useState('') useEffect(() => { fetch('/api/donate/config') .then(r => r.json()) .then(data => setStripeConfigured(data.configured)) .catch(() => setStripeConfigured(false)) }, []) const activeTier = tiers.reduce((prev, curr) => amount >= curr.value ? curr : prev , tiers[0]) const handleDonate = async () => { setIsLoading(true) setError('') try { const res = await fetch('/api/donate/checkout', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ amount, name: name.trim() || undefined, message: message.trim() || undefined }), }) const data = await res.json() if (!res.ok) throw new Error(data.error || 'Fehler beim Erstellen der Zahlung') if (data.url) { window.location.href = data.url } } catch (e) { setError(e instanceof Error ? e.message : 'Unbekannter Fehler') setIsLoading(false) } } return (
{/* Navigation */}
{/* Header */}

Lageplan unterstützen

Lageplan ist ein kostenloses Herzensprojekt von einem Feuerwehrmann für Feuerwehrleute. Mit deiner Spende hilfst du, die Weiterentwicklung und den Betrieb zu finanzieren.

{/* Why donate */}

Wohin fliesst deine Spende?

  • Server-Hosting in der Schweiz (monatliche Kosten)
  • Entwicklung neuer Features (PWA, Vorlagen, Einsatzpläne)
  • Domain, SSL-Zertifikate und Infrastruktur
{/* Donation form */}

Betrag wählen

{/* Quick amounts */}
{tiers.map(tier => ( ))}
{/* Custom amount input */} {isCustom && (
CHF { setCustomAmount(e.target.value) const val = parseInt(e.target.value) if (val > 0) setAmount(val) }} placeholder="Betrag eingeben..." className="w-full rounded-lg border border-gray-300 pl-14 pr-4 py-3 text-lg font-bold focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-transparent" autoFocus />
)} {/* Current tier description */} {!isCustom && (
{activeTier.emoji}

{activeTier.desc}

)} {/* Optional name & message */}
setName(e.target.value)} placeholder="Anonym" className="w-full rounded-lg border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-transparent" />