Dailify Before sign-up Landing Broker login Onboarding Broker Dashboard Campaigns Calendar Calls Your week Leads Script Connections Reports Inbox Support Wallet Team Admin Staff login Ops overview Brokers Pricing QA queue Script review Cost centre Data requests Audit log Written CF-DOC-06
This top bar is review chrome, not product UI — it exists so you can walk every screen without hunting for links. Everything below it is the interface. All of it is live: forms validate, the script editor flags wording as you type, the recordings play, and the wallet arithmetic is real.
ScreenRouteWhat it demonstratesPage
Before sign-upLanding/public copy · sample call playslanding.html
Broker login/logintenant directory · SSOlogin.html
Onboarding/welcome5 steps · validation · lead uploadwizard.html
BrokerDashboard/next meeting · needs-action · funnelportal.html
Campaigns/campaignsactive · paused · in-review · budgetportal.html
Calendar/calendarpending-YES · busy · now-lineportal.html
Calls/callslive wall · recording · transcriptportal.html
Your week/weekprep sheet · brief · verificationportal.html
Leads/leadsupload · consent source · quarantineportal.html
Script/campaigns/:id/scriptlocked blocks · lint · submitportal.html
Connections/settings/connectionstoken health · DNC sourcesportal.html
Reports/reportsfunnel · per-campaign · exportportal.html
Inbox/inboxunread · bulk-select · filtersportal.html
Support/supporttickets · disputesportal.html
Wallet/walletVAT maths · top-up · ledgerportal.html
Team/settings/teamseats · roles · invitationsportal.html
AdminStaff login/admin/loginseparate directory · hardware keyadmin-login.html
Ops overview/adminseverity x SLA · live call walladmin.html
Brokers/admin/brokersrate · margin · statusadmin.html
Pricing/admin/pricingdefault · per-client overrideadmin.html
QA queue/admin/qaage/SLA · decision · reject reasonadmin.html
Script review/admin/scriptsapprove · request changes · rejectadmin.html
Cost centre/admin/costsper-minute cost · marginadmin.html
Data requests/admin/dsarexport · erase · POPIA s23/s24admin.html
Audit log/admin/auditappend-only · actor · filtersadmin.html
WrittenCF-DOC-06design & build responsedocument.html

Screens marked not built yet are in your 06_Mockups_CallForge.html and are not in this prototype. They are listed so the gap is visible rather than implied.

Dailify — Broker portal
Dailify Dashboard
Thabo Nkosi Nedford Financial · Monday 17 August 2026
Reading your desk · Updated just now

Dialling stops in 4h 12m and 218 leads are lined up for tomorrow, starting when the window opens at 09:00. The evening block is your strongest — 41% answer between 17:00 and 19:00 against 28% at midday — so I would move volume there and clear the calendar sign-in before 17:00.

You have 15 appointments this week and 13 of them are still ahead of you, worth R8 450. Three more are holding a slot while those clients reply to their SMS — you are not charged for a single one until they say yes.

Funeral Cover — KZN has been standing still for 6 days. It has 412 of the 500 leads it needs and one thing in its way: script v4 is waiting for your signature. Approve it and I can start dialling that list tomorrow morning.

Monday 17 – Sunday 23 August 2026

15 confirmed · R9 750 booked · 3 holding a slot
Mon Today
17
3 appts · R1 950
Tue
18
3 appts · R1 950
Wed
19
3 appts · R1 950
Thu
20
2 appts · R1 300
Fri
21
3 appts · R1 950
Sat
22
1 appt · R650
Morning slots only — 09:00 to 13:00.
Sun
23
Closed
Never dials on Sundays
Confirmed — R650 charged Holding a slot — not charged, no name until confirmed Today Sunday — never dials Deeper background = more booked that day
Wallet balance
R48 250
About 74 appointments at your rate
Confirmed this month
63
18% vs July
Connect rate
31.4%
2.1pt over 7 days
Cost per appointment
R187
R14 vs last month

Where prospects drop

this week · all campaigns
Dials 412
Connected 262
Conversations > 45s 128
Booked by the agent 48
Confirmed — charged 31

