OMNILINK A-TEAM
Operator Console · One Team, One Mission.
Release One · Attractor
STANDBY
Awaiting operator

Dashboard

41Dials today
Target 60 · 19 to go
9Conversations 22% connect rate · floor avg 19%
2Opt-ins captured
Target 3 · best today on the floor
7Callbacks due Next at 2:15pm -- Ridgeline Foods
Dials by hour9am to 1pm

The noon dip is normal -- owners are on the floor serving lunch. 10am and 3pm connect best for this list.

Your queues
QueueWaitingPermissionBest window
TX DistributorsBeverage & food wholesale 1,204Ask before texting 10a-12p
CA Retail GroceryIndependent stores 860Ask before texting 2p-5p
Existing customersPrior purchase on file 312Safe to text any
Your callbacksPromised times 7mixed scheduled
Floor · right now
OperatorDialsOpt-ins
Maria Ortizyou41 2
Devon Reyes381
Priya Nandi441
Sam Whitcombeon break290
Your last five
1:12pm Vega Wholesale DistributorsOpt-in captured -- Danny Ruiz
1:04pm Northgate ProvisionsNo answer · attempt 3
12:58pm Ridgeline FoodsCallback booked -- Thursday 2:15pm
12:47pm Sunbelt Beverage CoDo not call -- requested by owner
12:39pm Ellis Market SupplyVoicemail left
Next in queue · TX Distributors
Northgate Provisions
Grocery Wholesaler · Fort Worth, TX · 4.0 stars (38 reviews)
+1 817 442 9031
Attempt 4 · last tried Friday 1:04pm, no answer

Nothing else is on this screen on purpose. Forty-eight times a shift this is the whole interaction -- one number, one button. The script appears when there is somebody to read it to.

1,204Not yet workedTX Distributors
7Callbacks yoursNext 2:15pm
14WarmQualified, not yet sent
63Closed outDisqualified or DNC
Callbacks you promised Yours for two hours past the time, then the floor takes them
WhenBusinessAsk forWhy
Today 2:15p Ridgeline Foods+1 512 908 4417 Ana DelgadoWanted pricing on the 24-case
Today 4:00p Kettleman Grocery+1 512 771 2280 Owner (no name)Said call after the lunch rush
Thu 9:30a Marisol Mercado+1 210 664 1902 HectorPartner decides, back Thursday
Thu 11:00a Buck's Beverage Depot+1 469 330 7745 Buck ElleryAsked for a callback with numbers
Pipeline Everything you have touched on this list
BusinessStatusPermissionAttemptsLast touch
Vega Wholesale DistributorsAustin, TX · +1 512 367 8722 WarmSafe to text 21:12pm
Ridgeline FoodsAustin, TX · +1 512 908 4417 CallbackAsk first 112:58pm
Northgate ProvisionsFort Worth, TX · +1 817 442 9031 WorkingAsk first 41:04pm
Sunbelt Beverage CoDallas, TX · +1 214 555 0118 Do not callBlocked 112:47pm
Ellis Market SupplyWaco, TX · +1 254 219 6630 NurtureAsk first 212:39pm
Cassidy Wine & SpiritsHouston, TX · +1 713 884 2201 Sent to salesSafe to text 3Yesterday

Vega Wholesale Distributors

Beverage Distributor · Austin, TX · 4.2 stars (61 reviews)

Safe to textWarm Lead #44712 attempts
Phone
+1 512 367 8722
Ask for
Danny Ruiz -- owner
Website
vegawholesale.com
Source
Google Maps · imported 2026-09-01
Assigned
Maria Ortiz
CRM
queued · CRM Connector
Everything that has happened
Today 1:12p Verbal opt-in captured Danny Ruiz said yes · script v1-2026-09-09 · Maria Ortiz
Today 1:09p Connected · 4m 12s Qualified -- reorders every 2 weeks, open on price
Today 1:09p Note"Buys direct from 3 suppliers. Reorders Tuesdays."
Fri 2:31p No answerAttempt 1 · Maria Ortiz
Sep 1 ImportedNeeded permission before texting
NotesCmd+Enter saves
OMNILINK - Consent Ledger · record #118
Granted
Yes
Who agreed
Danny Ruiz
Method
Verbal, on call
Operator
Maria Ortiz
When
2026-09-09 13:12:04
Script
v1-2026-09-09
Recording
none -- dialer not connected

This record is what gets produced if a carrier or a complainant asks who agreed to be texted. It cannot be edited or deleted, only withdrawn by a new record.

Messages

No messages yet. This number became textable 13:12 today and the first campaign has not run.

Danger zone

Blocks calls and texts everywhere, immediately, and cannot be undone by an operator.

Filters
2,376Leads under managementacross 3 campaigns
1,043Worked
44% of the list touched at least once
313Permission captured 30% of worked · the money metric
1,333Never touched of which 214 are going cold
Monthly trend Worked vs permission captured

Volume dipped in September and permission capture rose -- 132 against 118 on fewer worked leads. That is the script landing, not the floor slowing down, and it is the only pair of numbers on this page worth reading together.

Campaign performance
CampaignLeadsWorkedPermissionRateDays to first touch
TX Distributorsproject GL-2201 1,204612198 32.4%4.1
CA Retail Groceryproject GL-2208 86031872 22.6%9.8
Existing customersproject GL-1988 31211343 38.1%2.2
Channel economics
ChannelAttemptsReachedOutcomesCost each
Voice · human3,180 694241$4.10
Email · COURIER4,182 1,71578 $0.31
Voice · VOX inbound-- 14731$0.44
Text · SCRIBE0 00 blocked

Email is thirteen times cheaper per outcome and voice converts five times better per contact. They are not competing -- email opens doors at scale and a human walks through them.

Going cold
Untouched over 30 days214
Worked once, then dropped168
Callback promised, missed3
Permission captured, never messaged313
Lead status
Never touched1,333
Working428
Callback booked61
Warm -- with sales184
Nurture203
Disqualified145
Do not call22
Best hours to dial

TRIAGE already orders the queue by this. Worth showing anyway -- a supervisor who can see it schedules breaks at noon instead of at ten.

OMNILINK - Report Catalogue Named, saved, scheduled, exportable
ReportAnswersRuns
Conversion funnelWhere in the list leads stop moving on demand
Campaign efficiencyConversion, time to first touch, cost per outcome weekly
Going coldEverything untouched past 30 days, oldest first daily
Consent registerEvery permission record, who obtained it, which script on demand
Operator scorecardOutcomes, QA average, points, bonus accrued monthly
Channel economicsCost per contact and per outcome, by channel weekly
Lead source qualityWhich imports produce outcomes and which produce nothing monthly
Compliance registerDNC requests, opt-outs, holds, and who actioned each daily
Bonus ledgerPoints, earnings, clawbacks, per person per period monthly
Client summaryWhat the client sees, in plain language weekly

Every report is a named query with a saved filter set and three export formats. A report someone can name, save, schedule and hand over is worth ten charts nobody can reproduce.

2,376Your leadsacross 3 projects
417Worked this week18% of the list
313Now textable+11 this week
23Sent to your sales teamqualified and warm
OMNILINK - Client Portal · this week Drafted by LEDGER · a human sends it

Your floor worked 417 leads this week and got 23 of them qualified and handed to your sales team -- up from 16 last week, and the improvement is entirely in the 10am to noon window, which is now where we put your best people.

Eleven more owners gave permission to be texted, bringing you to 313. None of them have been texted yet, because the carrier campaign is still in review -- a queue outside anyone's control and the one thing standing between you and the text channel.

Two things did not go well. Twenty-two numbers on the original list were unreachable line types and were dropped. And four owners asked to be taken off entirely -- we removed them immediately and they will not be contacted again on any channel.

Your projects
ProjectWorkedWarm
TX Distributors24814
CA Retail Grocery1316
Existing customers383

The client sees counts and their own warm leads. They do not see operator names, call recordings, or anything about how the floor is staffed.

8Agents runningof 12 configured
1,847Actions todaydrafts, sends, scores, lookups
63Held by AXIOM3.4% · every one has a reason
412Awaiting approvalagents on propose autonomy

Channel operators

These three do the outreach. Their autonomy is set by law, not by preference.

SC SCRIBEAI Text Operator · SMS & RCS running
You write one text at a time to one business owner who has personally agreed to receive them. Voice: a supplier who knows their business, not a brand. Lowercase is fine. No emoji. No exclamation marks. Never more than two sentences. Always: the business name as they'd say it, one concrete reason to reply, and STOP instructions on the first message of any thread. Never: write to a number without a consent record. Never: imply a relationship that isn't in the history.
Autonomypropose only
Today0 sent · 214 drafted
Blocked oncarrier campaign
CO COURIERAI Email Operator running
You write cold and follow-up email to owners and buyers at independent distributors and stores. Subject lines are lowercase, under six words, and describe the email rather than sell it. Body under 90 words. One ask. No pleasantries at the top. Always: a real physical address in the footer, a working one-click unsubscribe, and an accurate From name. CAN-SPAM is the floor, not the goal. Never: a misleading subject line. Never mail an address that unsubscribed. Never invent a mutual connection.
Autonomyapprove queue
Today318 sent · 41% open
Held by AXIOM11
VX VOXAI Voice Operator outbound held
You answer inbound calls and callbacks. You open by saying you are an automated assistant and you offer a human immediately if asked -- first time, no friction. You take a message, book a callback, confirm details, and hand off. You do not negotiate and you do not quote a price. Never: place an outbound telemarketing call. Never imply you are a person. Never ask permission to text -- a verbal opt-in obtained by a synthetic voice is not evidence anyone should rely on.
Today19 inbound answered
Handed to human7 · avg 22s
SE SENTRYCompliance gate · runs inside AXIOM always on
You are the last thing that runs before anything leaves the building. You do not write and you do not sell. You answer one question: may this go out? Check, in order: a consent record exists and names a person; the number is not on any do-not-call list; local time is inside the calling window; the script version in force matches what was read; the channel is permitted for this contact's permission level. You cannot be turned off, and you have no autonomy setting. If unsure, refuse and say which check failed.
Checked today1,847
Refused63
Autonomynot applicable

Section specialists

One resident agent per screen, each with its own skill prompt. They are what AXIOM answers with on that screen.

AgentLives onSkillAutonomy
PACEthroughput coachDashboard Target math, best-window analysis, who to call next and why advise
WHISPERlive call assistActive call Real-time objection handling and script-adherence nudge advise
DOSSIERlead researcherLead profile Summarises history, enriches, drafts the opening line advise
TRIAGEqueue rankerQueue Orders the queue by likelihood to connect and convert, by hour acts
FOREMANfloor supervisorFloor monitor Coaching moments, staffing gaps, adherence drops advise
BRIDGEintegrationConnectors Infers field mappings, explains sync failures in plain language advise
WARDENlist hygieneImport Dedupes, normalises, scrubs DNC, demotes unevidenced consent acts
GUIDEsupportSupport Answers from the manual, escalates when it cannot advise
COACHtrainingTraining Roleplays the owner, scores script adherence, runs drills advise
LEDGERclient reportingClient portal Writes the weekly client summary from real numbers advise
OMNILINK - AXIOM Gate · log Last 6 of 63 refusals today
HELD SCRIBE · text to +1 817 442 9031 No consent record. Northgate Provisions has never given permission to be texted.
HELD COURIER · email to buyer@sunbeltbev.com Contact is marked do-not-contact. The DNC covers every channel, not just voice.
HELD SCRIBE · text to +1 209 118 3320 Local time 8:14pm. Outside the calling window for this contact's timezone.
HELD COURIER · subject line "your account is overdue" Misleading subject -- no account exists. CAN-SPAM header accuracy.
HELD VOX · outbound call to +1 512 771 2280 AI voice outbound telemarketing needs prior express written consent. Routed to a human operator instead.
SENT COURIER · email to danny@vegawholesale.com All five checks passed. Consent record #118, not on any list, 2:04pm local, script current.

Email OPEN NOW

CAN-SPAM permits cold commercial email with no prior consent. What it requires: accurate From and subject, a real physical address, a working opt-out, and honouring it promptly. No per-message registration and no carrier queue.

OperatorCOURIER
Autonomyapprove queue
Sent today318
Open / reply41% / 1.9%

Voice HUMAN ONLY

A human may cold-call a business today, inside calling hours, against a scrubbed DNC list. An AI voice may not -- the FCC treats AI-generated voices as artificial voices under the TCPA, so outbound telemarketing with one requires prior express written consent. VOX answers inbound and callbacks instead.

Operatorhumans · VOX inbound
Dials today152 human
VOX inbound19 answered
Recordingoff

Text BLOCKED

Two locks. The carrier campaign is not registered, so nothing sends at all. And each individual number needs its own documented permission before it may be messaged -- that is what the verbal opt-in on a call is for. Opt-ins captured now are banked against the day the campaign clears.

OperatorSCRIBE
Autonomypropose only
Textable contacts313
Drafted, waiting214
SCRIBE · drafts waiting for approval
SCRIBE to Vega Wholesale · Danny Ruiz · consent #118 danny -- pricing moved on the 24-case this week, cheaper than last month. want me to send the sheet? reply STOP to opt out.
SCRIBE to Cassidy Wine & Spirits · consent #094 hi -- new allocation came in on the two labels you asked about in august. worth a look before it moves. reply STOP to opt out.
INBOUND · +1 512 367 8722 · would arrive here yes send it
COURIER · sent this morning
COURIER to ray@northgateprov.com · 9:14am case pricing, fort worth
Ray -- we supply about forty independents in DFW and our case price on the fast movers is running under what most are paying. If it's worth ninety seconds I'll send the current sheet, no pitch attached.
Ray Delgado · 11:02am Send it over. We're not switching but I'll look.
COURIER · queued for approval sheet attached
Here it is -- the top twenty by volume. No obligation, and I'll leave you alone unless you ask.

Every one carries a real address and a working unsubscribe. The reply routes to a human and the lead moves to warm automatically.

18To score6 human · 12 AI
91Floor averageof 100 · last 30 days
4Auto-failsthis month · 2 unresolved
2Disputes openboth awaiting second score
Scoring · item 7 of 18 EMAIL · Sep 9 · 09:14
Blind. You will see who did this after you submit. Knowing your best operator wrote it changes how you read it.
OUTBOUND to ray@northgateprov.com case pricing, fort worth
Ray -- we supply about forty independents in DFW and our case price on the fast movers is running under what most are paying. If it's worth ninety seconds I'll send the current sheet, no pitch attached.
Ray Delgado · 11:02am Send it over. We're not switching but I'll look.
Honoured every opt-out and do-not-contact Nothing sent to an address or number that asked to be left alone, on any channel.
Permission matched the channel used A consent record exists where one is required, and it names a person.
Nothing misrepresented No invented relationship, no unauthorised discount, no misleading subject line.
Identified who we are, in the first two lines The recipient can tell who is contacting them and why without reading on.
One clear ask The recipient knows exactly what saying yes commits them to.
Sounded like a supplier, not a campaign Brand voice. No hype, nothing that reads as a template.
Accurate about the business Every specific detail is one we actually hold on this lead.
Logged correctly Outcome, notes and lead status match what actually happened.
90 / 100 · no auto-fail triggered

Any single auto-fail fails the whole item regardless of the points. Those three are not quality criteria, they are the floor -- an email that scores 95 and messaged someone who opted out is a failed email.

How this queue is filled
Random sample2% of all work
Every consent capture100%
Every DNC request100%
New operator, first 2 weeks10%
AI agent output5%
Anything complained about100%

Random plus risk-weighted. Pure random misses what matters; pure targeting means an operator can predict what gets looked at.

AI agents are scored too
WorkerSampledAvgTrend
COURIERAI · email62 93steady
SCRIBEAI · text drafts31 86 down 4
VOXAI · inbound19 95steady
Maria Ortizhuman14 94up 2
Priya Nandihuman16 82 down 7
What QA cannot do
Edit a leadno
Change a scriptno
Work a queueno
Change an agent promptno
Delete or amend a scoreno
Score their own workno
Escalate to Complianceyes

The people who grade the work do not get to change the work, and nobody grades themselves. A submitted score is append-only -- corrected by a second score, never overwritten.

This week's calibration Same 5 items, scored blind by all four analysts
ItemColeNunezAdeFrankSpread
Call · consent capture95 909590 5
Email · cold open88 859085 5
Call · DNC request100 100100100 0
Text draft · SCRIBE75 958075 20
Call · objection handled85 808590 10
Analyst agreement Rolling 90 days · lower is better
Renata Cole3.1
Marco Nunez8.7
Yemi Ade3.9
Dale Frank4.2

Marco is the outlier, and consistently high rather than random -- he scores generously. That is coachable and it is also a reason to look at whose work he happened to be assigned.

Amber is the median analyst. Red is Marco's distribution sitting to the right of everyone else's.

Disputes An operator has seven days to challenge a score
ItemWhoScoreTheir caseState
Call · Sep 5Ellis Market Supply Priya Nandi68 "I did read the permission ask -- the recording cuts off before the end of the call." re-scoring
Email · Sep 4Kettleman Grocery COURIER AI72 Raised by Devon Reyes: "the subject line was flagged misleading but it describes the email exactly." re-scoring
Call · Aug 29Palmer Street Market Sam Whitcombe84 "Marked down for not offering the sheet -- the owner had already hung up." upheld operator

A dispute is settled by a second analyst scoring blind, never by the first analyst reconsidering. Both scores stay in the record -- the correction is visible, and a pattern of overturned scores is itself a signal about the analyst.

Where QA reports

QA does not report to the floor supervisor whose numbers its scores affect, and it does not sit under the admin who configures the scripts it grades against. It reports alongside Compliance. That reporting line is the difference between a quality department and a department that produces quality-shaped numbers.

Analysts4
Reports toCompliance, not Operations
Can score supervisorsyes
Can score AI agentsyes
Scores are append-onlyyes
Mode
Outbound dialing Work queues and place calls
Inbound calls Take returns from people you dialed
Auto-advance after outcome Next lead loads on its own, five seconds to undo
Call recording Needs the browser dialer -- not connected yet
Calling hours
Window
8:00am to 8:00pm
Timezone
Each lead's own local time
Weekends
Saturday only, 10:00am to 5:00pm
Held now
0 leads outside window

