Profile completeness
Audience: support, product, QA and engineers who must know why a profile is not found in search, and where the user fixes each missing item.
TL;DR: every profile a user holds has a list of items. Each item is "Needed to be found" or "Recommended". The percentage counts both tiers. Every item links to the field that fixes it. The account and staff profiles are never listed, so they have no needed items. The dashboard and the profile pages read the same model, so they always agree.
Source: PR #2636 (Connect practice phase 2). The model is
frontend/apps/connect/src/components/identity/profileCompleteness.ts. The signals come fromcomponents/profile/completenessSignals.ts. The card iscomponents/practitioner-profile/ProfileStrengthCard.tsx. The plan isdocs/plans/2026-10-11-feat-connect-profile-completeness-plan.mdon branchfeat/connect-practice-phase2.Change ahead: ADR 006 changes the facility phone and email items. When that build ships, a phone counts only when it is verified, and the email counts only when it is verified.
Related: Connect onboarding by role
The rules
- Two tiers. "Needed to be found" items come first, then "Recommended" items. The percentage is done items divided by all counted items, both tiers. A profile with nothing to count is 100%.
- Saved records only. The card reads the saved record, not the form. An item ticks only after a save lands. The card stays on screen in edit mode.
- Unknown is not missing. An item whose record is not loaded yet, or failed to load, does not count. When a read failed, the card says "We could not check every item here. Try again later." and not "Everything here is in place."
- Only items with a screen count. Facility registration and licence numbers, the photo gallery, consultation fees and facility verification have no Connect screen yet, so they do not count.
- Each item is a link. The link opens the page, opens edit mode when the field needs it, scrolls the
section into view and puts focus on the control (
useCompletenessLink).
What each role must complete
A user sees one card for each profile they hold, plus the account card. An owner who sees patients holds a facility profile and a practitioner profile.
| Profile | Who holds it | Needed to be found | Recommended |
|---|---|---|---|
| Account | Every user | None. An account is not listed. | Email, verified email, photo |
| Facility | Owner or admin of the open facility | Address, State (both in person only), phone, primary specialty, opening hours | Logo, description, facility email, other specialties, service level |
| Practitioner | A user with is_practitioner | Listed in search, an active facility role, primary specialty, a council registration, verification documents sent | Bio, photo, qualifications, languages, years of experience, headline, website or LinkedIn, education, work history, HPR ID |
| Staff | A staff member who is not a practitioner | None. A staff work profile is never listed. | Bio, photo, languages, qualifications, work history, education |
| Vendor | A vendor | Listed in search, category, intro, at least one offering | Photo, business name, headline, availability |
How the needed items are checked
| Item | Done when |
|---|---|
| Facility: address | Address line 1, city and postal code are all on the saved location. The parts that onboarding kept (onboarding_address) do not count until a save writes them to the location. |
| Facility: State | The saved location has a State. A virtual-only facility has no address or State item. |
| Facility: phone | At least one phone number |
| Facility: primary specialty | The facility has a primary specialty |
| Facility: opening hours | The facility has an hours preset |
| Practitioner: listed in search | profile.listing.live is true on the Connect profile |
| Practitioner: active facility role | The Connect profile has at least one role type. Only a facility invite makes a role. |
| Practitioner: primary specialty | The Connect profile has a primary specialty. Not counted for a non-doctor role set, which has no specialty picker. |
| Practitioner: registration | At least one registration (GET /identity/my/registrations) |
| Practitioner: documents | Verification status is pending or verified |
| Vendor: listed in search | profile.listing.live is true |
| Vendor: category | The vendor record has a service category |
| Vendor: intro | The vendor record has a bio |
| Vendor: offering | The vendor has at least one active package |
listing.live comes from Connect::ProfessionalProfile#listing_status. A listing is not live when the
profile is delisted, when "Show in search" is off, or when it is not public. A vendor listing also
waits for an active payout account and an active vendor status.
The account card does not show the account photo when the user also has a practitioner, staff or vendor profile. It is the same photo, and an item shows in one place only.
Where each item is fixed
All profile pages are at /connect/profile, except the facility page. The page shown there depends on
the role: vendor, staff (not a practitioner), or practitioner.
Account
| Item | Page and section | Control |
|---|---|---|
| My profile, Your account | Email field | |
| Verified email | My profile, Your account | Verify email (the email field when there is no email) |
| Photo | My profile, Your account | Photo |
The vendor page has no "Your account" card. On it, the account links go to the Identity section, which holds the email. The photo button is on the header card, in edit mode.
Facility
The facility page is /connect/facility/profile, or /connect/facility/:id/profile for a facility
opened by id.
| Item | Section | Control |
|---|---|---|
| Address | Address, and About this facility for City | The first empty field of address line 1, City and Postal code |
| State | Address | State |
| Phone | Contact | Add number |
| Primary specialty | About this facility | Primary specialty |
| Opening hours | Operations | Working hours |
| Logo | Identity (the header card) | Logo |
| Description | About | Description |
| Facility email | Contact | Email address |
| Other specialties | About this facility | Other specialties |
| Service level | Operations | Service level |
A save that changes the address checks State. The error reads "Add the state. The address needs it." A save that does not change the address does not check State.
Practitioner
| Item | Section on My profile | Control |
|---|---|---|
| Listed in search | Visibility | The Visibility panel |
| Active facility role | Facilities | The Facilities card. A facility admin must send an invite. |
| Primary specialty | Specialties | Primary specialty |
| Registration | Registrations | The Registrations card |
| Documents | Verification documents | The Verification documents card |
| Bio | About you | Bio |
| Photo | The photo card at the top | Photo |
| Qualifications | Credentials | Qualifications |
| Languages | About you | Languages |
| Years of experience | About you | Years of experience |
| Headline | Headline and links | Headline |
| Website or LinkedIn | Headline and links | Website |
| Education | Education | The Education card |
| Work history | Work history | The Work history card |
| HPR ID | About you | HPR ID |
Staff
| Item | Section on My profile | Control |
|---|---|---|
| Bio | About | The About card |
| Photo | Your account | Photo |
| Languages | About | The About card |
| Qualifications | About | The About card |
| Work history | Work history | The Work history card. Only jobs the staff member added count. Kulcare rows do not. |
| Education | Education | The Education card |
Vendor
| Item | Where | Control |
|---|---|---|
| Listed in search | /connect/payments while the listing waits for payments ("Turn on payments to go live"). Otherwise the Visibility panel on My profile ("Get listed in search"). | Payout setup, or the Visibility panel |
| Category | My profile, Identity | Category |
| Intro | My profile, Public profile | Bio |
| Offering | /connect/packages ("Add a class or package") | The offerings page |
| Photo | My profile, the header card (edit mode) | Photo button |
| Business name | My profile, Identity | Registered business name (optional) |
| Headline | My profile, Public profile | Headline |
| Availability | /connect/availability | The availability page |
Where the cards show
| Page | Cards, in page order |
|---|---|
| Practitioner My profile | "Profile strength" (practitioner), the facility card, "Account strength" (no photo item) |
| Practitioner My profile, owner with no practitioner record | The facility card, "Account strength" |
| Staff My profile | "Profile strength" (staff), the facility card, "Account strength" (no photo item) |
| Staff My profile, no staff row yet | The facility card, "Account strength". The page says "Your work profile starts at your facility". |
| Vendor My profile | "Profile strength" (vendor), "Account strength" (no photo item) |
| Facility profile | "Facility profile strength" |
The facility card on My profile has three states:
- The open facility is one the user runs (owner or admin): its missing items, with the facility name as the title.
- The user runs a facility, but none is open: "Choose a facility to see what is missing", with a link
to
/connect/facilities. - The user runs no facility: no card.
The dashboard
The dashboard setup card has one task for each profile the user holds, plus "Your account". A task shows its title ("Vendy Family Care", "Your practitioner profile", "Your work profile", "Your vendor profile", "Your account"), what is left ("4 left: State, phone, logo, description"), a progress bar and an action that opens the first missing item.
- Order. Profile tasks with a missing needed item come first. Then the other tasks (for example a signature, connections, a facility to join, a plan, or a skipped step). Then profile tasks with only recommended items. Ties go facility, then the user's own profile, then the account.
- The main button, once onboarding is settled ("Finish setting up"), goes to the first missing needed item, else the next other task, else the first recommended item. With nothing left, it does not show.
- One place for each missing thing. A skipped onboarding step that a profile task covers shows only inside that task. See Connect onboarding by role.
- During "Add a facility" the facility task stays, but it does not cover the skipped Address and Operations. They belong to the new facility, so they keep their onboarding links.
While onboarding is not finished, or a skipped step is left that no profile task covers, the card is "Continue setup" and shows the onboarding percentage instead. A skipped Verify with documents sent does not count.