Only the last row is billed. The drop from booked to confirmed is the client-YES gate — those 17 appointments cost you nothing.

Campaigns

3 total · 1 needs a decision

On the lines right now

14 lines open

In conversation Ringing Dialling

Only calls that have already passed the quality gate are named. Everything else stays anonymous until its appointment clears review.

Needs you

4 open
Google Calendar has signed you out Bookings paused

Token expired 6h ago. Nothing has been double-booked, but new appointments are queuing instead of landing in diaries.

Script v4 is waiting on your approval Blocks 1 campaign

Funeral Cover — KZN cannot start dialling until this is signed off. 412 of the 500 leads it needs are already loaded.

5 appointments are with our reviewers Being checked

Nothing comes off your wallet while they are checked, and none of them reaches your diary unless they pass. Oldest has been waiting 41 minutes.

3 appointments have no outcome yet

Met last week and never marked as sold or lost. Capturing them sharpens what the agent chases next.

What just happened

Every appointment here came from a lead who gave consent to be called. The agent said it was an AI at the start of each call, and the client confirmed the time themselves by SMS. Nothing appears on this page — and nothing comes off your wallet — until they do.

Good morning, Thabo

Monday, 17 August 2026 · 08:40

You have 6 confirmed appointments of your own this week, 2 of them today. First up is Lindiwe M. at 10:00 — in 1 h 20 m. Everything below is already verified and confirmed by the client, so you can read and go.

Your week

Meetings and briefs

6 this week · all confirmed
Today · Monday 17 August
Next up Starts in 1 h 20 m
10:00Mon 17 Aug30 min · Teams

Lindiwe M.

Sandton, Gauteng·+27 82 ••• 4417

Verified Client confirmed by SMS Thu 13 Aug, 16:22

Called Thu 13 Aug· 4 m 12 s· Retirement Annuity Q3· Positive

Your brieffrom the call
Who

38, married, two children aged 8 and 11. Sandton.

What they want

A read on the retirement annuity he holds through a previous employer and hasn't looked at in six years. He thinks he is underfunded and wants to know whether that is true.

Why now

He asked directly what happens to the RA if he changes jobs again — a move may be on the cards. He also wants the tax deductibility explained properly.

Expect

Fee sensitivity. A friend of his "got burned on fees", so deal with costs early and openly rather than waiting for him to raise it.

Bring
  • His current RA statement
  • Fee comparison
"I don't want another product I don't understand." Lindiwe M., 3 m 06 s into the call
0:004:12
14:30Mon 17 Aug30 min · Teams

Naledi T.

Umhlanga, KZN·+27 83 ••• 1190

Verified Client confirmed by SMS Fri 14 Aug, 11:05

Called Fri 14 Aug· 3 m 48 s· Life Cover — Gauteng· Positive

Your brieffrom the call
Who

45, self-employed. Runs a physiotherapy practice with four staff.

What they want

She has no life cover at all. But her real question was about the practice — what happens to the business and to her four staff if something happens to her.

Why now

A recent health scare in her family. She asked by name about business assurance and key person cover — this is a bigger opportunity than the life cover we called about.

Expect

Underwriting worry. She had minor surgery recently and is anxious that it will count against her. Walk her through how underwriting actually works.

Bring
  • Key person cover options
  • Underwriting process explainer
"It's not really me I'm worried about, it's the four people who work for me." Naledi, 2 m 31 s into the call
0:003:48
Tuesday 18 August
09:30Tue 18 Aug30 min · Teams

Pieter v.d.B.

Midrand, Gauteng·+27 76 ••• 5502

Verified Client confirmed by SMS Thu 13 Aug, 18:40

Called Thu 13 Aug· 5 m 02 s· Life Cover — Gauteng· Neutral

Your brieffrom the call
Who

52, senior manager at a logistics firm. Retiring in three years.

What they want

He has group life cover through work and knows it falls away when he retires. He wants to understand exactly what he can port and what he will have to replace.

Why now

Three years out, and he is planning properly. He is highly numbers-focused — he asked for specific figures twice on the call and was mildly frustrated that the AI could not give them.