Enforced in the queue, not by you. A lead outside its window is never handed out, so there is nothing to remember and nothing to get wrong at 8:01pm.

Do not call 2,914 numbers blocked
DNC Shield · federal
not connected
DNC Shield · state
not connected
Internal
2,914 · updated continuously
Text opt-outs
STOP replies · automatic
OMNILINK - Number Integrity not connected

Numbers change hands. Someone who agreed to be texted in March may not own that number in September, and the person who owns it now never agreed to anything. Checking the FCC's database before messaging is what earns the safe harbour if you get it wrong anyway.

Consent records to re-check313
Oldest consentAug 28 · 12 days
Last checkednever
Recording & consent by state unresolved

Recording turns an operator's word into evidence -- but roughly a dozen states require every party to consent, and California is one of them. An unannounced recording there is not proof, it is a second problem.

Recordingoff everywhere
Announcement in scriptnot present
CA leads on the list860
Scripts in force
ScriptVersionIn force
Text permissionread before hanging up v1-2026-09-09live
Qualification3 questions v2-2026-09-04live
Objection sheet5 entries v1-2026-09-06live
Text permissionsuperseded v0-2026-08-28retired

Every consent record stores which version was read aloud. Changing the wording never rewrites what somebody actually agreed to.

Texting readiness
Carrier brand
not registered
Campaign
not registered
Phone number
none purchased
STOP handling
tested end to end

Calls work today. Texting does not send until the carrier approves the campaign -- a review queue nothing here can shorten. Opt-ins captured now are waiting for it.

Retention & holds written, not running
Consent records5 years
Do-not-callforever
Call activity4 years
Deletion jobnot scheduled
Litigation holdno mechanism
OMNILINK - CRM Connector
Component
OMNILINK - CRM Connector · upstream
State
queued, not sending
Waiting
41 payloads
3On the floor1 on break
152Dials todayFloor target 240
4Opt-ins2.6% of dials
0Compliance flagsNo script skips today
Live Listen never records. Whisper is heard by the operator only.
WorkerStateOn call withTalkDialsOpt-insScript read
MO Maria OrtizOutbound · TX Distributors
On call Northgate Provisions+1 817 442 9031 02:1441 2100%
DR Devon ReyesOutbound · CA Retail
Wrap-up-- 00:4138192%
PN Priya NandiOutbound · TX Distributors
Dialing-- --441 78%
SW Sam WhitcombeOn break since 12:52
Break-- --29096%
CO COURIERAI · email · approve queue
Working318 sent today ------n/a
VX VOXAI · voice · inbound only
Listening19 answered today ------n/a
SC SCRIBEAI · text · propose only
Blocked214 drafted, 0 sent ------n/a

Humans and AI agents on one wallboard, because they are one team working one list. An agent gets a pause button in the same column a person gets a whisper button.

Needs a supervisor
1:22pm DNC requested by nameSunbelt Beverage Co -- owner asked how we got the number. Devon handled it correctly.
12:40pm Consent record with no last nameRejected at capture. Priya re-asked and got it. No action needed.
11:58am Inbound call from a number never dialedUnassigned. Somebody has to claim it.
Call review queue Needs the browser dialer
People 12 accounts · 3 active right now
PersonRoleScopeLast seenSign-in
MO Maria Ortizm.ortiz
OperatorTX Distributorsnow 2FA on
DR Devon Reyesd.reyes
OperatorCA Retailnow 2FA on
PN Priya Nandip.nandi
OperatorTX Distributorsnow no 2FA
SW Sam Whitcombes.whitcombe
OperatorCA Retail12:52pm 2FA on
RC Renata Coler.cole · QA lead
QAscores all · works noneYesterday 2FA on
MN Marco Nunezm.nunez · QA analyst
QAscores all · works none9:41am 2FA on
YA Yemi Adey.ade · QA analyst
QAscores all · works none10:22am 2FA on
DF Dale Frankd.frank · QA, part time
QAscores all · works noneSep 6 2FA on
JT Jordan Tatej.tate
Supervisorall11:04am 2FA on
MM Martin M.steward
Adminallnow 2FA on
AK Alex Kima.kim · invited, never signed in
Operator-- never pending
TB Tom Bairdt.baird · left the company
Operator-- Aug 22 disabled

Accounts are disabled, never deleted. Every call and every consent record names the operator who made it, and that attribution has to survive the person leaving -- otherwise a consent record becomes unattributable the day somebody quits.

What each role can do
OpQASupAdmin
Work a queue, capture consentyesyesyes
Look up one leadyesyesyesyes
See the whole listyesyesyes
Listen / whisper on a live callyesyes
Score work, including a supervisor'syes
Score AI agent outputyes
Escalate to Complianceyesyesyesyes
Export consent recordsyesyes
Change scripts or calling hoursyes
Change an AI agent promptyes
Import a lead listyes
Add or disable a personyes

QA is the only role that can score, and the only one that cannot work. It is not a supervisor with less access -- it is a department with different access, which is why neither column is a subset of the other.

Import a lead list

Last import: Sep 1 · 1,204 rows accepted, 22 rejected as unreachable line types.

OMNILINK - CRM CONNECTOR

Project in, campaign here, outcomes back to the project.
bound to: GrowLink AI CRM

Not connected
Base URL
not set
Auth
not set
Pull
Projects to campaigns, on a schedule and on demand
Push
Calls, texts, emails, outcomes, consent records
Waiting to push
41 payloads
Last attempt
never
Projects to campaigns
GrowLink projectCampaign hereLeadsChannelsSync
SUPER SALES · TX Distributorsproject GL-2201 TX Distributors3 queues1,204 voice email pending
SUPER SALES · CA Retail Groceryproject GL-2208 CA Retail Grocery2 queues860 voice email pending
SUPER SALES · Existing customersproject GL-1988 Existing customers1 queue312 voice email sms pending

A project arriving from GrowLink is audited on the way in exactly like a CSV -- normalised, line-type checked, deduplicated, DNC scrubbed, split by permission. GrowLink saying a contact opted in does not skip the audit; it is a claim that has to name its evidence.

