Kulcare Docs
DeveloperConnect

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 from components/profile/completenessSignals.ts. The card is components/practitioner-profile/ProfileStrengthCard.tsx. The plan is docs/plans/2026-10-11-feat-connect-profile-completeness-plan.md on branch feat/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.

ProfileWho holds itNeeded to be foundRecommended
AccountEvery userNone. An account is not listed.Email, verified email, photo
FacilityOwner or admin of the open facilityAddress, State (both in person only), phone, primary specialty, opening hoursLogo, description, facility email, other specialties, service level
PractitionerA user with is_practitionerListed in search, an active facility role, primary specialty, a council registration, verification documents sentBio, photo, qualifications, languages, years of experience, headline, website or LinkedIn, education, work history, HPR ID
StaffA staff member who is not a practitionerNone. A staff work profile is never listed.Bio, photo, languages, qualifications, work history, education
VendorA vendorListed in search, category, intro, at least one offeringPhoto, business name, headline, availability

How the needed items are checked

ItemDone when
Facility: addressAddress 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: StateThe saved location has a State. A virtual-only facility has no address or State item.
Facility: phoneAt least one phone number
Facility: primary specialtyThe facility has a primary specialty
Facility: opening hoursThe facility has an hours preset
Practitioner: listed in searchprofile.listing.live is true on the Connect profile
Practitioner: active facility roleThe Connect profile has at least one role type. Only a facility invite makes a role.
Practitioner: primary specialtyThe Connect profile has a primary specialty. Not counted for a non-doctor role set, which has no specialty picker.
Practitioner: registrationAt least one registration (GET /identity/my/registrations)
Practitioner: documentsVerification status is pending or verified
Vendor: listed in searchprofile.listing.live is true
Vendor: categoryThe vendor record has a service category
Vendor: introThe vendor record has a bio
Vendor: offeringThe 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

ItemPage and sectionControl
EmailMy profile, Your accountEmail field
Verified emailMy profile, Your accountVerify email (the email field when there is no email)
PhotoMy profile, Your accountPhoto

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.

ItemSectionControl
AddressAddress, and About this facility for CityThe first empty field of address line 1, City and Postal code
StateAddressState
PhoneContactAdd number
Primary specialtyAbout this facilityPrimary specialty
Opening hoursOperationsWorking hours
LogoIdentity (the header card)Logo
DescriptionAboutDescription
Facility emailContactEmail address
Other specialtiesAbout this facilityOther specialties
Service levelOperationsService 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

ItemSection on My profileControl
Listed in searchVisibilityThe Visibility panel
Active facility roleFacilitiesThe Facilities card. A facility admin must send an invite.
Primary specialtySpecialtiesPrimary specialty
RegistrationRegistrationsThe Registrations card
DocumentsVerification documentsThe Verification documents card
BioAbout youBio
PhotoThe photo card at the topPhoto
QualificationsCredentialsQualifications
LanguagesAbout youLanguages
Years of experienceAbout youYears of experience
HeadlineHeadline and linksHeadline
Website or LinkedInHeadline and linksWebsite
EducationEducationThe Education card
Work historyWork historyThe Work history card
HPR IDAbout youHPR ID

Staff

ItemSection on My profileControl
BioAboutThe About card
PhotoYour accountPhoto
LanguagesAboutThe About card
QualificationsAboutThe About card
Work historyWork historyThe Work history card. Only jobs the staff member added count. Kulcare rows do not.
EducationEducationThe Education card

Vendor

ItemWhereControl
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
CategoryMy profile, IdentityCategory
IntroMy profile, Public profileBio
Offering/connect/packages ("Add a class or package")The offerings page
PhotoMy profile, the header card (edit mode)Photo button
Business nameMy profile, IdentityRegistered business name (optional)
HeadlineMy profile, Public profileHeadline
Availability/connect/availabilityThe availability page

Where the cards show

PageCards, in page order
Practitioner My profile"Profile strength" (practitioner), the facility card, "Account strength" (no photo item)
Practitioner My profile, owner with no practitioner recordThe facility card, "Account strength"
Staff My profile"Profile strength" (staff), the facility card, "Account strength" (no photo item)
Staff My profile, no staff row yetThe 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.

On this page