Expect

Low patience for a sales pitch. He has been sold to before and felt it wasted his time. Open with a real number, not a brochure — that is the whole meeting.

Bring
  • Exact quotes for two scenarios
  • Portability rules
"I've been sold to before and it wasn't worth my time." Pieter, 4 m 18 s into the call
0:005:02
Wednesday 19 August
11:00Wed 19 Aug30 min · Teams

Johan P.

Pretoria, Gauteng·+27 71 ••• 8823

Verified — checked by a person 0.88 Approved by R. Petersen · client confirmed by SMS Fri 14 Aug, 09:12

Called Fri 14 Aug· 2 m 55 s· Retirement Annuity Q3· Positive

Your brieffrom the call
Who

34, recently promoted. Pretoria. Expect two people — she asked to bring her wife on the call.

What they want

This is the first time she has thought seriously about retirement. She asked what a retirement annuity even is, so start from the beginning.

Why now

The promotion. There is more money coming in and she wants to do something sensible with it. Low base knowledge but genuinely willing.

Expect

No objection was raised. The risk here is the opposite one — over-explaining. Keep it plain and short, and let her ask.

Bring
  • Plain-language RA basics
  • Starter contribution scenarios
"I'd like to bring my wife on the call, she's better with this stuff than me." Johan, 2 m 09 s into the call
0:002:55
Thursday 20 August
15:00Thu 20 Aug30 min · Teams

Kobus S.

Centurion, Gauteng·+27 84 ••• 7731

Verified Client confirmed by SMS Mon 10 Aug, 14:07
Moved once by the client. Was Tue 18 Aug at 15:00, now Thu 20 Aug at 15:00. He asked for the change himself and re-confirmed.

Called Mon 10 Aug· 3 m 20 s· Retirement Annuity Q3· Positive

Your brieffrom the call
Who

41, IT contractor. His income varies month to month, sometimes considerably.

What they want

He already contributes to an RA, but irregularly. He wants a structure that tolerates a variable income instead of fighting it.

Why now

He asked specifically whether he can pause contributions without a penalty. That is the question the meeting has to answer.

Expect

Resistance to a fixed debit order. Every adviser so far has pushed one and he cannot commit to it. Lead with the flexible option.

Bring
  • Flexible contribution options
  • Penalty-free pause terms
"Every adviser I've spoken to wants a fixed debit order I can't commit to." Kobus, 1 m 52 s into the call
0:003:20
Friday 21 August
10:30Fri 21 Aug30 min · Teams

Ayesha K.

Randburg, Gauteng·+27 79 ••• 3348

Verified Client confirmed by SMS Fri 14 Aug, 15:48

Called Fri 14 Aug· 4 m 40 s· Life Cover — Gauteng· Positive

Your brieffrom the call
Who

29, single, no dependants. Recently bought a flat in Randburg with a bond of R1 200 000.

What they want

Cover that settles the bond if she dies. That is the whole trigger — the bond, not family protection, so do not pitch it as family protection.

Why now

She signed for the flat recently. She is financially literate and had already done her own research before the call, referring to two competitor product types by category.

Expect

She will price-compare. She will ask why not simply take the cheapest option. Have a straight, unhedged answer ready.

Bring
  • Bond-linked cover comparison
  • Why-not-cheapest rationale
"I've read up on this already — I just want to know why yours costs more." Ayesha, 3 m 44 s into the call
0:004:40

Where you stand

Nothing needing attention here — this is just the shape of your week.

6appointments confirmed
R3 900charged this week
2outcomes still to capture
Two meetings from last week still need an outcome Grace N. (Tue 11 Aug) and Kagiso Molefe (Thu 13 Aug). A quick note on how each went keeps your reporting straight and helps us call better leads.

Everyone here gave consent to be contacted, was told at the start of the call that they were speaking to an AI assistant, and confirmed this appointment themselves by SMS. Recordings are kept for two years and are available to the client on request.