Field mapping Both directions · unknown until GrowLink answers
project.leads[]tounknown phonebothunknown business_namebothunknown emailbothunknown consent_claimfromunknown last_outcometounknown consent_recordtounknown do_not_callbothunknown

Every field is marked unknown rather than guessed. A mapping that looks configured but points at the wrong field is worse than no mapping -- it fails silently and you find out from a customer. do_not_call is bidirectional on purpose: a DNC anywhere must be a DNC everywhere, immediately.

Waiting to send 41 payloads · in order
QueuedKindAbout
1:12pmconsent Vega Wholesale · Danny Ruiz said yes
1:12pmactivity Vega Wholesale · connected 4m 12s
1:04pmactivity Northgate Provisions · no answer
12:47pmdnc Sunbelt Beverage · owner requested
Code we already hold Reference architecture · assessed 2026-09-09
RepositoryOriginLicenceStackVerdict
Sales-Intelligence-Hubbranch sales & payment tracking fork of sivadst all rights reserved Streamlit · MySQL pattern taken
RetailIQretail sales & analytics dashboard fork of Jnaneswari19 MIT Streamlit · MySQL pattern taken

Taken -- live in the build

PORT The payment ledger model Amount owed, split payments, status Open to Partial to Closed. That is the commission ledger on Incentives.
PORT The named query catalogue Same shape, different nouns -- outcomes, consent, queues. Now the report catalogue on Business Intelligence.
PORT Branch isolation as a first-class idea That is the workspace model, thought through by somebody who hit the problem.
PORT The export layer CSV, Excel and PDF from one report. On every report here.

Left behind

SKIP Streamlit as the runtime Right for an analyst's dashboard, wrong for a screen an operator lives in eight hours a day.
SKIP MySQL as a third engine We already owe ourselves one database migration.
SKIP Its three-role rank ladder The exact model QA broke here.
SKIP Demo credentials in the README Both ship one. Whatever is ported, that does not come with it.

OMNILINK - VOICE ASSISTANT

AXIOM speaks, and every role talks back to it.
engine: ElevenLabs · recognition: browser

browser voice · not keyed
Proxy endpoint
not set
Voice id
not set
Model
turbo · lowest latency wins here
Speaking now
Browser speech synthesis · proves the interaction, not the voice
Recognition
Browser, push-to-talk only
Cached lines
18 · already recorded for the console reel
Voice rules Enforced in code, not written in a policy
RULE AXIOM does not speak while a call is live Speech through a headset bleeds into the microphone -- the customer hears it, and on a recorded line it is captured. Connecting a call cancels any sentence in progress mid-word. AXIOM writes instead.
RULE Never an open microphone Push-to-talk, held, with a red indicator whenever the mic is hot. An always-listening mic on a call floor records the customer continuously and ships their speech to a third party.
RULE Recognising the customer is recording the customer If AXIOM is ever asked to hear the other side of a call, that sits behind the same gate as call recording: notice in the script first. Deliberately not built.
RULE If it speaks its help it speaks its refusals A refusal delivered only in text while everything else is spoken makes voice the one channel where the gate is invisible.
Command grammar Scoped to the role · the same permissions as the screens, spoken

Operator

"next" / "next lead"Advance the queue
"call" / "dial"Place the call and start the timer
"no answer" / "voicemail"Disposition without touching the keyboard
"callback"Book it -- and it returns to you, not the pool
"do not call"Blocks every channel immediately
"brief me"Who you are about to call, in one breath, before it rings
"read the script"The permission script, verbatim -- muted while connected

QA

"pass" / "fail"Score the criterion in focus. Nothing submits until you say so.
"next item"Still blind -- you learn who did it after submitting
"escalate"To Compliance
"calibration"Where the analysts disagree

Supervisor

"who needs coaching"The name, and what it is costing
"listen" / "whisper"Listening never records; whisper is heard by the operator only
"pause courier"Stop an AI agent by name

Admin

"what is not connected"Every unconnected component, named
"worst gap"The honest answer, not the flattering one
"users" / "connectors" / "dialer"Navigate
OMNILINK - Component Registry Every framework component carries the house name
ComponentDoesEngine underneathState
OMNILINK - Operator Console The floor. Queue, dial loop, consent capture. ours live
OMNILINK - AXIOM Gate Checks every AI action before it leaves the building. ours live
OMNILINK - AI Team SCRIBE, COURIER, VOX, SENTRY and nine specialists. ours live
OMNILINK - Consent Ledger Attributed, script-versioned, append-only permission records. ours live
OMNILINK - Business Intelligence Report catalogue, trends, comparisons, exports. ours live
OMNILINK - Quality Assurance Blind scoring, calibration, disputes. ours live
OMNILINK - Incentive Engine Points, contests, clawbacks, payout ledger. ours live
OMNILINK - Academy Certification that gates queue access. ours live
OMNILINK - Support Desk Manual, tickets, live agent, AXIOM. ours live
OMNILINK - Workspace Manager Client isolation, seats, usage metering. ours no tenant column yet
OMNILINK - Records & Retention Schedules, subject requests, litigation hold. ours written, not running
OMNILINK - Mobile Installable web app: clock, shift, callbacks, safety. ours designed
OMNILINK - Client Portal What the client sees of their own campaign. ours live
OMNILINK - CRM Connector Project in, campaign here, outcomes back. GrowLink AI CRM not connected
OMNILINK - HR Connector People, pay, time off, documents. Odoo not connected
OMNILINK - Messaging Gateway Sends the campaign, receives STOP. Twilio awaiting carrier
OMNILINK - Voice Gateway Browser dialer, call recording. Twilio not connected
OMNILINK - Dialer Manual, power and predictive modes, voicemail drop. Twilio Voice manual only
OMNILINK - DNC Shield Scrub on import, re-scrub monthly, every channel. FTC + state registries internal list only
OMNILINK - Voice Assistant AXIOM speaks; every role talks back. ElevenLabs browser fallback
OMNILINK - Number Integrity Catches numbers that changed hands since consent. FCC Reassigned Number Database not connected

The naming rule is one line: OMNILINK - then what the thing does, never who makes it. A component name describes a capability the client buys from us and keeps buying if we change what is behind it -- which is the whole point of naming it that way. Swapping Odoo for something else should be a maintenance note, not a rename in every contract.

