Zum Hauptinhalt springen
development

Vorlagen-Zentrale: Von Idee zur Web-App

Einblick in unseren Entwicklungsprozess: Von der Marktanalyse über UX-Design bis zum Launch einer Dokumenten-Plattform mit E-Rechnungs-Generator.

Onur CirakogluOnur Cirakoglu
12 Min. Lesezeit
#case-study#web-app#ux#next-js#pdf-generierung
Vorlagen-Zentrale auf verschiedenen Geräten mit Lebenslauf-Vorschau

Nach dem erfolgreichen Launch unserer Rechner Zentrale fragten wir uns: Welches Problem können wir als nächstes lösen? Die Antwort wurde zur Vorlagen-Zentrale – einer Plattform für Lebensläufe, Kündigungen und E-Rechnungen. In dieser Case Study teilen wir unseren kompletten Entwicklungsprozess.

Phase 1: Die Idee finden

Marktanalyse

Wir starteten mit einer systematischen Keyword-Recherche:

KeywordMonatl. SuchenWettbewerb
lebenslauf vorlage165.000Hoch
kündigung schreiben90.000Mittel
rechnung schreiben74.000Mittel
e-rechnung erstellen12.000Niedrig
mietvertrag vorlage40.000Mittel

Insight: Über 300.000 monatliche Suchen im Vorlagen-Bereich – mit Potenzial für eine Privacy-First-Lösung.

Wettbewerbsanalyse

Die bestehenden Anbieter hatten Schwächen:

  1. Datenschutz: Upload auf Server, Registrierungspflicht
  2. Kosten: Versteckte Gebühren, Abo-Modelle
  3. Qualität: Veraltete Designs, Word-Dokumente aus 2010
  4. E-Rechnung: Kein Anbieter bot kostenlosen ZUGFeRD-Generator

Unsere Differenzierung

Wir definierten drei Kernprinzipien:

  1. 100% clientseitig – Keine Daten verlassen den Browser
  2. Kostenlos nutzbar – Keine Registrierung, keine versteckten Kosten
  3. Modern & aktuell – Zeitgemäße Designs, aktuelle Gesetze (E-Rechnung 2026)

Phase 2: UX Research & Design

User Personas

Wir identifizierten drei Hauptzielgruppen:

Persona 1: Lisa, 26, Berufseinsteigerin

  • Sucht: Modernen Lebenslauf ohne Word-Kenntnisse
  • Pain Point: Keine Zeit für komplizierte Software
  • Ziel: In 10 Minuten zum fertigen PDF

Persona 2: Thomas, 42, Freelancer

  • Sucht: Schnelle Rechnungserstellung
  • Pain Point: E-Rechnungspflicht 2026 verstehen
  • Ziel: Gesetzeskonforme Rechnungen ohne Buchhaltungssoftware

Persona 3: Maria, 35, Wechselwillige

  • Sucht: Kündigungsvorlage für Fitnessstudio
  • Pain Point: Rechtssichere Formulierungen
  • Ziel: Kündigung in 2 Minuten fertig

User Flows

Für jeden Generator definierten wir optimale Flows:

Lebenslauf-Generator:
1. Design wählen (3 Optionen)
2. Persönliche Daten eingeben
3. Berufserfahrung hinzufügen
4. Ausbildung hinzufügen
5. Skills & Sprachen
6. Live-Vorschau + PDF-Download

Ziel: < 10 Minuten bis zum fertigen Lebenslauf

Wireframes & Prototyping

Wir skizzierten zunächst low-fidelity Wireframes:

Lebenslauf-Generator:

  • Split-Screen: Formular links, Vorschau rechts
  • Sticky Preview auf Mobile
  • Drag & Drop für Sektionen-Reihenfolge

Kündigungs-Generator:

  • Anbieter-Suche mit Autovervollständigung
  • Vorausgefüllte Adressen und Fristen
  • Ein-Klick-Download

Phase 3: Technische Architektur

Tech-Stack Entscheidung

Nach unseren Erfahrungen mit der Rechner Zentrale wählten wir:

KomponenteTechnologieBegründung
FrameworkNext.js 16Bewährt, SEO-optimiert
UITailwind CSS 4Konsistent mit anderen Projekten
PDF-Generierung@react-pdf/rendererClient-side, keine Server-Kosten
E-Rechnungpdf-libXML-Embedding für ZUGFeRD
ValidierungZodType-safe Form Validation
StateReact 19Native Form Actions

Architektur-Übersicht

