feat(agenten): Runde 4 — «Meine Agenten» mit fünf digitalen Mitarbeitenden
Setzt das Umsetzungsbriefing Runde 4 im bestehenden Frontend um. Informationsarchitektur - «Teamübersicht» heisst «Meine Agenten»; ihr bisheriger Inhalt (Kreisgrafik, Auswertung, Verbindungszusammenfassung) ist entfallen. - Personalverwaltung, Bearbeitungsverlauf und Kanäle & Systeme sind jetzt Reiter derselben Seite (?section=), gestaltet wie die Auswahl im Bearbeitungsverlauf. Es wird nur der gewählte Bereich gerendert. - Die alten Unterseitenpfade leiten um, damit Lesezeichen nicht brechen. Agentenbestand - Reto und Lea vollständig entfernt — aus Navigation, Dossiers, Protokoll, Verbindungen, Vorgängen und Porträtbestand. - Retos Aufgaben liegen bei Bruno: Nachbereitung, WhatsApp-Anruf, Protokoll und Kundennotiz, Ablage im CRM. - Livia ist «Exposé Master»: Lageberichte, Inserate, Angebotsbroschüren. - Sidebar führt Ferdi, Bruno, Livia, Nora, Sina mit Porträt und Funktion. Agentenseiten - Ein gemeinsamer AgentWorkspaceHero auf allen fünf Seiten. - Ferdi: Auswertungskarten, Priorität und Typfarben entfallen; Fälligkeit nur bei fünf Tagen oder weniger rot; Objektlinks nach «Meine Objekte»; neu die Terminplanung im verbundenen Kalender mit typgerechtem PDF-Ausschnitt. - Sina: reduzierte, filter- und sortierbare Objektübersicht; Detailansicht direkt editierbar, leere Pflichtfelder rot umrandet. - Nora: Signale ohne Prozentsätze und Konfidenzstufen, nur belegbare Angaben; Mehrfachauswahl leitet Objekte an Livia weiter. - Livia: aktive und archivierte Leads, Arbeitsbereich gleitet an den oberen Rand; dreistufiger Exposé-Prozess Hochladen → Exposé → Export. - Bruno: neue Seite mit Auftragsliste und Vor-/Nachbereitungs-Drawer; Glocke warnt bei Besichtigung unter 24 Stunden ohne Bericht. Datenschicht - Neu: Kalender, Exposé-Leads, Exposé-Entwürfe, Besichtigungsaufträge — je Domain, Provider, Service und Hook. - IAIService um generateExposeText erweitert; der Entwurf nutzt ausschliesslich erfasste Objektdaten und meldet Lücken, statt sie zu füllen. - Alle Objektverweise zeigen auf reale Einträge aus «Meine Objekte»; neue Detailroute /supply/properties/:propertyId. Offen: Chat, Kalender, CRM und DMS sind Frontend-Simulation ohne Anbindung. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
cc5582b7fd
commit
d200d4e930
352 files changed
+8069
-8512
No files matched your search
@@ -119,6 +119,105 @@ export const DS_SURFACE = {
|
||||
slate: { bg: '#f4f3f0', border: '#e8e7e4' },
|
||||
} as const
|
||||
|
||||
// ── Neutrale Skala ────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Die kühle Graustufe, auf der Tabellen, Trennlinien und Nebentexte liegen.
|
||||
*
|
||||
* Sie war über rund 200 Dateien als Hex-Literal verstreut — dieselben zehn
|
||||
* Werte, immer wieder abgetippt. Die Stufen entsprechen exakt den bisher
|
||||
* verwendeten Werten; die Zusammenführung ändert kein einziges Pixel, macht
|
||||
* aber einen späteren Themenwechsel überhaupt erst möglich.
|
||||
*
|
||||
* Abgrenzung zu `DS_BG`/`DS_BORDER`: jene tragen den warmen Grundton der
|
||||
* Anwendung (Papier), diese Skala den kühlen für Datenflächen.
|
||||
*/
|
||||
export const DS_SLATE = {
|
||||
50: '#f8fafc',
|
||||
100: '#f1f5f9',
|
||||
200: '#e2e8f0',
|
||||
300: '#cbd5e1',
|
||||
400: '#94a3b8',
|
||||
500: '#64748b',
|
||||
600: '#475569',
|
||||
700: '#334155',
|
||||
800: '#1e293b',
|
||||
900: '#0f172a',
|
||||
} as const
|
||||
|
||||
/** Weitere neutrale Einzelwerte ohne Platz in der Skala. */
|
||||
export const DS_NEUTRAL = {
|
||||
white: '#ffffff',
|
||||
offWhite: '#fafafa',
|
||||
paper: '#fbfaf8',
|
||||
paperTint: '#f0f4f8',
|
||||
stone: '#b0aead',
|
||||
graphite: '#374151',
|
||||
sidebar: '#0f1923',
|
||||
gold: '#b8975a',
|
||||
} as const
|
||||
|
||||
// ── Markenfarben ──────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Das dunkle Blau der Anwendung samt seinen Hover-Stufen.
|
||||
*
|
||||
* `hover` und `hoverAlt` unterscheiden sich um zwei Prozent Helligkeit — sie
|
||||
* sind historisch gewachsen und stehen beide im Code. Sie bleiben getrennt,
|
||||
* damit die Zusammenführung nichts sichtbar verschiebt; wer sie vereinheitlichen
|
||||
* will, tut das ab jetzt an einer Stelle statt an vierzig.
|
||||
*/
|
||||
export const DS_BRAND = {
|
||||
main: '#152642',
|
||||
hover: '#16304d',
|
||||
hoverAlt: '#162d4a',
|
||||
dark: '#0e1c30',
|
||||
darker: '#1a3050',
|
||||
muted: '#5a87a3',
|
||||
light: '#64b5f6',
|
||||
} as const
|
||||
|
||||
// ── Akzentfarben nach Bedeutung ───────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Semantische Akzente. Jede Gruppe führt Vorder-, Flächen- und Randfarbe
|
||||
* derselben Bedeutung, damit ein Zustand nicht auf zwei Bildschirmen zwei
|
||||
* verschiedene Grüntöne bekommt.
|
||||
*/
|
||||
export const DS_ACCENT = {
|
||||
success: {
|
||||
main: '#1a7a4a', strong: '#15803d', bright: '#16a34a', emerald: '#10b981',
|
||||
dark: '#155f3a', darkAlt: '#15643c',
|
||||
bg: '#f0fdf4', bgAlt: '#dcfce7', border: '#86efac',
|
||||
},
|
||||
warning: {
|
||||
main: '#d97706', strong: '#ea580c', amber: '#f59e0b', burnt: '#c2410c',
|
||||
dark: '#b45309', darker: '#854d0e', darkest: '#7a4f00', brown: '#7c3d12',
|
||||
bg: '#fffbeb', bgAlt: '#fff7ed', border: '#fcd34d', borderSoft: '#fef3c7',
|
||||
},
|
||||
danger: {
|
||||
main: '#c0392b', strong: '#dc2626', bright: '#ef4444', dark: '#a93226', darkest: '#7f1d1d',
|
||||
bg: '#fef2f2', bgAlt: '#fff1f2', border: '#fca5a5',
|
||||
},
|
||||
violet: {
|
||||
main: '#7c3aed', strong: '#6d28d9', light: '#8b5cf6',
|
||||
dark: '#5b21b6', darkest: '#4c1d95',
|
||||
bg: '#faf5ff', bgAlt: '#f5f3ff', border: '#c4b5fd', borderSoft: '#ddd6fe', tint: '#ede9fe',
|
||||
},
|
||||
indigo: {
|
||||
main: '#4f46e5', strong: '#4338ca', dark: '#3730a3', light: '#6366f1',
|
||||
bg: '#eef2ff', border: '#e0e7ff',
|
||||
},
|
||||
blue: {
|
||||
main: '#1d4ed8', strong: '#2563eb', dark: '#1e40af', darkest: '#1e3a8a',
|
||||
bg: '#eff6ff', bgAlt: '#f0f9ff', border: '#bfdbfe', borderSoft: '#dbeafe',
|
||||
},
|
||||
cyan: {
|
||||
main: '#0891b2', deep: '#0369a1', dark: '#075985',
|
||||
bg: '#e0f2fe', border: '#bae6fd',
|
||||
},
|
||||
} as const
|
||||
|
||||
// ── Match tier surface ────────────────────────────────────────────────────────
|
||||
|
||||
export const DS_MATCH_TIER = {
|
||||
|
||||
Reference in new issue
Block a user