Other connectors
ServiceWhat it does hereState
OMNILINK - MESSAGING GATEWAYengine: TwilioSends the campaign, receives STOP awaiting carrier approval
OMNILINK - VOICE GATEWAYengine: TwilioBrowser dialer, call recording not connected
OMNILINK - DNC SHIELDsource: FTC registry + state listsScrub on import, re-scrub monthly not connected
OMNILINK - NUMBER INTEGRITYsource: FCC Reassigned Number DatabaseCatches numbers that changed hands since consent not connected
OMNILINK - HR CONNECTORengine: OdooPeople, pay, time off, documents not connected
OMNILINK - Dialer
Manual Operator presses call. No abandonment exposure at all.
Power dial One line per operator, auto-dials the next on hang-up
Predictive dial Multiple lines per operator, dials ahead of availability
Abandonment
not measured -- manual mode
Cap
3% per campaign per day
Ring time
15 seconds / 4 rings minimum
OMNILINK - Voicemail Dropnot built

One keystroke drops a pre-recorded message and moves to the next lead without waiting out the greeting. Against roughly forty-eight no-answers a shift this is the single largest time saving available anywhere in the console.

MessageLengthUsed
First attempt · distributorsnames the business, no pitch 18s--
Third attempt · last trygives a reason to call back 14s--
Callback missedthey asked, we called, they were out 11s--

Every drop identifies the caller and the business by name and gives a number to call back. A voicemail that does not say who left it is the fastest route to a complaint.

Call recordingoff

Recording turns a consent record from an attestation into evidence. It also creates its own exposure: some states require every party to consent, so an unannounced recording there is a liability rather than proof.

Announce recording at the top of every call Required before any recording is worth having
Record only in one-party-consent states Safer, and leaves your biggest markets uncovered
Caller identity
Numbers
0 purchased
Caller ID name
not registered
Branded calling
not set up
Attestation
not verified
Local presence Call from a number matching the lead's area code

Local presence lifts answer rates and raises your spam-flag risk at the same time -- carriers watch for one number pattern dialing many area codes. If you use it, use few numbers and rotate them slowly.

OMNILINK - HR CONNECTOR

People, pay, time off, documents
engine: Odoo · hr.employee, hr.attendance, hr.leave

not connected
operatorbothhr.employee punchtohr.attendance breaktohr.attendance time-off requesttohr.leave schedulefromresource.calendar certificationtocustom field incident reporttocustom model

The first five map onto Odoo's own HR models cleanly, so they are not guesses. The last two have no natural home -- certifications gate queue access here, and an OSHA incident is a legal record with its own retention. Both probably stay in A-TEAM and get referenced from Odoo.

OMNILINK - Time Clock
Roundingnone -- actual minutes
Grace on late punchnone
Auto clock-outnever
Meal break30 min before 5th hour
Rest breaks10 min per 4 hours, paid
Overtimedaily over 8, weekly over 40
Edits require a reasonyes

Meal and rest rules follow the strictest state anyone on the roster works in, not the state the company is registered in.

Safety & OSHA needs a determination

A telemarketing or call-centre operation may fall under OSHA's partial exemption from routine injury-log recordkeeping -- it depends on your NAICS code and whether you had more than ten employees at any point in the last calendar year. That is a determination to make on paper, once, with the codes in front of you. Not a guess.

ObligationAppliesState
General duty -- a workplace free of recognised hazards alwayspolicy written
"It's the Law" poster displayed alwaysposted + in the app
Report a fatality within 8h, hospitalisation within 24h alwaysno procedure
Emergency action plan alwaysnot written
No retaliation for reporting alwayspolicy written
OSHA 300 / 300A injury logs dependsdetermine first
Ergonomics -- headset, seating, screens no standard4 modules live

The bottom row has no OSHA standard behind it and it is still where every real injury in a call centre comes from -- hearing, wrists, backs, eyes. Training on it is worth doing because it works, not because someone requires it.

Incidents Append-only, like consent records
WhenWhatReported byState
Sep 3Acoustic shockHeadset feedback on an inbound call Devon Reyesclosed · headset replaced
Aug 21Wrist painReported after 3 weeks on the floor anonymousopen · assessment booked
Aug 14Trip hazardCable run across the aisle anonymousclosed · rerouted

Reports can be anonymous, and an incident cannot be edited or closed by the person it was reported about. A safety report a manager can quietly alter is not a safety system, it is a liability with a form attached.

Today's attendance Live · every edit visible to the person it belongs to
PersonInBreakOutTodayWeekFlags
Maria Ortiz9:02a15m --4:1222:47 meal due 2:02p
Devon Reyes8:58a15m --4:1623:10
Priya Nandi9:14a0m --4:0021:32 no rest break taken
Sam Whitcombe9:00a45m --3:2919:48 on break
2,140Your points
This month · 71% of your best month
#2On the floorof 4 · up one place this week
+18%On your own bestThe number that decides bonuses
$412Bonus earnedLocked in · paid Sep 30
This month Ranked by movement against your own baseline, not raw totals
1 Devon ReyesCA Retail · beat his own best by 24% up 22,380
2 Maria Ortiz -- youTX Distributors · up 18% on your best up 12,140
3 Sam WhitcombeCA Retail · up 9% down 21,905
4 Priya NandiTX Distributors · down 4% on her best down 11,640

Everyone sees the top three and their own row. Nobody sees who is last. A public bottom does not motivate the person in it and it costs you everyone else's goodwill -- the supervisor and QA see the whole board, which is where that conversation belongs.

September challenge · Clean Hundred

One hundred consent records across the whole floor that every one passes QA at 90 or above. Not ninety-nine and one sloppy -- a single auto-fail resets the count.

63 / 100 clean $1,500 team pot · 11 days left

The pot splits evenly across everyone who contributed at least one clean record. Even split on purpose -- it stops the strongest operator hoarding warm leads and makes it worth someone's while to help a newer person get their first.

