One answer to 'who works here'

A single resolver that unions the four places a builder's staff actually live and folds the same human into one row, so every screen names the same person the same way.

What it is

OrgRoster reads crew_members (field labour, usually no login), lead_distribution_reps (sales, including reps with no login), org_members (the durable role mirror) and optionally Clerk (whoever can sign in), and merges them into one list of people with role, crew, login status and every id they have been known under.

Also called: team roster · staff directory · sales reps missing from team page · one person one row

See it
One answer to 'who works here'
Day rate
$400
Days figured
10
Crew size
3
Fuel & equipment
$300
Finished 2 days early — $1,800 back to the crew
A diagram of four stores folding into one person card; the rendered result is the People tab (src/components/team/PeopleRoster.tsx). Sample data — no customer information appears here.
How it works
  1. 1Records fold on Clerk user id first, then lowercased email, then normalised name, in that order of trust.
  2. 2Merging keeps the strongest role — a crew lead who is also an admin is an admin.
  3. 3A real Clerk id claims the record so later Clerk-keyed lookups land on it, while the previous id is kept as an alias.
  4. 4Clerk reading is optional: the Team page wants it, the crew portal skips it because it runs on a phone in a field.
  5. 5Only names, roles, crew membership and work emails are returned.
Why we built it

Who works here had four different answers depending on which screen asked, and reading one of them and calling it the team is how the team page ended up with no sales reps on it. A framer who exists only as a crew member — the common case for field labour — could be handed a field link that resolved to nobody, and a crew leader's roster came back holding only the men who happened to have office accounts. One resolver folds every source into a single person, so the field link, the crew roster, the team page and the labour rollup all name the same people. It carries names, roles, crews and work emails and nothing else: no phone numbers, no pay, no rates, because pay lives on the crew record behind its own permission.

The problem
  • Four staff stores producing four different answers to who works here.
  • Duplicate rows for one human across stores.
  • Features silently excluding anyone without a login.
Sound familiar?
What you get
Every surface — Team, Settings, crew portal, payout, alerts — names the same person the same way.
People with no account are first-class members of the roster.
Sensitive fields never leave the resolver.
What's inside

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →