WebVegas · client product surface

The client dashboard

This is the surface the client actually sees. They never log in to design, write copy, or touch the build. They glance here for results: leads, calls answered, reviews, keyword rank, bookings, invoices. Every view on this board is assembled from the locked WebVegas tokens and the same components as the gallery: the light .wv-shell, stat tiles, tables, pills, banners and Monty. Charts are hand-drawn inline SVG in the locked palette. All figures are sample data, labeled as such.

Tier 1: site + maintenance Tier 2: + AI Front Desk · SEO/AEO · keyword dashboard Cool-white #F9F9FC ground Sunset = primary series · sage = secondary

Overview / home

The default landing view. App shell (light mist sidebar, light main), top bar with page title + search + account chip + the one sunset CTA, a four-up KPI row, and the day's lead feed. The active nav item is the only sunset moment in the chrome; the "Request reviews" CTA is the one glowing element in the body.

Full shell: Overview

Components: .wv-shell · .wv-stat (+ sparkline) · .wv-listrow · .wv-badge · .wv-btn--primary. Data props: businessName, kpis[], leads[], plan.

Good morning

Desert Shine Cleaning

DS
Desert Shine
Owner

call Leads

34

arrow_upward 22% vs last month

support_agent Calls answered

100%

arrow_upward Monty caught 9

star Reviews

4.9

arrow_upward 6 new this month

trending_up Avg rank

#3.2

arrow_upward Up 2 spots (lower = better)

bolt Today's leads

Sample data
MG
Maria G. booked a deep clean
via website chat · 2h ago
Booked
JT
James T. called from your site
Missed call · Monty texted him back
PN
Priya N. asked about move-out cleans
contact form · 4h ago
New

verified Your site

check_circle
Live and getting found. 312 visits this month.
Monty

Front desk handled 3 calls

while you were on a job

On

Tap Leads to read what they asked and what got booked.

KPI stat card: anatomy

Single card. Data props: label, icon, value, delta (up=sage / down=coral / flat=muted), spark[]. Sparkline is inline SVG in the locked palette.

call Leads

34

arrow_upward 22%

cancel_presentation Bounce

31%

arrow_downward 5% (down is good)

schedule Avg reply

12s

remove Steady

paid Booked value

$5.4k

arrow_upward 18%

Charts

Hand-drawn inline SVG, no chart library, no script. Locked chart style: sunset is the primary series, sage the secondary comparison, navy #222F3E for axis + labels, soft --light gridlines, rounded bar ends. One loud series per chart; everything else stays quiet. Every chart carries a "Sample data" tag.

show_chart Leads over time

Sample data
40200 W1W2W3W4W5Now
This month Last month

bar_chart Calls per day

Sample data
1240 MTWTFSToday
Calls answered Today (so far)

donut_large Lead source split

Sample data
112 leads
Website chat 48%
Phone calls 27%
Contact form 17%
Reviews 8%

format_list_numbered Keyword rank

Sample data
house cleaning las vegas maid service henderson deep clean near me move out cleaning #2#3#5#8
Top 3 Climbing

Leads table

The full leads view. Reuses .wv-table (rounded outer frame, flat inner rows, hover highlight) with sortable-look headers, status pills, and a per-row action. Clicking a row opens the lead detail drawer (next section).

Components: .wv-table · .wv-badge (status) · .wv-btn--tertiary. Data props: columns[], rows[], sortKey.

contacts All leads

Sample data
Name Source Service Status Date arrow_downward
Maria GomezWebsite chatDeep cleanBookedToday, 9:14a
James TranPhone callWeeklyNewToday, 8:02a
Priya NairContact formMove-outFollowed upYesterday
Dana WellsWebsite chatOne-timeBookedYesterday
Carlos RuizPhone callOfficeNo answerMon

Lead detail drawer

The slide-over that opens from a lead row. Contact block (tap-to-call / tap-to-email), an activity timeline (newest first, hot events flagged sunset), a call-recording affordance, and a notes field. Shown statically here over a dimmed scrim so the catalog renders it without script.

Components: drawer scaffold + .wv-badge · .wv-input · .wv-btn--primary. Data props: lead{}, timeline[], recordingUrl, notes.

Reviews widget

Aggregate score, star rating, recent reviews (labeled sample data), and the one-tap "Request a review" action that fires the review-request sequence. The sunset CTA is the single loud moment.

Components: .dx-stars · .wv-card · .wv-btn--primary. Data props: avg, count, reviews[].

star Your reviews

Sample data
4.9
starstarstarstarstar_half
128 Google reviews
5star
4star
3star

forum Recent

Sample data
Lauren P.starstarstarstarstar2d

"Booked in two minutes from their site. Place looks brand new. Booking again."

Marcus D.starstarstarstarstar5d

"Called after hours, got a text right back and a slot the next morning. Easy."

Teresa V.starstarstarstarstar1w

"Great clean. Would have liked a reminder text the day before, otherwise perfect."

Keyword / rank widget Tier 2

