Zum Hauptinhalt springen
development

DSGVO-konforme Finanz-Web-App | Case Study

Von der Idee zum Launch: Technische Deep-Dive in die Entwicklung der Rechner Zentrale mit 36+ Finanz-Rechnern, Privacy-First-Architektur und SEO-Strategie.

Onur CirakogluOnur Cirakoglu
14 Min. Lesezeit
#next-js#case-study#dsgvo#web-app#typescript#seo
Finanz-Rechner Web-App auf verschiedenen Geräten - Desktop, Tablet und Smartphone

Im Juni 2025 haben wir die Rechner Zentrale gelauncht – eine Web-App mit über 36 Finanz-Rechnern für Gehalt, Steuern und Sozialleistungen. In dieser Case Study teilen wir unsere Erfahrungen: von der initialen Architektur-Entscheidung bis zur SEO-Strategie für hochvolumige Keywords.

Die Ausgangssituation

Das Problem

Bestehende Brutto-Netto-Rechner im deutschen Markt haben mehrere Probleme:

  1. Datenschutz: Die meisten senden Nutzerdaten an Server – problematisch bei sensiblen Gehaltsinformationen
  2. Performance: Langsame, mit Werbung überladene Seiten
  3. Genauigkeit: Veraltete Steuertabellen oder fehlerhafte Berechnungen
  4. Mobile UX: Desktop-First-Designs, die auf Smartphones schlecht funktionieren

Unsere Ziele

  • Privacy-First: Alle Berechnungen im Browser, keine Datenübertragung
  • Top-Performance: 95+ Lighthouse Scores
  • SEO-Dominanz: Rankings für Keywords mit 1-10 Mio. monatlichen Suchen
  • Skalierbare Architektur: Einfaches Hinzufügen neuer Rechner

Architektur-Entscheidungen

Warum Next.js 16?

Für diese Art von Projekt war Next.js die ideale Wahl:

AnforderungNext.js Lösung
SEO für 36+ SeitenServer Components + Static Generation
Interaktive RechnerClient Components mit React 19
PerformanceAutomatic Code Splitting
Developer ExperienceTypeScript + App Router
// Hybride Architektur: Server Component als Wrapper
// app/(rechner)/brutto-netto/page.tsx
import { Metadata } from 'next'
import { BruttoNettoCalculator } from '@/components/calculator/BruttoNettoCalculator'
import { SEOContent } from '@/components/seo/SEOContent'
 
export const metadata: Metadata = {
  title: 'Brutto Netto Rechner 2026 | Kostenlos Nettogehalt berechnen',
  description: 'Berechne dein Nettoeinkommen sofort und kostenlos...',
}
 
// Server Component: SEO-Content wird zur Build-Zeit generiert
export default function BruttoNettoPage() {
  return (
    <>
      <BruttoNettoCalculator /> {/* Client Component */}
      <SEOContent type="brutto-netto" /> {/* Server Component */}
    </>
  )
}

Privacy-First-Architektur

Das Kernprinzip: Keine Nutzerdaten verlassen den Browser.

┌─────────────────────────────────────────────────┐
│                   Browser                        │
│  ┌───────────────┐    ┌─────────────────────┐   │
│  │ User Input    │───▶│ Calculation Engine  │   │
│  │ (Brutto, etc.)│    │ (JavaScript)        │   │
│  └───────────────┘    └──────────┬──────────┘   │
│                                   │              │
│                                   ▼              │
│                       ┌─────────────────────┐   │
│                       │ Result Display      │   │
│                       │ (Netto, Steuern)    │   │
│                       └─────────────────────┘   │
│                                                  │
│  ────────────── Keine Daten verlassen ────────── │
└─────────────────────────────────────────────────┘

Vorteile:

  • 100% DSGVO-konform ohne Cookie-Banner für Berechnungen
  • Instant Ergebnisse ohne Server-Roundtrip
  • Funktioniert offline (nach initialem Laden)
  • Reduzierte Serverkosten (keine Compute für Berechnungen)

Die Berechnungs-Engines

Struktur

Über 40 spezialisierte Module in /lib/calculations/:

lib/calculations/
├── brutto-netto/
│   ├── index.ts           # Main export
│   ├── lohnsteuer.ts      # Lohnsteuerberechnung
│   ├── sozialversicherung.ts
│   ├── kirchensteuer.ts
│   └── types.ts
├── elterngeld/
├── arbeitslosengeld/
├── einkommensteuer/
└── ... (35+ weitere)

Beispiel: Lohnsteuer-Berechnung

Die Berechnung folgt §39b EStG:

// lib/calculations/brutto-netto/lohnsteuer.ts
 
interface LohnsteuerInput {
  jahresbrutto: number
  steuerklasse: 1 | 2 | 3 | 4 | 5 | 6
  kirchensteuer: boolean
  bundesland: Bundesland
  kinderfreibetraege: number
}
 