How you earn The whole table · nothing hidden
+120 Consent record that passes QA at 90+ The most valuable thing anyone does here. Scored before it pays.
+80 Lead qualified and accepted by sales Accepted, not just sent. Sales rejecting it pays nothing.
+40 Callback booked and kept Paid when you make the return call, not when you book it.
+25 Real conversation with a decision-maker Qualification answered, whatever the outcome. A clean no counts.
+15 Do-not-call handled correctly Yes, this pays. Somebody asking to be left alone should never cost you money.
0 A dial Deliberately worth nothing. Dials are how you get outcomes, not the outcome.
-120 Consent record that fails QA Takes back exactly what it paid. The incentive and the rule point the same direction, always.
reset Any QA auto-fail That day scores zero, appealable only through the normal dispute path.
Your bonus, in full You can check this arithmetic yourself
Clean consent records x11$220
Qualified & accepted x6$120
Callbacks kept x9$45
Personal-best bonus, +18%$50
Reversals-$23
$412earned this month

Every line is a rate you were told before the month started, times a count you can see. If an operator cannot compute their own bonus, the plan is not an incentive -- it is a lottery, and people stop trying to win lotteries.

Streak A clean day: at least one scored outcome, zero auto-fails
MTW TFM TWTF

8 clean days. Your best is 14. Streaks reset on an auto-fail, never on a slow day -- a quiet Tuesday is not a failure and should not be punished like one.

Earned
◎First clean 10Aug 19
●Perfect QA monthAug
↩Kept 20 callbacksSep 2
♣Trained someoneSep 5
▲21-day streak8 / 21
◆100 clean records47 / 100

Trained someone is there on purpose. If the only way to score is your own numbers, helping a new operator is a cost -- so it has to be worth points, or nobody does it twice.

Not on this board
COURIER, SCRIBE, VOXexcluded

AI agents outproduce every human here on volume and you cannot pay one a bonus. Putting them on the leaderboard would demote four people to the bottom of a board they cannot win, for nothing. Their output is measured on the QA page, where it belongs.

OMNILINK - Incentive Engine Published to operators in full
EarnsPointsGateRate
Consent record+120 QA 90 or above$20
Qualified lead+80 accepted by sales$20
Callback kept+40 return call made$5
Decision-maker conversation+25 qualification complete--
DNC handled correctly+15 QA spot-check--
Dial0----
Consent record failing QA-120 automaticclawback
QA auto-failday to 0 automaticday to $0
The four ways this could go wrong Named, with the guard that catches each
RISK Pressured opt-ins Chasing the +120 by pushing somebody into a yes. Guard: every consent record is QA-scored before it pays, and a fail claws back the full amount.
RISK Cherry-picking the list Working only the easy leads. Guard: the queue hands out the order, and skipping is logged and visible.
RISK Hoarding warm leads Sitting on a good callback. Guard: callbacks release to the floor two hours past the promised time, and the team pot splits evenly.
RISK Working off the clock to win The most expensive one, and the least obvious. Guard: points only accrue between a clock-in and a clock-out. Unpaid overtime that earns a bonus is a wage claim wearing a leaderboard.
Contests
ContestMetricPotSplitState
Clean HundredSeptember 100 consent records, all QA 90+$1,500 even, all contributors63 / 100
Nobody Left BehindSeptember Every operator beats their own August$800 even, whole floor3 of 4
First FiftyAugust · closed First 50 clean consent records$750 even, 4 contributorspaid Aug 31

Nobody Left Behind is the most useful contest on this list. It pays the whole floor only if the weakest operator improves, which turns your best people into coaches for eleven days without anyone being told to mentor.

OMNILINK - Payout Ledger not connected to payroll

A bonus is a payroll record, not a game score. It has to be traceable to the outcomes that earned it, disputable on the same path as a QA score, and it has to land in payroll as earnings.

PeriodPersonPointsEarnedClawbackState
SepDevon Reyes2,380 $468$0accruing
SepMaria Ortiz2,140 $412-$23 accruing
SepSam Whitcombe1,905 $355$0accruing
SepPriya Nandi1,640 $290-$120 accruing · 1 dispute
AugWhole floor7,880 $1,604-$40paid via HR Connector
Where the ledger comes from

The commission ledger is the one piece of this the team already had twice over. Sales Intelligence Hub's payment model is exactly the right shape -- an amount owed, split payments against it, a status that moves Open to Partial to Closed, and triggers keeping the balance honest. Swap "customer sale" for "bonus earned" and "payment split" for "payout" and the schema transfers directly.

OMNILINK - Workspace Manager One per client · hard isolation, not a filter
ClientSeatsLeadsNumbersPlanState
SUPER SALES TEAMworkspace sst · the beta client 12 / 152,3760 Beta · no chargeactive
OMNILINK internalworkspace omni · demo and training 3 / 51480 Internalactive

Isolation has to be enforced in the query layer, not in the interface. A workspace filter that lives in the UI is one forgotten WHERE clause away from showing one client another client's list -- and that is not a bug you get to apologise for, it is the end of the contract.

Metering
Operator seats12 active · 1 idle 30d
AI agent hours52.4 this month
Voice minutes0 -- no number yet
Texts sent0 -- campaign pending
Emails sent4,182 this month
Leads under management2,376
Consent records held313

Metering exists before pricing on purpose. You cannot price a seat-plus-usage product until you know what a real client actually burns in a month, and this is month one.

Security posture
Two-factor11 of 12 accounts
Session timeout12 hours -- too long
Password policyset
Lockout after failuresnot set
SSOnot offered
Admin actions loggedyes, immutable
Storage
EngineSQLite · single file
Size18.4 MB
Concurrent writersserialised
Backupsnone
Point-in-time restoreno
Tested restorenever
OMNILINK - Records & Retentionnot enforced
RecordKeep forWhy
Consent records5 years Claims run four years -- keep a margin past the last message sent
Do-not-call requestsforever A DNC that expires is a DNC that gets violated
Call activity4 years Matches the claim window it would be defending against
Call recordings2 years Storage and exposure both grow; the consent record outlives the audio
Worked-out leads18 months Contact data nobody is using is only a liability

Nothing on this schedule runs today. Writing it down is the first half; a job that actually deletes on it is the second, and the second half is what a regulator asks to see.

Subject requestsmanual

A California business owner can ask what you hold on them and ask you to delete it. Today that is somebody writing SQL against a live database, under a clock.

