Projects Overview — empty states (a brand-new org, day one)

Zero-state treatment for each persona composition. The rule: the question survives, the composition survives — only the card bodies swap. No zero-filled charts, no "$0.00", no "0 at risk" walls. Each empty card names the one condition that unlocks it and deep-links the action; heroes show "—" where zero would read as data. Pattern matches the PMS empty-state vocabulary (.col-empty / .bl-empty → sym-empty-state).

Companion to proj-overview-final-screens.html · closes HANDOFF §5 "Empty / zero states" · mock for team review
Projects · Overview Employee · Maya Chen
Mon · Day one
Welcome, Maya — where are you needed today?
Open assignments
Due today
0
Blocked on you
40h
Capacity this week
My assignments
Nothing assigned to you yet
When a lead assigns you a ticket, it lands here — and you'll get a notification. Nothing for you to set up.
unlocks when a lead assigns your first ticket
My week0h planned · 40h free
Mon
Tue
Wed
Thu
Fri
Your week fills in as work is scheduled. Meanwhile, your profile drives everything — make sure your skills and working hours are right.
Review my profile →
Empty rule Reassure, don't activate. An IC on day one has nothing to do and that's correct — say so plainly. "Blocked on you: 0" stays a real zero (zero is the good answer); assignment counts show "—" because 0 would read as "you have no work" data. One soft CTA (profile), no create buttons an IC can't use.
Projects · Overview Contractor · Omar Haddad
Mon · Contract active
Welcome, Omar — what's assigned to you?
Assigned tickets
Due this week
Active
MSA · thru Dec 31
Assigned to me
No work assigned yet
Your contract is live and your client contact is Dan Ortiz. Tickets assigned to you appear here — you only ever see your own scope.
unlocks when the project lead assigns you a ticket
Logging time
Once you have a ticket, log hours from the ticket itself — approved logs feed the client's invoice, so there's nothing to configure on your side.
Empty rule Confirm the relationship, then wait. A contractor's day-one anxiety is "am I set up correctly?" — so the empty state answers exactly that: contract status, who assigns work, how billing flows. Scope stays assigned-only even here: no org names, no project list, no team info.
Projects · Overview PM / Manager · Dan Ortiz
Mon · No projects yet
Welcome, Dan — are your projects on track?
At risk
Decisions pending
Blockers
Get to your first health signal3 steps
2
Add tickets and your team
Even rough tickets — estimates pre-fill from team history; capacity and blockers start tracking immediately.
3
Team logs a week of time
Sprint burn, timeline slip and the margin health badge switch on. Margin also needs a budget — finance or you can add one.
Delivery health · projects I leadpreview
What this will look like
·
Your first project
On track · sprint burn · blockers
Healthy
·
Your second project
Timeline · scope · key-person risk
— badge pending
unlocks at step 3 · badge needs a budget + logged time
Empty rule Activate — this persona owns the fix. The PM is the only persona whose empty state is their own to resolve, so it gets the one primary CTA on the page and a 3-step ladder that names when each signal switches on. The ghost preview teaches the health card (and the badge) before any data exists — no zero-filled charts.
Projects · Overview Finance / Owner · Rae S.
Portfolio · No cost data yet
Welcome, Rae — which projects make money?
Portfolio margin
Burn to date
vs forecast
Get to your first margin number1 of 3 done
People & loaded rates
14 people synced from HR with loaded cost rates.
3
Time accrues against budgets
After the first week of logged time, burn, margin and the forecast line appear — and the margin-alert threshold becomes worth setting.
Worst-margin projectspreview
Margin appears after the first week of logged time
Numbers only render when they're real — you'll never see a $0.00 that means "no data." Until then this card stays quiet.
unlocks at step 3 · needs budgets + logged time
Empty rule Setup is the content. Finance's day-one job IS configuration, so the checklist replaces the money cards as the composition's centerpiece — with real progress (HR sync already done). Crucially: dashes, never fake dollars. "$0 burn · 0% margin" reads as catastrophic data; "—" reads as not-yet.
The system in one line Two empty-state modes by agency: personas who wait (Employee, Contractor) get reassurance + what-happens-next; personas who build (PM, Finance) get a setup ladder with exactly one primary CTA.
Dash vs zero Show a real 0 only when zero is the good answer ("Blocked on you: 0"). Show when zero would masquerade as data ("$0 burn", "0 at risk"). Never render a chart with no data behind it.
Unlock chips are the contract Every empty card carries a mono chip naming its unlock condition. These map 1:1 to backend readiness flags (has_tickets, has_budget, has_time_logs) — the build should drive card bodies off those flags, not off row-count === 0.
Gates still hold at zero Empty states must not leak either: the PM's ghost preview shows the badge shape, never a number; the contractor's empty view names only their own contact. Fail-closed applies before data exists too.