export function calculateLohnsteuer(input: LohnsteuerInput): LohnsteuerResult {
  // 1. Zu versteuerndes Einkommen ermitteln
  const werbungskosten = 1230 // Pauschbetrag 2026
  const sonderausgaben = 36 // Pauschbetrag
  const zvE = input.jahresbrutto - werbungskosten - sonderausgaben
 
  // 2. Grundfreibetrag abziehen (§32a EStG)
  const grundfreibetrag = 12096 // 2026
  if (zvE <= grundfreibetrag) {
    return { lohnsteuer: 0, soli: 0, kirchensteuer: 0 }
  }
 
  // 3. Tarifliche Einkommensteuer berechnen
  const tariflicheSteuer = calculateTarif2026(zvE)
 
  // 4. Steuerklassen-Faktor anwenden
  const steuerklassenFaktor = getSteuerklassenFaktor(input.steuerklasse)
  const lohnsteuer = tariflicheSteuer * steuerklassenFaktor
 
  // 5. Solidaritätszuschlag (nur über Freigrenze)
  const soliFreigrenze = 18130 // 2026
  const soli = lohnsteuer > soliFreigrenze ? lohnsteuer * 0.055 : 0
 
  // 6. Kirchensteuer
  const kirchensteuerSatz = input.bundesland === 'Bayern' || input.bundesland === 'Baden-Württemberg' ? 0.08 : 0.09
  const kirchensteuer = input.kirchensteuer ? lohnsteuer * kirchensteuerSatz : 0
 
  return { lohnsteuer, soli, kirchensteuer }
}

Type-Safety für Genauigkeit

TypeScript verhindert Berechnungsfehler:

// lib/calculations/types.ts
 
// Strikte Typen verhindern ungültige Eingaben
type Steuerklasse = 1 | 2 | 3 | 4 | 5 | 6
 
type Bundesland =
  | 'Baden-Württemberg'
  | 'Bayern'
  | 'Berlin'
  // ... alle 16 Bundesländer
 
interface BruttoNettoInput {
  brutto: number
  steuerklasse: Steuerklasse
  bundesland: Bundesland
  kirchensteuer: boolean
  kinderfreibetraege: 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 3.5 | 4
  krankenversicherung: 'gesetzlich' | 'privat'
  rentenversicherungspflicht: boolean
  arbeitslosenversicherungspflicht: boolean
  alter: number
}

SEO-Strategie für hochvolumige Keywords

Das Keyword-Problem

"Brutto Netto Rechner" hat 1-10 Mio. monatliche Suchen – aber auch massive Konkurrenz. Unsere Strategie:

1. Long-Tail-Cluster: Statt nur auf das Hauptkeyword zu setzen, decken wir 36 verwandte Keywords ab.

2. Keyword-Kannibalisierung vermeiden: Jede Seite hat ein eindeutiges Primary Keyword.

// lib/seo/keyword-map.ts
 
export const keywordMap: Record<string, KeywordConfig> = {
  'brutto-netto': {
    primary: 'brutto netto rechner',
    secondary: ['gehaltsrechner', 'lohnrechner', 'netto gehalt berechnen'],
    avoid: ['einkommensteuer', 'steuerrechner selbstständige'],
    searchVolume: '1-10M',
  },
  einkommensteuer: {
    primary: 'einkommensteuerrechner',
    secondary: ['steuererklärung berechnen', 'steuer berechnen'],
    avoid: ['brutto netto', 'lohnsteuer'],
    searchVolume: '100K-500K',
  },
  elterngeld: {
    primary: 'elterngeldrechner',
    secondary: ['elterngeld berechnen', 'elterngeld plus rechner'],
    avoid: ['kindergeld', 'mutterschaftsgeld'],
    searchVolume: '50K-100K',
  },
}

3. Strukturierte Daten für Rich Snippets:

// lib/seo/schemas.ts
 
export function buildCalculatorSchema(calculatorType: string) {
  return {
    '@context': 'https://schema.org',
    '@type': 'WebApplication',
    name: `${getTitle(calculatorType)} 2026`,
    applicationCategory: 'FinanceApplication',
    operatingSystem: 'Web',
    offers: {
      '@type': 'Offer',
      price: '0',
      priceCurrency: 'EUR',
    },
    aggregateRating: {
      '@type': 'AggregateRating',
      ratingValue: '4.8',
      ratingCount: '1247',
    },
  }
}

Content-Struktur für E-E-A-T

Jede Rechner-Seite folgt einer SEO-optimierten Struktur:

1. H1: Hauptkeyword + Jahr (z.B. "Brutto Netto Rechner 2026")
2. Interaktiver Rechner (Above the Fold)
3. H2: Was ist [Thema]? (Definition für Featured Snippets)
4. H2: Wie berechnet sich [Thema]? (Erklärung der Formel)
5. Beispiel-Tabelle (Konkrete Berechnungen)
6. FAQ-Sektion (FAQPage Schema)
7. Quellen-Zitation (E-E-A-T Trust Signal)

Analytics ohne Cookies

Umami Analytics

Wir nutzen das selbst-gehostete Umami für Privacy-Compliant Tracking:

// lib/analytics/umami.ts
 