src/
├── app/                      # Next.js App Router
│   ├── (generators)/         # Generator-Routen
│   │   ├── page.tsx          # Lebenslauf (Homepage)
│   │   ├── bewerbung/        # Anschreiben
│   │   ├── rechnungen/       # Rechnungen + E-Rechnung
│   │   └── kuendigungen/     # Kündigungen
│   └── ratgeber/             # SEO-Content
├── components/
│   ├── generators/           # Generator-Komponenten
│   ├── pdf/                  # PDF-Templates
│   └── ui/                   # Shared UI
├── lib/
│   ├── e-invoice/            # ZUGFeRD/XRechnung
│   ├── providers/            # Kündigungs-Anbieter
│   └── templates/            # Vorlagen-Daten
└── hooks/                    # Custom Hooks

Die PDF-Challenge

Browser-basierte PDF-Generierung ist komplex:

Problem 1: Performance

// Schlecht: PDF bei jedem Keystroke neu rendern
useEffect(() => {
  generatePdf(formData)
}, [formData])
 
// Besser: Debounce + Lazy Loading
const debouncedData = useDebounce(formData, 500)
const [pdfBlob, setPdfBlob] = useState<Blob | null>(null)
 
useEffect(() => {
  const generate = async () => {
    const blob = await pdf(<ResumeDocument data={debouncedData} />).toBlob()
    setPdfBlob(blob)
  }
  generate()
}, [debouncedData])

Problem 2: Schriften

// Schriften müssen explizit registriert werden
import { Font } from '@react-pdf/renderer'
 
Font.register({
  family: 'Inter',
  fonts: [
    { src: '/fonts/Inter-Regular.ttf', fontWeight: 400 },
    { src: '/fonts/Inter-Bold.ttf', fontWeight: 700 },
  ],
})

Problem 3: Live-Vorschau

// PDFViewer für Desktop, Screenshot für Mobile
export function LivePreview({ data, template }) {
  const isMobile = useMediaQuery('(max-width: 768px)')
 
  if (isMobile) {
    return <PreviewImage data={data} template={template} />
  }
 
  return (
    <PDFViewer className="w-full h-[600px]">
      <ResumeDocument data={data} template={template} />
    </PDFViewer>
  )
}

Phase 4: Feature Development

Lebenslauf-Generator

Drei Designs mit unterschiedlichen Charakteren:

Modern:

  • Minimalistisch, viel Whitespace
  • Akzentfarbe wählbar
  • Ideal für Tech/Kreativ-Berufe

Klassisch:

  • Traditionelles Layout
  • Zeitlose Typografie
  • Ideal für konservative Branchen

Kreativ:

  • Sidebar mit Foto
  • Grafische Skill-Anzeige
  • Ideal für Marketing/Design
// components/pdf/templates/modern.tsx
export function ModernResume({ data }: { data: ResumeData }) {
  return (
    <Document>
      <Page size="A4" style={styles.page}>
        {/* Header mit Name und Kontakt */}
        <View style={styles.header}>
          <Text style={styles.name}>{data.personalInfo.name}</Text>
          <Text style={styles.title}>{data.personalInfo.title}</Text>
          <View style={styles.contact}>
            <Text>{data.personalInfo.email}</Text>
            <Text>{data.personalInfo.phone}</Text>
          </View>
        </View>
 
        {/* Berufserfahrung */}
        <View style={styles.section}>
          <Text style={styles.sectionTitle}>Berufserfahrung</Text>
          {data.experience.map((exp, i) => (
            <ExperienceItem key={i} experience={exp} />
          ))}
        </View>
 
        {/* ... weitere Sektionen */}
      </Page>
    </Document>
  )
}

Kündigungs-Generator

73 vorausgefüllte Anbieter mit korrekten Adressen und Fristen:

// lib/providers/mobilfunk.ts
export const mobilfunkProviders: Provider[] = [
  {
    id: 'vodafone',
    name: 'Vodafone',
    category: 'mobilfunk',
    address: {
      company: 'Vodafone GmbH',
      street: 'Ferdinand-Braun-Platz 1',
      zip: '40549',
      city: 'Düsseldorf',
    },
    cancellationPeriod: '3 Monate zum Vertragsende',
    minimumTerm: '24 Monate',
    hints: [
      'Rufnummernmitnahme rechtzeitig beantragen',
      'Kündigungsbestätigung aufbewahren',
    ],
  },
  // ... 72 weitere Anbieter
]

E-Rechnungsgenerator

Das technisch anspruchsvollste Feature:

