feat(runde-5): Startseite mit Agenten-Meetingraum, sticky Chat und Noras Kanäle
Hauptnavigation und Startseite (§2) - Hauptseite «Übersicht» samt Route, Menüeintrag, Hook, Service und den nur dort verwendeten Widgets entfernt; /supply/dashboard leitet auf die Startseite um, damit Lesezeichen nicht ins Leere laufen. - «Meine Objekte» heisst im Menü «Startseite»; die frühere Überschrift «Objektverwaltung» heisst jetzt «Meine Objekte». - Die Startseite scrollt als Ganzes. Die Höhe des Meetingraums rechnet gegen die Viewport-Höhe, damit Titel und Balken «Filter & Übersicht» beim Einstieg auf jeder Monitorgrösse sichtbar bleiben (geprüft 1280–1920 px). Agenten-Meetingraum (§3) - Zentralperspektive aus clip-path-Flächen, ohne 3D-Engine und ohne Animationsbibliothek: rechts geschlossene Wand, links und gegenüber boden- bis deckenhohe Glasfronten mit Blick auf Rhein, Basler Münster, Altstadt und Wettsteinbrücke. - Sitzordnung, Zielrouten, Grössen und Plakettenversatz liegen in einer zentralen Konfiguration (meetingRoomSeats.ts). - Neuer Agent Giorgio, Personalverwalter, sitzt vis-à-vis und führt in «Meine Agenten». Er steht bewusst nicht in AGENT_WORKSPACES: er hat keine Arbeitsseite, sondern ist die Adminfläche selbst. - Auf schmalen Schirmen tritt eine vereinfachte Kachelanordnung an die Stelle der Perspektive; ausgeblendet wird kein Agent. Sticky Chat bei allen Agenten (§5, §9–§11) - Scrollt der Chatkopf unter den globalen Balken, übernimmt dort eine kompakte Fassung mit Porträt, Name, Frage und Eingabefeld. - Ein gemeinsamer Zustand (agentChatStore) statt zweier Chat-Instanzen: Eingabetext und Fokus überstehen den Wechsel in beide Richtungen. - Noras Seite scrollte bisher gar nicht — Chatkopf ausserhalb des Scrollbereichs, zwei getrennt scrollende Spalten darunter. Behoben über den Seitenaufbau, nicht über eine Nora-Sonderlösung. Nora: CRM-Kanal und gemeinsame Lead-Liste (§12, §13) - Dritter Kanal «CRM» mit eigenem Domänentyp, Mockdaten, Provider, Service und Hook nach dem bestehenden Schichtenmuster. - Die Reiter «KI-Signale»/«Netzwerk» sind einer gemeinsamen Liste gewichen. Jede Zeile trägt ihre Kanalherkunft als Badge; die Herkunft steht im Datenmodell (LeadChannel) und wird nicht aus der Darstellung geraten. - Der frühere Reiterbalken ist der Filter «Kanaltyp» mit Alle/KI Signal/ Netzwerk/CRM, Standard «Alle», mit Empty State und Rücksetzung. Produkttour und Profilmenü (§8) - Tour auf die neue Struktur umgeschrieben: Startseite, Meetingraum, Agenten, sticky Chat, Leadkanäle. «Übersicht» kommt nicht mehr vor, «Meine Objekte» bezeichnet nur noch den Objektbereich. - Bereich «Demo-Modus» mit «Verwaltung» und «Bürosuche» entfernt. Geprüft: 413 Tests, Typecheck, Build, ESLint, Token-Schwelle (889/925). Im Browser: Navigation, Agentenklicks aller sechs Plätze, Kanalfilter und Detailschubladen, Sticky Chat bei vier Agenten, 1280–1920 px sowie Tablet- und Mobilbreite, keine 404 für Bilder oder Routen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
d200d4e930
commit
9ed21e33a7
59 files changed
+2545
-1309
No files matched your search
@@ -291,3 +291,93 @@ export const RESULT_TYPE_META: Record<string, { label: string; color: string; bg
|
||||
MAISON_WORK: { label: 'Maison Work', color: '#2d5a8a', bg: 'rgba(45,90,138,0.10)' },
|
||||
FUTURE_AVAILABILITY: { label: 'Zukunftssignal', color: '#5b3f8a', bg: 'rgba(91,63,138,0.10)' },
|
||||
}
|
||||
|
||||
// ── Agenten-Meetingraum auf der Startseite (Runde 5, §3) ─────────────────────
|
||||
|
||||
/**
|
||||
* Farbwelt der Meetingraum-Szene.
|
||||
*
|
||||
* Die Szene ist eine reine 2D-/CSS-Komposition ohne 3D-Bibliothek — sie besteht
|
||||
* deshalb aus ungewöhnlich vielen Einzelflächen: Decke, Wände, Boden, Tischplatte,
|
||||
* Fensterrahmen sowie die Basler Aussicht mit Rhein, Altstadt und Münster.
|
||||
*
|
||||
* Sie stehen hier statt in der Komponente, weil eine Szene mit vierzig
|
||||
* Farbstufen in der Komponente nichts anderes wäre als vierzig fest verdrahtete
|
||||
* Hexwerte (CLAUDE.md §8). Bewusst eigene Gruppe: es sind Szenenfarben, keine
|
||||
* semantischen Zustandsfarben — ein Dachziegelrot darf nie versehentlich als
|
||||
* Fehlerfarbe verwendet werden.
|
||||
*/
|
||||
export const DS_MEETING_ROOM = {
|
||||
/** Innenraum: Decke, Wände, Boden, Sockelleisten. */
|
||||
room: {
|
||||
ceiling: '#f4f2ee',
|
||||
ceilingShadow: '#e6e3dd',
|
||||
wall: '#eae6df',
|
||||
wallShade: '#ddd8cf',
|
||||
wallAccent: '#d9d3c8',
|
||||
floorNear: '#b9a893',
|
||||
floorFar: '#d8ccbb',
|
||||
skirting: '#cfc7ba',
|
||||
mullion: '#5d6773',
|
||||
frame: '#7b848f',
|
||||
glassTint: 'rgba(214,232,240,0.18)',
|
||||
glassGlare: 'rgba(255,255,255,0.30)',
|
||||
},
|
||||
/** Besprechungstisch samt Stühlen. */
|
||||
table: {
|
||||
topNear: '#6b5a48',
|
||||
topFar: '#8a7359',
|
||||
edge: '#4e4133',
|
||||
inlay: '#f6f3ee',
|
||||
chair: '#3b4450',
|
||||
chairRim: '#2c333d',
|
||||
shadow: 'rgba(45,35,25,0.28)',
|
||||
},
|
||||
/** Basler Aussicht: Himmel, Rhein, Altstadt, Münster, Wettsteinbrücke. */
|
||||
view: {
|
||||
skyTop: '#a8ccdf',
|
||||
skyHorizon: '#e2ecef',
|
||||
hills: '#b3c2c0',
|
||||
riverTop: '#7fa6ac',
|
||||
riverBottom: '#4d7d86',
|
||||
riverGlint: 'rgba(255,255,255,0.45)',
|
||||
quay: '#c8bda9',
|
||||
treeDark: '#4e6b4a',
|
||||
treeLight: '#6b8a5c',
|
||||
facadeLight: '#efe8dc',
|
||||
facadeMid: '#ded3c2',
|
||||
facadeDark: '#c9bda9',
|
||||
roof: '#a2543f',
|
||||
roofDark: '#8a4433',
|
||||
minsterWall: '#b8654a',
|
||||
minsterRoof: '#5f7f6d',
|
||||
spire: '#8f4a38',
|
||||
bridge: '#b9b2a6',
|
||||
bridgeDark: '#9a9287',
|
||||
window: '#8fa3ad',
|
||||
},
|
||||
/** Agentenplakette über dem Kopf. */
|
||||
label: {
|
||||
bg: 'rgba(255,255,255,0.94)',
|
||||
border: 'rgba(21,38,66,0.14)',
|
||||
ring: 'rgba(255,255,255,0.85)',
|
||||
focus: '#b8975a',
|
||||
},
|
||||
} as const
|
||||
|
||||
// ── Kanalherkunft der Leads bei Nora (Runde 5, §12) ──────────────────────────
|
||||
|
||||
/**
|
||||
* Badge je Kanal. Nach dem Muster von `RESULT_TYPE_META`: Beschriftung und
|
||||
* Farben stehen zusammen, damit derselbe Kanal in Liste, Filter und Detail nie
|
||||
* unterschiedlich aussieht.
|
||||
*
|
||||
* Der Schlüssel ist `LeadChannel` aus `domain/unifiedLead.ts`; hier steht er
|
||||
* bewusst als `string`, damit die Designschicht nicht auf das Domänenmodell
|
||||
* zeigt — die Abhängigkeit läuft immer nur in die andere Richtung.
|
||||
*/
|
||||
export const LEAD_CHANNEL_META: Record<string, { label: string; color: string; bg: string }> = {
|
||||
KI_SIGNAL: { label: 'KI Signal', color: '#5b3f8a', bg: 'rgba(91,63,138,0.10)' },
|
||||
NETZWERK: { label: 'Netzwerk', color: '#1a7a4a', bg: 'rgba(26,122,74,0.10)' },
|
||||
CRM: { label: 'CRM', color: '#2d5a8a', bg: 'rgba(45,90,138,0.10)' },
|
||||
}
|
||||
Reference in new issue
Block a user