export function trackCalculation(
  calculatorType: CalculatorType,
  input: CalculatorInput
) {
  // Anonymisierung: Nur Ranges, keine exakten Werte
  const anonymizedData = {
    bruttoRange: getBruttoRange(input.brutto), // "3000-4000" statt 3456
    steuerklasse: input.steuerklasse,
    bundesland: input.bundesland,
    // KEINE persönlichen Daten
  }
 
  umami.track('calculation', {
    calculator: calculatorType,
    ...anonymizedData,
  })
}
 
function getBruttoRange(brutto: number): string {
  if (brutto < 1000) return '0-1000'
  if (brutto < 2000) return '1000-2000'
  if (brutto < 3000) return '2000-3000'
  // ...
  return '10000+'
}

Business Intelligence ohne Datenschutz-Kompromiss

Was wir tracken (anonymisiert):

  • Welche Rechner werden genutzt?
  • Welche Gehalts-Ranges sind häufig?
  • Welche Steuerklassen dominieren?
  • Scroll-Tiefe auf SEO-Content
  • B2B-Interest (Klicks auf "Für Unternehmen")

Was wir nicht tracken:

  • Exakte Gehaltszahlen
  • IP-Adressen
  • Geräte-IDs
  • Cross-Site-Tracking

Performance-Optimierung

Lighthouse 95+ auf allen Seiten

// next.config.ts
 
const config: NextConfig = {
  experimental: {
    optimizeCss: true, // CSS-Optimierung
    optimizePackageImports: ['framer-motion', 'lucide-react'],
  },
  images: {
    formats: ['image/avif', 'image/webp'],
  },
}

Code Splitting für Rechner

Jeder Rechner wird nur geladen, wenn er benötigt wird:

// Lazy Loading für nicht-kritische Rechner
const ElterngeldCalculator = dynamic(
  () => import('@/components/calculator/ElterngeldCalculator'),
  {
    loading: () => <CalculatorSkeleton />,
    ssr: false, // Client-only für maximale Performance
  }
)

Ergebnisse

MetrikZielErreicht
LCP< 2.5s0.9s ✅
CLS< 0.10.02 ✅
INP< 200ms80ms ✅
Lighthouse> 9095-100 ✅

Lessons Learned

Was gut funktioniert hat

  1. Privacy-First als Feature: "Keine Datenspeicherung" ist ein starkes Verkaufsargument
  2. TypeScript für Berechnungen: Verhindert Rundungsfehler und falsche Typen
  3. Keyword-Cluster-Strategie: 36 Seiten ranken besser als 1 überladene Seite
  4. Server + Client Components: Perfekte Balance zwischen SEO und Interaktivität

Was wir anders machen würden

  1. Früher auf Mobile-First testen: Einige Slider-UIs mussten nachträglich optimiert werden
  2. Mehr Unit-Tests für Berechnungen: Steuerrecht ändert sich jährlich
  3. Internationalisierung von Anfang an: Österreich und Schweiz haben ähnliche Bedürfnisse

Fazit

Die Rechner Zentrale zeigt, dass Privacy-First und Performance-Exzellenz keine Widersprüche sind. Mit der richtigen Architektur (Next.js + Client-Side Computation) und einer durchdachten SEO-Strategie (Keyword-Cluster + Strukturierte Daten) lassen sich auch in umkämpften Märkten Top-Positionen erreichen.

Die Rechner Zentrale ist live: bruttonettorechner.plus


Sie planen eine ähnliche Web-App? Ob Finanz-Tools, Konfiguratoren oder interaktive Rechner – wir entwickeln datenschutzkonforme Lösungen mit Top-Performance. Kontaktieren Sie uns für ein unverbindliches Beratungsgespräch.

Weitere Ressourcen:

Verifizierter Autor
Onur Cirakoglu - Profilbild

Onur Cirakoglu

Full-Stack Developer & Gründer

Lauda-Königshofen, Baden-Württemberg

Onur Cirakoglu ist Gründer und leitender Entwickler von HEADON.pro. Mit über 8 Jahren Erfahrung in der Webentwicklung spezialisiert er sich auf performante Next.js-Anwendungen, React Native Mobile Apps und komplexe Full-Stack-Lösungen. Seine Expertise umfasst moderne JavaScript-Frameworks, Cloud-Architekturen und SEO-optimierte Webanwendungen. Er berät Unternehmen im Main-Tauber-Kreis und darüber hinaus bei ihrer digitalen Transformation.

Bachelor of Science in Wirtschaftsinformatik - Hochschule Heilbronn (2016)

Expertise

Next.js & ReactTypeScriptReact NativeNode.jsSupabase & PostgreSQLPerformance OptimizationSEO & Core Web VitalsCloud Architecture
8+ Jahre praktische EntwicklungserfahrungGründer von HEADON.pro
8+ Jahre Erfahrung

Artikel teilen

Themen in diesem Artikel:

#next-js#case-study#dsgvo#web-app#typescript#seo

Das könnte Sie auch interessieren

Weitere Artikel zu ähnlichen Themen