Live Retirement Annuity Q3
Nomsa Khumalo
+27 82 ••• 4417 · Sandton, GP · consent 12 Jun 2026
02:14
of 6:00 cap
Speaking: Client· Latency 310 ms· Sentiment Positive
01
Disclosed AI
02
Consent checked
03
Need qualified
04
Offering slots
05
Confirm gate

Transcript

streaming
Recording

Compliance

5 of 5
AI identity disclosed
Locked block, 00:04
Consent record on file
Form 4 · 12 Jun 2026
Not on any do-not-call list
Global + broker checked 00:01
Inside calling window
15:48 SAST, Monday
No financial advice given
Monitored continuously

Live cost

R4.18
Telephony · 2:14R1.34
Speech to textR0.51
Language modelR1.88
Text to speechR0.45
Against the R650 appointment0.6%

Slots offered

from your calendar
Thu 20 Aug · 14:30Proposed
Thu 20 Aug · 16:00Held
Fri 21 Aug · 09:30Held
A slot is only written to your calendar after the client says YES to the SMS. Until then it holds anonymously and costs you nothing.

Other lines open

13
Anonymous · Sandton
Life Cover · 00:47
Anonymous · Centurion
Retirement · 03:52
11 more calls in progress
Anonymous until their appointment clears review

Kea says she is an AI assistant in the first sentence of every call, and the call is recorded from that moment. Only leads with a consent record on file are dialled, and every number is checked against both the national and your own do-not-call list before it rings.

Your diary

August to October

Every square is a day. The more it fills in, the more you earn that day. Pick a day to see who you are meeting.

Value booked R0 to R3 250 Appointments 1 · 3 · 5 — count the dots Done Still to come Today Weekend — Saturday mornings only, never Sundays

Selected day

Monday 17 August

3 appointments
R1 950booked

The shape of it

Appointments a week

You peak this week at 19. After the week of 14 September it drops to 3 or fewer — those weeks are still open, so send more leads now if you want them filled.

Where the value sits

By campaign

All 105 appointments, August to October.

Retirement Annuity Q345R29 250
Life Cover — Gauteng37R24 050
Funeral Cover — KZN23R14 950

Retirement Annuity brings in the most, but Funeral Cover books fastest off fewer leads.

Runway

What your wallet covers

BalanceR48 250
Booked but not yet metR27 300
Appointments still fundable74
Wallet against the next 90 days62%

Campaigns pause rather than overdraw — your balance can never go negative.

Every one of these people agreed to be called. Our agent says it is an AI at the start of each call, and the person confirms the appointment by SMS before it reaches your diary. Recordings and consent records are kept for five years.

Your campaigns

3 total · 1 needs a decision

Retirement Annuity Q3

Running
Leads worked1 204 / 2 500
Booked38
Connect rate33.1%
SpendR24 700
Scriptv3 Approved

Life Cover — Gauteng

Running
Leads worked640 / 1 800
Booked25
Connect rate28.9%
SpendR16 250
Scriptv2 Approved

Funeral Cover — KZN

Blocked
Cannot launch yet. Two gates are still open, so nothing is being dialled.
Leads gathered412 / 500
Script v1 not approved
Awaiting admin review
Lead pool below minimum
412 dialable, needs 500
Wallet covers 3 appointments
Launch gate satisfied

A campaign cannot dial until its script has been approved, its lead pool has been scrubbed against both do-not-call lists, and your wallet can cover at least three appointments. Those gates are enforced by the platform, not by a setting you can turn off.

A lead without a provable consent record is never dialled. Every import is scrubbed against the national suppression list and your own do-not-call list before a single number becomes dialable.
Dialable now
3 418
Consent valid, not suppressed
Consent expiring in 30 days
212
Needs re-consent before they age out
On a do-not-call list
1 106
National 934 · yours 172
Held 90-day exclusivity
648
Worked by another broker

Recent imports

FileUploadedRowsAcceptedRejectedTop reasonStatus
ra_gauteng_aug.csv17 Aug 08:12 2 500 2 104 396 No consent column (241) Imported
life_kzn_batch2.csv14 Aug 16:40 1 800 1 512 288 On the national list (163) Imported
funeral_kzn.csv13 Aug 11:05 900 412 488 Invalid E.164 (302) Review

Suppression