Requests received0
Response deadline45 days
Export toolingnone
Deletion toolingnone
Litigation holdno mechanism

When a claim arrives, everything touching that number has to stop moving -- no deletion, no retention job, no edits -- and somebody has to be able to prove it stopped. There is nothing here that does that today.

Recommendation: one installable web app, not three codebases

Everything an operator needs on a phone -- punch, schedule, profile, documents, safety, callbacks -- the web does properly today. Face ID and fingerprint sign-in work through passkeys. Offline punches queue and sync. The camera works for incident photos. One codebase, shipped the moment you push, with no app review standing between a fix and the floor.

Build it as a Progressive Web App the operator installs to their home screen during onboarding. If you later need what only native gives you, wrap this same app in Capacitor rather than rewriting it -- the shell is the change, not the product.

Installable web app

RECOMMENDED · build this

One codebase. Ships instantly. Home-screen icon, offline, biometric sign-in via passkeys, camera. Push works on Android; on iOS it works once installed to the home screen -- which you control, because you control the workforce.

Capacitor wrapper

LATER, IF NEEDED

Same web app in a native shell. Buys background location, reliable iOS push, and store listings without a rewrite. This is why choosing the web now is not a decision you are stuck with.

Native iOS + Android

NOT YET

Three codebases and two review queues for an internal tool used by twelve people, at a company that has not bought a phone number yet. Justified when a verified geofence or store distribution becomes a real requirement.

What would actually change the answer
RequirementWeb appNeeds native
Clock in and out, offline-safeyesno
Face ID / fingerprint sign-inyes · passkeysno
Photo of an incident or a hazardyesno
Notify a shift changeAndroid yes · iOS after installif install rate is a problem
Location at the moment of punchonly while the app is openif punches must be verified
Background geofence, auto-punch on arrivalnoyes
Detect a spoofed locationnoyes
Listed in the App Storenoonly if it is a product you sell

Only two rows are real native requirements, and both are the same requirement: do you need to prove where somebody was when they punched? For a floor where people badge into a building, the door already answers that.

The operator's phone

Five screens, one thumb, no menus. Tap the tabs at the bottom of the phone.

9:41A-TEAM82%
Clocked in since 9:02am
4:12
hours on the clock today
▸Clock inToday9:02am
◼Break15 min, paid10:44am
▸Back on10:59am
⚠Meal break dueBefore 2:02pm 48 min
This week · 22h 47m · no overtime · one edit by Jordan Tate on Monday, which you can see and dispute.
This week
•MonOutbound · TX9a-5p
•TueOutbound · TX9a-5p
● WedToday9a-5p
•ThuCallbacks first hour9a-5p
•FriOutbound · CA10a-6p
- Sat, SunOff
18 days paid time off remaining · accrues 1.25 days a month · balance from the HR Connector.
Your callbacks
Full console is desktop only. On a phone you can keep a promise, not work a queue.
● Ridgeline FoodsAna Delgado · pricing on the 24-case 2:15p
• Kettleman Groceryafter the lunch rush4:00p
• Marisol MercadoHector · partner decidesThu 9:30a
#2 $412
on the floor · up 18% on your own best · bonus earned this month
MTW TFM TWTF
8 clean days · best is 14
MO
Maria Ortiz
Operator · TX Distributors · since Aug 4
Certifications
✓ Permission & consentScript v1 · Sep 810/10
✓ Do-not-call handlingSep 2pass
! Objection handling v212 min due
Safety
Your rights, in one place
§OSHA "It's the Law" posterRequired posting›
§Reporting without retaliationWhat is protected›
§Emergency action planThis location›
§Injury & illness logSummary you may view›
The hazards that are actually yours
♪Headset volume & acoustic shock2 mindone
▣Desk and chair setup3 min · with photosdone
☸Repetitive strain & microbreaks2 min due
◉Screen distance & eye strain2 mindone
What the phone deliberately cannot do
Work an outbound queueno
Capture a verbal opt-inno
See the whole lead listno
Return a promised callbackyes
Clock, schedule, profile, safetyyes

Consent capture stays on the desktop console on purpose. The script has to be read carefully, a name typed accurately, and the record right the first time. That is not a task for somebody standing in a car park -- and a consent record captured badly is worth less than none.

The time clock is a legal record

Wage-and-hour disputes are decided on time records, so this is not a convenience feature. Three rules built in from the start:

RULE Punches are append-only An edit writes a new record next to the original. Nothing is overwritten, ever.
RULE The employee sees every edit to their own time Who changed it, when, and what it was before -- with one tap to dispute it.
RULE Offline punches queue and sync A phone with no signal must never be a reason somebody's time goes unrecorded.
OMNILINK - Support Desk · your tickets
#SubjectStateUpdated
411Wrong phone on 3 leadsAll three ring a fax line With support1h ago
402Callback did not come back to meKettleman Grocery, Tuesday FixedYesterday
388Script wording questionCan I say "a few times a month"? Answered -- noSep 4
Manual · most-read
2.1 Asking permission to textWhy the exact wording matters and what you may not paraphrase
2.4 "Take me off your list"What to say, what to press, and why it is immediate
3.2 Booking a callbackHow to promise a time you can keep
1.3 Keyboard shortcutsThe nine keys that do ninety percent of the work
4.1 Calling hoursWhy you never have to think about them
OMNILINK - Academy · your certificationsMaria Ortiz
passed Console basicsQueue, dispositions, notes · Sep 2
passed Permission & consentScript v1-2026-09-09 · scored 10/10 · Sep 8
passed Do-not-call handlingSep 2 · renews annually
due Objection handling v2New sheet published Sep 6 · 12 min
locked Inbound callsUnlocks when inbound mode is switched on
When a script changes

Publishing a new consent script version does two things automatically: it marks every operator uncertified on that script, and it holds them out of queues that need it until they pass. A wording change is a legal change, so it cannot be a memo nobody read.

OperatorScript v1Objections v2
Maria Ortizpassed due
Devon Reyespassed passed
Priya Nandipassed due
Sam Whitcombepassed due
Alex Kimnot started not started
Practice AXIOM plays the business owner. Nothing is dialed.