Operator Console · v0.1 alpha · Design-partner pilots

The communications layer
your BDC actually works in.

AI-mediated inbound and outbound across email, SMS, voice, and your embedded website chat — grounded in your real inventory and offers, built for operators who run the queue eight hours a day.

Channels of interest · optional
[email protected] · we read every reply

By submitting you agree to our Privacy and Terms.

Channels
4
email · sms · voice · web
LLM safety guardrails
6
enforced per channel
Tenant isolation
strict
per-owner_id keying
Status
alpha
design-partner pilots
Watch the queue

Twelve seconds. Empty queue to closed deal.

A real loop of what an operator sees over the course of one lead. Every element here is the same primitive used in the production console.

PLENFI·YOUR DEALERSHIP
Today's queue
00

The queue is clear. No callbacks waiting.

On-call
0
Idle reps
3
Avg wait
New hot lead · 30s ago
01lead waiting
Marcus Chen
wanted: 2024 RAV4 · score 94
HOT
On-call · Sarah · 02:14
Marcus Chen · about the 2024 RAV4 he asked about Tuesday.
inbound voice
Disposition
Test-drive booking
Inventory match
2024 RAV4 · in stock
Closed by Sarah · just now
SOLD

Marcus Chen · 2024 RAV4 XLE · test drive booked Tuesday 10:00.

Sold WTD
13
Show rate
69%
Avg wait
11m

live · loops every 12s · respects prefers-reduced-motion

Today · what an operator sees

One screen. The queue, the metrics, the calls.

PLENFI·YOUR DEALERSHIP
Operator · Today

Today's queue

Hot leads waiting
03leads

Awaiting callback. Two flagged before noon.

static preview · sign in to use →
Appts MTD
203
+8 vs last mo
Show rate
67%
−3 pts
Sold WTD
12
+2
Avg wait
14m
Lead
Status
Wait
Score
Marcus Chen
HOT
42m
94
Linda Park
HOT
31m
88
R. Velazquez
WAITING
12m
71
K. O'Brien
SCHEDULED
63
What it does

Five surfaces, one console.

Deep dive
01

Inbound email pipeline

SendGrid Inbound Parse → multi-stage AI safety chain → reply. Idempotent against retries. Inventory-grounded responses pulled from your real stock.

trigger/SendResponse.ts · per-channel system prompts
02

Outbound campaigns with AI targeting

Describe the audience in English ("everyone who asked about a RAV4 in 30 days and never replied") — the assistant translates to a typed Supabase query. Operator confirms before any send. A/B variants built in.

/api/campaigns-ai · trigger/sendCampaign{Emails,Sms}
03

Embedded chat widget

One <script> tag on your site. Shadow-DOM widget renders inline (not iframe) so host-page CSP can't block it. Per-widget Origin allow-list gates abuse.

/widget.js · /api/widget/chat · widget_sessions buffer
04

Lead pipeline

One lead row per customer, captured from any channel. Keyed by email-or-phone (never both — shared landlines don't merge customers). Conversation history per channel; scoring + next-followup live on the row.

leads · messages · supabase-actions/leads/getLeadByEmailorPhone
05

Voice (Twilio + personaplex)

Inbound voice via Twilio, STT + intent extraction in-app, voice cloning via a separate FastAPI service. Disclosure prompts wired in.

/api/twilio/process-speech · personaplex-service (Python)
& more

All 5, deeper.

Capabilities, file paths, and the safety machinery behind each surface.

/features · deep dive
The work behind the chrome

What "production-grade" actually looks like.

Security posture
Tenant isolation

Strict per-owner_id keying

Every query scopes by owner_id. The lead-lookup helper keys by one of email or phone — never both — so two customers sharing a phone line do not get merged. Supabase RLS plus explicit filters in the bypass paths.

Inventory grounding

No hallucinated cars

Smart-component blocks render only when the inventory match clears a confidence threshold. If the dealership doesn't stock the matching vehicle, the block is dropped — not filled with a placeholder.

Audit-driven safety

Guardrails tied to evals

Each LLM safety directive in lib/prompts/*.ts cites the eval-baseline failure that motivated it (no APR quotes, no trade-in dollars, brand deflection, only-facts-provided). Audit reports live in the repo.

Who works in it

Built for the four people in a dealership BDC.

BDC manager
Configure AI agents, set up campaigns, review reports, manage user access.
BDC rep
Triage leads, review or approve AI drafts, place outbound calls, schedule appointments.
Dealership owner / GM
Read reports, oversee multi-store performance.
Plenfi platform admin
Onboard new dealerships, manage integrations (Twilio numbers, SendGrid, etc.).
Status · honest version

Functional alpha. Ready for design-partner pilots with a human in the loop.

The AI safety pipeline is rigorous; the multi-tenant boundary is clean; the messaging paths are wired to real services. Reporting is wired but not yet backed by real metrics, an operator inbox is the next major build, and we have not yet scale-tested past a single Vercel instance.

We say all of this in the open because dealerships have been burned by AI tools that promise more than they ship. For the engineering deep dive — including what we don't do yet — read product.md or open the security page.

Who built this

Built by a dealer, for dealers. Operating from Frontier Toyota — the BDC team building Plenfi is the same one running it.

Pilot intake · limited

Run a real BDC week with us.

A pilot is one dealership, one channel turned on, two weeks of operator feedback. We learn what your reps actually need; you get a working inbound + outbound surface backed by a human-reviewed AI safety chain.

Channels of interest · optional
[email protected] · we read every reply

By submitting you agree to our Privacy and Terms.