// lib/e-invoice/generator.ts
export async function generateEInvoice(
  invoice: InvoiceData,
  format: 'zugferd' | 'xrechnung'
): Promise<Uint8Array> {
  // 1. Validierung
  const validation = validateInvoice(invoice)
  if (!validation.valid) {
    throw new ValidationError(validation.errors)
  }
 
  // 2. PDF generieren
  const pdfComponent = <InvoiceDocument data={invoice} />
  const pdfBlob = await pdf(pdfComponent).toBlob()
  const pdfBytes = await pdfBlob.arrayBuffer()
 
  // 3. XML erstellen
  const xml = format === 'zugferd'
    ? generateZugferdXml(invoice, invoice.profile)
    : generateXRechnungXml(invoice)
 
  // 4. XML in PDF einbetten
  const pdfDoc = await PDFDocument.load(pdfBytes)
  await embedXml(pdfDoc, xml, format)
 
  // 5. PDF/A-3 Compliance
  await setPdfACompliance(pdfDoc)
 
  return pdfDoc.save()
}

Phase 5: SEO & Content

Keyword-Strategie

Jede Seite targetet spezifische Keywords:

SeitePrimary KeywordSuchvolumen
/lebenslauf vorlage165K
/rechnungen/generatorrechnung schreiben74K
/rechnungen/e-rechnunge-rechnung erstellen12K
/kuendigungen/generatorkündigung schreiben90K
/kuendigungen/vodafonevodafone kündigen22K

Ratgeber-Content

SEO-optimierte Artikel zu relevanten Themen:

  • "E-Rechnung Guide 2026" – erklärt ZUGFeRD und XRechnung
  • "Kündigung schreiben" – rechtliche Grundlagen
  • "Lebenslauf Tipps 2026" – aktuelle Best Practices

Strukturierte Daten

Jeder Generator hat passende JSON-LD Schemas:

// components/seo/GeneratorSchema.tsx
export function GeneratorSchema({ generator }: { generator: GeneratorInfo }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'SoftwareApplication',
    name: generator.name,
    applicationCategory: 'BusinessApplication',
    operatingSystem: 'Web Browser',
    offers: {
      '@type': 'Offer',
      price: '0',
      priceCurrency: 'EUR',
    },
    creator: {
      '@type': 'Organization',
      name: 'HEADON.pro',
      url: 'https://headon.pro',
    },
  }
 
  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    />
  )
}

Phase 6: Launch & Learnings

Launch-Checkliste

Vor dem Go-Live:

Performance-Ergebnisse

MetrikZielErreicht
LCP< 2.5s1.2s
CLS< 0.10.02
INP< 200ms85ms
Lighthouse> 9096

Was wir gelernt haben

1. Client-Side PDF ist machbar – mit Kompromissen

Die Browser-basierte PDF-Generierung funktioniert gut, aber:

  • Schriften müssen manuell eingebunden werden
  • Komplexe Layouts erfordern viel CSS-in-JS
  • Live-Vorschau ist performanceintensiv

2. E-Rechnung ist komplexer als gedacht

ZUGFeRD-Konformität erfordert:

  • Präzise XML-Struktur nach EN16931
  • Korrekte PDF/A-3 Metadaten
  • Validierung aller Pflichtfelder

3. SEO für Tools ist anders

Anders als bei Content-Seiten:

  • Nutzer wollen sofort loslegen (keine lange Intro)
  • CTA muss above-the-fold sein
  • FAQ-Sektion für SEO, aber unter dem Tool

4. Privacy ist ein echtes Verkaufsargument

"Keine Datenspeicherung" überzeugt Nutzer:

  • Höhere Conversion als Wettbewerber mit Registrierung
  • Keine DSGVO-Banner nötig
  • Vertrauen durch Transparenz

Nächste Schritte

Die Vorlagen-Zentrale ist live, aber wir entwickeln weiter:

  1. Mehr Vorlagen: Arbeitszeugnis, Abmahnung, Testament
  2. Mehr Designs: Zusätzliche Lebenslauf-Templates
  3. API-Zugang: Für Entwickler und Unternehmen
  4. Premium-Features: Word-Export, erweiterte Anpassungen

Sie planen eine eigene Web-App? Die Vorlagen-Zentrale zeigt, wie wir komplexe Dokumenten-Anwendungen datenschutzkonform umsetzen. Kontaktieren Sie uns für ein unverbindliches Beratungsgespräch zu Ihrem Projekt.

Kostenlose Erstberatung

Lassen Sie uns über Ihr Projekt sprechen. Unverbindlich und kostenfrei.

Beratungstermin buchen
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:

#case-study#web-app#ux#next-js#pdf-generierung

Das könnte Sie auch interessieren

Weitere Artikel zu ähnlichen Themen