@switch (activePanel()) {
@case ('profiling') {
@if (selectedField(); as field) {
{{ field.field }}
{{ field.coverage }}% of contacts
When we ask
{{ field.askWhen }}
What it is for
{{ field.usedFor }}
Handling
{{ sensitiveFields().length }} field(s) are sensitive and are never
asked for conversationally.
} @else {
Select a field.
}
}
@case ('lookalikes') {
@if (selectedLookalike(); as audience) {
{{ audience.name }}
{{ audience.seed }}
Model
0
? audience.matchedSize.toLocaleString()
: 'none'
"
/>
What drove the match
@if (audience.drivers.length > 0) {
@for (driver of audience.drivers; track driver) {
- {{ driver }}
}
Drivers are shown so an audience can be argued with. One nobody
can inspect gets used once and never again.
} @else {
No model yet.
}
@if (audience.note) {
{{ audience.note }}
}
} @else {
Select an audience.
}
}
@case ('streaming') {
@if (selectedStream(); as stream) {
{{ stream.event }}
Schema {{ stream.schemaVersion }}
Stream
@for (consumer of stream.consumers; track consumer) {
}
Sync health
Consent is the one field where neither side wins by recency:
whichever record says no is the one that stands.
} @else {
Select a stream.
}
}
@case ('next-best-action') {
@if (selectedAction(); as action) {
{{ action.contact }}
{{ action.action }}
Why
{{ action.reason }}
0 ? '$' + action.value : 'retention, not revenue'"
/>
@if (action.blockedBy) {
Blocked
{{ action.blockedBy }}
}
Queue
Blocked recommendations are excluded from that total. Counting them
would be forecasting revenue nobody is allowed to pursue.
} @else {
Select a recommendation.
}
}
@case ('journey') {
@if (selectedEvent(); as event) {
{{ journeyKindLabels[event.kind] }}
{{ event.at }} · {{ event.channel }}
What happened
{{ event.summary }}
Full conversation history
} @else {
Select an event.
}
}
}