How a number gets suppressed

The client asks the agent not to call again
Added within the same call, permanently
They reply STOP to any SMS
Added the moment the reply lands
They appear on the national registry
Re-checked before every dial, not just at import
You add them yourself
Your own list, applied across all your campaigns

Consent on file

100%
Web form opt-in2 611
Existing client relationship598
Partner referral, consented209

Each record keeps the source, timestamp and wording the client agreed to. Recordings and consent records are held for five years.

Retirement Annuity Q3 — v4

Awaiting approval
Locked opening — you cannot edit this
“Good {{morning/afternoon}}, may I speak with the client's name? … Hi the client's name! Just so you know, this call is recorded and I'm an AI assistant calling on behalf of your firm. You can say stop at any time and I'll remove your details. I'm helping your name, a licensed adviser, reach people in the area you picked about the product — do you have two quick minutes?”

Four things sit outside the part you write: that the caller is an AI, that the call is recorded, the offer to stop and be removed, and your brokerage named as the licensed provider. None of them can be reworded, on any script, ever.

Your editable body
“I'm calling about retirement annuity options for people in the area you picked. Most of our clients are surprised how much difference a review makes. Would a quick 30-minute Teams call with one of our advisers be useful?”
Drop in a detail: These fill themselves in on every call — the agent says the real name, not the label.
Compliance lint
AI disclosure present in the locked block
No financial advice or guaranteed returns
Opt-out path offered before the close
“Best rates” is a comparison you would have to prove You wrote: we get the best rates. Saying you beat other firms is a claim the FSCA can ask you to back up with figures. Most brokers just say what the review does instead. Suggested wording a review that checks what you are paying now Selected
Pieter · en-ZA male
Anna · en-ZA neutral

Preview the voice before you submit — the version you approve is the voice that dials.

Version history

v4 · todayIn review
v3 · 28 JulLive
v2 · 14 JulRetired
v1 · 02 JulRejected

Funeral Cover — KZN

Blocking

Script v1 has never been approved, so this campaign has not dialled a single number. 412 of the 500 leads it needs are already loaded.

Reports

1 July – 17 August

Confirmed appts
63
vs 48 last period
Show rate
71%
4 pts
Sold / quoted
18 / 29
from 45 held meetings
Cost per sale
R2 275
63 × R650 ÷ 18 sold

Funnel — where prospects drop

Dials 837
Connected 532
Conversations > 45s 260
Booked by the agent 98
Confirmed 63
Showed 45
Sold 18

By campaign

CampaignConfirmedShowSoldCost per sale
Retirement Annuity Q33874%12R2 058
Life Cover — Gauteng1963%5R2 470
Funeral Cover — KZN675%1R3 900

Outcome mix: Sold 41% · Quoted 23% · Follow-up 14% · Not interested 14% · No-show 8%.

Inbox

3 unread

New confirmed appointment — Grace N., Fri 10:00
Life cover · recording ready · 8 min ago
Script v4 — changes requested
“Please soften the second question…” · 2h ago
2 meetings still need outcomes
Pieter v.d.B. & Marie L. — Mon 17 Aug
Dispute #D-102 resolved — R650 refunded
No-show upheld from the recording trail · yesterday
Weekly digest — 15 confirmed, 71% show rate
Your best week so far · Mon 06:00

Which of these reach you by SMS, email or in-app is set in Settings → Notifications.

Support & disputes

first response under 2 hours in business hours

New ticket

Your tickets

RefSubjectStatusUpdated
#T-3311Reminder SMS arrived late In progress 2h ago
#T-3298Invoice re-issue Resolved Fri

Your disputes

RefAppointmentStatusOutcome
#D-102APT-2210 · no-show Resolved R650 refunded

Instant answers

Dispute timeline: raised → evidence reviewed (recording + verification trail) → decision within 2 working days → refund to your wallet if upheld.

Balance
R48 250
About 74 appointments
Spent this month
R40 950
63 appointments
Your rate
R650
Per confirmed appointment
On hold
R1 950
3 appointments awaiting a client YES

Ledger

