Files
property-match/src/mock-data/crmLeads.ts
T
Benjamin Sutter 9ed21e33a7 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>
2026-08-06 12:44:22 +02:00

90 lines
2.9 KiB
TypeScript

import type { CrmLead } from '../domain/crmLead'
import { CrmLeadStage } from '../domain/crmLead'
import { AssetType } from '../domain/enums'
/**
* Seed-Daten des CRM-Kanals (Runde 5, §12).
*
* Bewusst wenige, dafür vollständige Datensätze: ein CRM-Lead ohne
* Ansprechpartner und ohne letzten Kontakt wäre keiner. Orte und Flächen
* liegen im Raum Basel und Nordwestschweiz, passend zum übrigen Bestand.
*/
export const crmLeads: CrmLead[] = [
{
id: 'crm-001',
companyName: 'Rheinblick Treuhand AG',
contactPerson: 'Andrea Vogt',
contactEmail: 'a.vogt@rheinblick-treuhand.ch',
contactPhone: '+41 61 271 44 18',
locationHint: 'Basel, Innenstadt',
assetType: AssetType.OFFICE,
areaSqmMin: 280,
areaSqmMax: 420,
stage: CrmLeadStage.NEGOTIATION,
ownerName: 'Thomas Müller',
crmSystem: 'Salesforce',
lastContactAt: '2026-08-04T09:15:00.000Z',
note: 'Mietvertrag am jetzigen Standort läuft Ende März 2027 aus. Zwei Objekte besichtigt, Zollstrasse favorisiert.',
},
{
id: 'crm-002',
companyName: 'Nordwest Dental Gruppe',
contactPerson: 'Dr. Marc Bühler',
contactEmail: 'buehler@nw-dental.ch',
locationHint: 'Basel, Kleinbasel',
assetType: AssetType.RETAIL,
areaSqmMin: 180,
areaSqmMax: 260,
stage: CrmLeadStage.VIEWING,
ownerName: 'Sandra Keller',
crmSystem: 'Salesforce',
lastContactAt: '2026-08-01T14:40:00.000Z',
note: 'Sucht Erdgeschossfläche mit Schaufenster für zweite Praxis. Besichtigung für KW 33 angefragt.',
},
{
id: 'crm-003',
companyName: 'Altmann Logistik AG',
contactPerson: 'Peter Altmann',
contactPhone: '+41 61 811 09 62',
locationHint: 'Pratteln',
assetType: AssetType.LOGISTICS,
areaSqmMin: 1800,
areaSqmMax: 3200,
stage: CrmLeadStage.QUALIFIED,
ownerName: 'Thomas Müller',
crmSystem: 'HubSpot',
lastContactAt: '2026-07-28T07:55:00.000Z',
note: 'Expansion aus Muttenz. Rampe und 24h-Zufahrt zwingend.',
},
{
id: 'crm-004',
companyName: 'Studio Helle Räume GmbH',
contactPerson: 'Livia Sommer',
contactEmail: 'kontakt@hellraeume.ch',
locationHint: 'Basel, Gundeldingen',
assetType: AssetType.OFFICE,
areaSqmMin: 90,
areaSqmMax: 160,
stage: CrmLeadStage.NEW,
ownerName: 'Sandra Keller',
crmSystem: 'HubSpot',
lastContactAt: '2026-07-24T16:05:00.000Z',
note: 'Anfrage über Kontaktformular. Budget noch offen.',
},
{
id: 'crm-005',
companyName: 'Birsfelden Manufaktur AG',
contactPerson: 'Jonas Wyss',
contactEmail: 'j.wyss@birsfelden-manufaktur.ch',
contactPhone: '+41 61 313 27 40',
locationHint: 'Birsfelden',
assetType: AssetType.LIGHT_INDUSTRIAL,
areaSqmMin: 640,
areaSqmMax: 900,
stage: CrmLeadStage.QUALIFIED,
ownerName: 'Thomas Müller',
crmSystem: 'Salesforce',
lastContactAt: '2026-07-19T11:20:00.000Z',
},
]