Skip to Content
🔐 Closed Beta – Jetzt auf die Warteliste eintragen! Limitierte Plätze für Early Adopters →
De AtAPIDesign System

Design System

💬

Hallo, ich bin Sophie! 👋 Hier finden Sie unser Design System für Partner-Integrationen. Damit stellst Sie sicher, dass Ihre Status-Anzeigen konsistent mit BuchhaltGenie aussehen - in Light und Dark Mode!

Für Partner-Integrationen stellt BuchhaltGenie ein konsistentes Design System bereit, das semantische Farben für Status-Anzeigen verwendet. Diese Farben passen sich automatisch an Light und Dark Mode an und erfüllen die WCAG 2.1 AA Kontrast-Anforderungen.

Barrierefreiheit: Alle Farben erfüllen WCAG 2.1 AA Kontrast-Anforderungen (4.5:1 Minimum für Text, 3:1 für UI-Komponenten).


Status-Kategorien

BuchhaltGenie verwendet 5 semantische Status-Kategorien, die konsistent in allen UI-Komponenten eingesetzt werden.

KategorieFarbeCSS-TokenVerwendung
successGrün--successErfolgreich, Bezahlt, Aktiv, Angenommen
warningOrange--warningWarnung, Ausstehend, Abgelaufen
errorRot--destructiveFehler, Überfällig, Abgelehnt
infoBlau--primaryInformation, Versendet, Konvertiert
neutralGrau--mutedEntwurf, Inaktiv, Storniert

Farbwerte (HSL)

Die semantischen Token werden als CSS-Variablen definiert und passen sich automatisch an den Farbmodus an:

:root { --success: 142 71% 45%; /* Grün */ --warning: 38 92% 50%; /* Orange */ --destructive: 0 84% 60%; /* Rot */ --primary: 221 83% 53%; /* Blau */ --muted: 210 40% 96%; /* Grau */ }

Domain-Mappings

Für häufig verwendete Status-Typen stellt BuchhaltGenie vordefinierte Mappings bereit, die Domain-spezifische Status automatisch auf die semantischen Kategorien abbilden.

Rechnungs-Status (Invoice)

API-StatusKategorieFarbeBeschreibung
draftneutralGrauEntwurf, noch nicht finalisiert
sentinfoBlauRechnung versendet
paidsuccessGrünRechnung bezahlt
overdueerrorRotZahlung überfällig
cancelledneutralGrauRechnung storniert

Angebots-Status (Quote)

API-StatusKategorieFarbeBeschreibung
draftneutralGrauEntwurf, noch nicht versendet
sentinfoBlauVersendet, wartet auf Antwort
acceptedsuccessGrünAngebot angenommen
rejectederrorRotAngebot abgelehnt
expiredwarningOrangeAngebot abgelaufen
convertedinfoBlauIn Rechnung konvertiert

Team-Einladungen (Invitation)

API-StatusKategorieFarbeBeschreibung
pendingwarningOrangeWartet auf Antwort
acceptedsuccessGrünEinladung angenommen
declinederrorRotEinladung abgelehnt
expiredneutralGrauEinladung abgelaufen
revokedneutralGrauEinladung widerrufen

System-Alerts (Severity)

API-StatusKategorieFarbeBeschreibung
criticalerrorRotSofortige Aktion erforderlich
warningwarningOrangeAufmerksamkeit erforderlich
infoinfoBlauInformative Meldung

CRUD-Aktionen (Activity Log)

API-StatusKategorieFarbeBeschreibung
CREATEsuccessGrünNeue Ressource erstellt
READinfoBlauRessource gelesen
UPDATEwarningOrangeRessource aktualisiert
DELETEerrorRotRessource gelöscht
FAILEDerrorRotAktion fehlgeschlagen

System-Health

API-StatusKategorieFarbeBeschreibung
healthysuccessGrünSystem läuft normal
degradedwarningOrangeEingeschränkte Verfügbarkeit
criticalerrorRotKritischer Systemzustand

CSS-Klassen-Referenz

Für Partner, die eigene UI-Komponenten entwickeln, stellt BuchhaltGenie folgende CSS-Klassen bereit:

Text-Farben

KategorieCSS-KlasseVerwendung
successtext-successErfolgs-Text
warningtext-warningWarnungs-Text
errortext-destructiveFehler-Text
infotext-primaryInfo-Text
neutraltext-muted-foregroundNeutraler Text

Hintergrund-Farben

KategorieCSS-Klasse (10% Opacity)CSS-Klasse (Solid)
successbg-success/10bg-success
warningbg-warning/10bg-warning
errorbg-destructive/10bg-destructive
infobg-primary/10bg-primary
neutralbg-mutedbg-secondary

Border-Farben

KategorieCSS-Klasse (30% Opacity)
successborder-success/30
warningborder-warning/30
errorborder-destructive/30
infoborder-primary/30
neutralborder-border

Code-Beispiele

Status-Badge (TypeScript/React)

import type { StatusCategory } from '@/lib/design-system/status-color-config'; // Mapping von API-Status zu semantischer Kategorie const INVOICE_STATUS_TO_CATEGORY: Record<string, StatusCategory> = { draft: 'neutral', sent: 'info', paid: 'success', overdue: 'error', cancelled: 'neutral', }; // Badge-Varianten basierend auf Kategorie const STATUS_TO_BADGE_VARIANT: Record<StatusCategory, string> = { success: 'success', warning: 'warning', error: 'destructive', info: 'default', neutral: 'secondary', }; function InvoiceStatusBadge({ status }: { status: string }) { const category = INVOICE_STATUS_TO_CATEGORY[status] || 'neutral'; const variant = STATUS_TO_BADGE_VARIANT[category]; return ( <Badge variant={variant}> {status === 'paid' ? 'Bezahlt' : status} </Badge> ); }

Status-Indikator mit CSS-Klassen

// Status-Klassen für eigene Komponenten const STATUS_CLASSES = { success: { text: 'text-success', bg: 'bg-success/10', bgSolid: 'bg-success', border: 'border-success/30', }, warning: { text: 'text-warning', bg: 'bg-warning/10', bgSolid: 'bg-warning', border: 'border-warning/30', }, error: { text: 'text-destructive', bg: 'bg-destructive/10', bgSolid: 'bg-destructive', border: 'border-destructive/30', }, info: { text: 'text-primary', bg: 'bg-primary/10', bgSolid: 'bg-primary', border: 'border-primary/30', }, neutral: { text: 'text-muted-foreground', bg: 'bg-muted', bgSolid: 'bg-secondary', border: 'border-border', }, }; function HealthIndicator({ status }: { status: 'healthy' | 'degraded' | 'critical' }) { const categoryMap = { healthy: 'success', degraded: 'warning', critical: 'error', }; const category = categoryMap[status]; const classes = STATUS_CLASSES[category]; return ( <div className={`flex items-center gap-2 ${classes.text}`}> <span className={`h-2 w-2 rounded-full ${classes.bgSolid}`} /> <span>{status === 'healthy' ? 'Gesund' : status}</span> </div> ); }

Status-Card mit Border und Background

function StatusCard({ category, title, description }: { category: StatusCategory; title: string; description: string; }) { const classes = STATUS_CLASSES[category]; return ( <div className={`rounded-lg border p-4 ${classes.bg} ${classes.border}`}> <h3 className={`font-semibold ${classes.text}`}>{title}</h3> <p className="text-muted-foreground">{description}</p> </div> ); }

WCAG 2.1 AA Konformität

⚠️

Wichtig: Die Verwendung von hardcodierten Farben (wie text-green-500) anstelle der semantischen Token kann zu Kontrast-Problemen im Dark Mode führen.

Kontrast-Anforderungen

Element-TypMinimum KontrastWCAG Kriterium
Normaler Text4.5:11.4.3 (AA)
Großer Text (>18px)3:11.4.3 (AA)
UI-Komponenten3:11.4.11 (AA)
Icons (informativ)3:11.4.11 (AA)

Warum semantische Token?

Die semantischen Farb-Token (--success, --warning, etc.) sind so kalibriert, dass sie:

  1. Light Mode: Ausreichend Kontrast auf hellem Hintergrund bieten
  2. Dark Mode: Automatisch angepasste Werte für dunklen Hintergrund verwenden
  3. System-Präferenz: Auf prefers-color-scheme reagieren

Anti-Pattern: Hardcodierte Farben

// ❌ FALSCH: Hardcodierte Farben (bricht im Dark Mode) <span className="text-green-600 dark:text-green-400">Erfolgreich</span> // ✅ RICHTIG: Semantische Token (funktioniert in beiden Modi) <span className="text-success">Erfolgreich</span>

Automatische Dark Mode Unterstützung

/* Die semantischen Token passen sich automatisch an */ .status-badge { color: hsl(var(--success)); /* Passt sich automatisch an */ background: hsl(var(--success) / 0.1); /* 10% Opacity */ border-color: hsl(var(--success) / 0.3); /* 30% Opacity */ }

Best Practices für Partner

1. Verwende semantische Kategorien

Anstatt Farben direkt zu definieren, mappe Ihre Status auf die 5 Kategorien:

// Dein eigener Status-Typ type MyStatus = 'active' | 'pending' | 'failed'; // Mapping zu BuchhaltGenie Kategorien const statusToCategory: Record<MyStatus, StatusCategory> = { active: 'success', pending: 'warning', failed: 'error', };

2. Teste beide Farbmodi

Stelle sicher, dass Ihre Integration sowohl im Light als auch im Dark Mode korrekt dargestellt wird.

3. Verwende die CSS-Variablen

Für eigene Styling-Anpassungen nutze die CSS-Variablen:

.my-custom-badge { color: hsl(var(--success)); background-color: hsl(var(--success) / 0.1); }

4. Prüfe den Kontrast

Verwende Tools wie den WebAIM Contrast Checker  um sicherzustellen, dass Ihre Farben WCAG 2.1 AA erfüllen.


API-Referenz

StatusCategory Type

type StatusCategory = 'success' | 'warning' | 'error' | 'info' | 'neutral';

Verfügbare Mappings

Export-NameDomainAPI-Dokumentation
INVOICE_STATUS_TO_CATEGORYRechnungenRechnungen API
QUOTE_STATUS_TO_CATEGORYAngebote
INVITATION_STATUS_TO_CATEGORYTeam-Einladungen
ALERT_SEVERITY_TO_CATEGORYSystem-AlertsWebhooks API
ACTION_TYPE_TO_CATEGORYActivity Logs
HEALTH_STATUS_TO_CATEGORYSystem-Health

Weitere Ressourcen