Append-only
WhenEntryReferenceAmountBalance
17 Aug 09:32Appointment chargeLindiwe M. · APT-4417− R650R48 250
14 Aug 15:48Appointment chargeAyesha K. · APT-3348− R650R48 900
14 Aug 11:05Refund — client no-showGrace N. · APT-2210+ R650R49 550
13 Aug 16:40Appointment chargePieter v.d.B. · APT-5502− R650R48 900
13 Aug 08:00Top-up — PayFastITN 8841-2290 · VAT invoice+ R47 600R49 550
1 Aug 00:00Opening balancecarried forward · 3 appointments of creditR1 950
You are charged R650 only when an appointment has passed our quality check and the client has replied YES to their SMS. An appointment that fails either one never reaches this ledger.

Rate & billing rules

Your rate R650 per confirmed appointment · effective 1 June 2026
Charged when an appointment passes QA and the client replies YES — never before
No-shows free re-engagement · dispute resolved within 2 working days
Credits never expire · refundable on account closure

Top up

Credits added to your walletR25 000.00
VAT at 15%R3 750.00
Total charged todayR28 750.00

Buys about 38 appointments at your R650 rate.

Card, Instant EFT or Capitec Pay. VAT invoice issued automatically.

Auto top-up

On
Trigger at5 appointments left
Top-up amountR25 000
Monthly ceilingR100 000

Campaigns pause rather than overdraw. Your balance can never go negative.

Who gets the appointments

Four seats on this account. Appointments are shared out by the rule you set below.

Seats

Each seat sees only their own appointments and recordings.
Adviser Role This week Daily cap Status Actions

How appointments are shared out

A cap is a promise, not a target. When an adviser reaches their daily cap the agent stops offering their diary and moves to the next person. Nobody gets a Tuesday with nine meetings on it.

Every appointment is booked in the name of the brokerage, under its FSP licence — not the individual adviser's. Whoever it lands with, the caller has already said which company they are calling on behalf of.
Google Calendar has signed you out. Bookings to that calendar are paused — new appointments are queuing rather than landing in a diary. Nothing has been double-booked.

Microsoft 365

Connected
Accountthabo@nedford.co.za
Teams meetingsCreating
Last sync2 minutes ago

Google Calendar

Reconnect needed
Your token expired 6 hours ago. Bookings to this calendar are paused until you sign in again.

Providers

5 of 5 normal
Telephony · Utility ConnectNormal
Payments · PayFastNormal
SMSNormal
SpeechNormal
Language modelNormal

Do-not-call sources

In sync
National registryRefreshed 04:00 today
Your own list172 numbers
Checked beforeEvery single dial

A number that lands on either list stops being dialled immediately, across every campaign you run.

/* Heading scale was inverted: 26px over a two-row table, against 14px on the card that asks for input. Bring the table headings down to card-title size so weight follows importance. */ /* !important because polish.py sets .sec-h h2 to 26px globally and lands later in the cascade; this is a deliberate per-screen exception, not a change to the global scale. */ #p-support .sec-h h2{ font-size:15px!important;font-weight:640;letter-spacing:-.012em;line-height:1.3; } #p-support .sec-h{margin:24px 0 10px} /* Under the two-column top row the tables have no right-hand sibling, so a 628px measure inside a 984px pane read as an unfinished grid. */ #p-support .split>div:first-child{min-width:0} #p-support .tblwrap{grid-column:1 / -1} /* Both selects rendered as dead text inputs. The earlier chevron rule put a single ::after on .inv — the CONTAINER holding both fields — so one pseudo-element served two selects and neither got an indicator. The chevron belongs on the field wrapper, once per select. */ #p-support .f{position:relative} #p-support .f::after{ /* content is set on a shared .f::after elsewhere; restate it here or the pseudo-element renders the literal string rather than a chevron box. */ content:""!important;position:absolute;right:12px;top:34px; width:7px;height:7px; border-right:1.5px solid var(--mut);border-bottom:1.5px solid var(--mut); transform:rotate(45deg);pointer-events:none;opacity:0; } #p-support .f:has(select)::after{opacity:1} #p-support .f select{padding-right:32px}