◀ Scroll horizontally to see the full flow ▶
01
Submission Pipeline
The data backbone. Sets up agencies, agents, products, submissions.
02
The Workbench
Kanban board + submission detail. Where PUs live every day.
03
DAIS Quoting
Request quotes, compare them, send the best to agents.
04
QW Bridge
Agent's response flows back, board updates itself.
Top Lane
PU Perspective
What the production underwriter sees, clicks, and does
No PU activity — admin sets up
agencies, agents, and products
before PUs can do their work
Step 1
Log In
PU signs in via Google OAuth, lands on Kanban board
Action
Step 2
See All Deals
6-column board: New → In Progress → Tech Review → Quoted → Won → Declined. Board refreshes every 30s.
View
Step 3
Claim or Assign
PU clicks "Assign to Me" on unassigned card, or admin assigns to them
Action
Step 4
Open Submission
Client info, questions answered by agent, notes, activity log, version history
View
Step 5
Drag Card Forward
Drag to "In Progress" — optimistic update, rolls back on failure. Only assigned PU can drag.
Action
Step 1
Click "Request Quotes"
From submission detail header. Opens 3-step quote request flow.
Action
Step 2
Pick Products
Select which of the submission's products to quote (defaults to all)
Action
Step 3
Answer UW Questions
Supplemental DAIS questions the agent didn't see. Skipped if none required.
Action
Step 4
Get Quotes
Click "Get Quotes". Watch per-product loading state — quotes appear as they arrive.
Action
Step 5
Compare Side-by-Side
View premium, expiry, intake diff. Declined quotes shown too. Archive rejects.
Action
Step 6
Send to Agent
Select winning quotes, click "Send to Agent". Card moves to Quoted, email goes out.
Action
Step 1
Wait
PU continues with other work. Agent handles quote review in Quote Wizard.
Passive
Step 2
See Update
Board auto-updates — card moves to Won (accepted) or stays at Quoted (rejected) with flag
View
Step 3
Email Notification
"Quote accepted" or "Agent rejected — review required" email lands in PU's inbox
Notify
Bottom Lane
Submission Perspective
What happens to the data behind the scenes
Entities created
agencies
slug, name, logo, color, allowed_products
agents
email, agency_id, password_hash
Product setup
product_lines
name, dais_line_id, active
dais_question_cache
product_line_id, version, questions JSONB
Central entity
submissions
status, assigned_pu_id, agent_id, agency_id, client info, products, answers
app_settings
slack_webhook, flags
Status flow
New
In Progress
Tech Review
Quoted
Activity logged
Every status change, assignment, and note append-only logged
Event
Assignment
assigned_pu_id set
Self-assign: PU claims own. Reassign: Admin only.
Event
Email fired
Assignment notification to PU
System
Child records
submission_notes
body, author, created_at
submission_activity_log
event_type, description, actor
submission_versions
version_number, data snapshot
Board query
GET /submissions
Returns all non-draft submissions grouped by status. Polled every 30s.
System
DAIS client
PUT /ioi/v3/client
Create or verify client. Store dais_client_id on submission.
DAIS Call
Fire GET_QUOTES
POST /event/fire
One call per product line. Returns triggerRequestId.
DAIS Call
quote_requests
submission_id, product_line_id, trigger_id, status=pending
Poll for quotes
GET /quotes/trigger/:id
Every 5s, max 60 attempts (5 min timeout). Stop when all products resolved.
System
Automated
Quotes appear in UI as they arrive — no wait-for-all
Store quotes
quotes
dais_quote_id, premium, status (QUOTE or DECLINED), expires_at, raw_response JSONB
Send to agent
SELECT_QUOTE fired
Per quote. Sets selected_for_agent=true, selected_at, selected_by.
DAIS Call
In Progress
Quoted
Email to agent
"Your quotes are ready" with Quote Wizard link
System
Inbound webhook
POST /webhooks/quote-wizard
Auth: X-Bluefields-Secret header. Payload includes submission_id, quote_id, event type.
Webhook
Route by event
quote.accepted
accepted_at, accepted_by_agent=true on quote record
Event
quote.rejected
rejected_at, rejected_by_agent=true on quote record
Event
Side effects
Quoted
Won
Emails + activity log
Agent: "policy bound". PU: "quote accepted" or "rejected — review".
Auto