The keyword dashboard, Tier 2 only. Each tracked keyword shows its current rank, a trend arrow (up = climbing, green; down = slipping, coral), and a sunset progress bar where a longer bar means a better position. Plain-language framing: the client reads "where you show up," not SEO jargon.

Components: .dx-kw rows + trend arrows. Data props: keywords[] (term, rank, trend, volume).

trending_up Where you show up on Google

Sample data
house cleaning las vegas#2 arrow_upward1
880 searches / mo
maid service henderson#3 arrow_upward2
390 searches / mo
deep clean near me#5 remove
1,200 searches / mo
move out cleaning las vegas#8 arrow_downward1
210 searches / mo

AI Front Desk panel Tier 2

The Tier 2 value-add, translated to plain benefit. Not "AI" as a feature. It is "answered while you worked." The panel shows a real transcript preview (a missed call Monty caught and booked), the on/off toggle, and a running count. Light mist surface, sunset for the AI's own replies. The client reads outcomes, not a chatbot.

Components: .dx-ai · .dx-toggle (CSS-only) · .dx-bubble · Monty. Data props: enabled, transcript[], caughtCount.

Monty

Monty answered while you worked

Missed call · 7:48 PM · booked

Live
Hi, do you do move-out cleans? Need one this Friday.
We do. Friday has a 10 AM and a 1 PM open. Want me to hold one for you?
10 works.
Booked for Fri 10 AM. You'll get a text confirmation. Anything else?
event_available Job booked, added to your calendar.

toggle_on Front desk

Answer calls & chats for me
When you can't pick up, Monty does.
After-hours only
Let it run nights and weekends.

support_agent Caught this month

23 calls & chats

arrow_upward 9 booked into jobs · sample data

Bookings / calendar widget

Upcoming jobs and a mini month strip. Days with a job carry a quiet sage dot; today is the one sunset moment. The list reads as a plain schedule, not a calendar app.

Components: .dx-monthstrip · .dx-booking · .wv-badge. Data props: month, daysWithJobs[], upcoming[].

calendar_month June

Sample data
S
M
T
W
T
F
S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Has a job Today

event_upcoming Today's jobs

Sample data
10:00a
Deep clean
Maria Gomez · Summerlin
Confirmed
1:00p
Move-out clean
Friday hold · via Front Desk
Pending
3:30p
Weekly
Dana Wells · Henderson
Confirmed

Billing / invoice card

Plan, next charge, and the invoice history, Stripe-style and read-only. Month-to-month, no contracts (the offer). The plan badge reflects Tier 1 or Tier 2; the price traces to the locked pricing.

Components: .wv-card · .wv-badge--sunset · .dx-inv rows · .wv-btn--secondary. Data props: plan, price, nextCharge, invoices[].

Tier 2 · Website + AI Front Desk
$297 / month
Next charge
Jul 1, 2026
credit_card Visa ending 4242 · Update
verified_user
Month to month. No contract. Cancel anytime, and your site stays yours.

receipt_long Invoices

Sample data
check_circleJun 1, 2026Tier 2 monthly$297.00PDF
check_circleMay 1, 2026Tier 2 monthly$297.00PDF
check_circleApr 15, 2026Site build (one-time)$797.00PDF

States

The states that separate a 6/10 product from an 8/10 one. Empty (Monty, never a cold "no data"), loading skeleton (token-driven shimmer, CSS-only), error (Monty, "we're on it"), and the offline / install affordances.

Empty state

Component: .wv-empty + Monty. One warm line, one action. Never "0 results."

Monty waving

No leads yet. Here's what happens next.

Your site is live and getting found. The first lead lands right here. Want to kick things off with a review request?

Loading skeleton

Component: .dx-skel, token-driven shimmer, CSS-only (wv-shimmer keyframe), respects reduced-motion. Mirrors the real layout's shape.

Error state

Component: .wv-empty + Monty + .wv-btn--secondary. Reassuring, not alarming. We own the problem.

Monty

Something broke. We're on it.

Your dashboard hit a snag loading this. Nothing's lost, and our team's already been pinged. Give it a moment and try again.

Offline & install (PWA)

Components: .dx-offline (mist pill, amber icon) · .dx-pwa (dashed sunset border). Connection + add-to-home affordances.

wifi_off You're offline. Showing your last saved view, and we'll refresh when you're back.
install_mobile
Add WebVegas to your home screen
Open your dashboard in one tap, like an app.

Mobile dashboard

The client checks this on a phone between jobs. The shell collapses to stacked cards with a fixed bottom nav; the same KPIs, the same lead feed, the same sunset CTA. This is where most clients actually live.

Components: phone frame + .dx-mini-stat · .wv-listrow · .dx-phone__nav. Same tokens, responsive collapse.

WebVegas
DS
Good morning, Desert Shine
call Leads
34
arrow_upward 22%
star Rating
4.9
arrow_upward 6 new
support_agent Answered
100%
remove Monty: 9
trending_up Avg rank
#3.2
arrow_upward 2
Monty

Monty caught 3 calls

while you were out

Today's leads · sample data
MG
Maria G. booked
chat · 2h
Booked
JT
James T. called
missed · texted back
New