Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/hack4impact-umd/breastfeeding-center-gw/llms.txt

Use this file to discover all available pages before exploring further.

Client profiles in the BCGW Dashboard are unified across all booking and commerce services. Syncing pulls recent customer data from an external service and merges it into the Client collection in Firestore. Existing records are updated; new emails create new documents.
Jane clients are added via file upload, not via sync. See Upload Jane Appointment and Client Data for details.

Triggering a sync

Syncs are triggered manually from the Client List page. Open the Sync dropdown and select the service you want to sync. Each sync covers the last 30 days by default. The date range can be adjusted by passing startDate and endDate in the request body (ISO format).

Sync sources

Acuity

The Acuity sync fetches all appointments within the configured date range from the Acuity Scheduling API. For each appointment, the client’s email is extracted and used to look up an existing Firestore record.
  • If a record with that email exists, it is updated with any new information from Acuity.
  • If no record exists, a new client document is created.
Baby date-of-birth data from Acuity form fields is also captured and stored in the client’s baby array when available.

Squarespace

The Squarespace sync fetches orders from the Squarespace Commerce API within the date range, then resolves the unique customer profiles behind those orders.
  • Each customer profile is matched to an existing Firestore client by email.
  • On a match, the client’s squarespaceCustomerId field is set.
  • Unmatched emails create new client documents with the Squarespace profile data.

Booqable

The Booqable sync fetches rental records via the Stripe API within the date range. Booqable uses Stripe as its payment processor, so customer data is retrieved from Stripe customer objects.
  • Each rental is deduplicated by Stripe customer ID before matching.
  • Customers are matched to existing Firestore clients by email.
  • On a match, the client’s stripeId field is set.
  • Unmatched emails create new client documents.

Acuity webhook

In addition to manual syncs, Acuity can push real-time updates to the dashboard via a webhook. When an appointment is created or changed in Acuity, the webhook endpoint receives the event and immediately syncs the affected client record to Firestore — no manual trigger required. The webhook only fires on appointment.changed events. Other Acuity event types are received but do not trigger a sync.

Client matching

All three sync sources use the same matching strategy: email address. The sync process:
  1. Loads all existing clients from Firestore.
  2. Builds a map of email → primary client document.
  3. For each incoming profile, checks whether the email is already in the map.
  4. Updates the existing document or creates a new one.
Associated clients (those linked to a primary client record) are also included in the email lookup, so a co-attendee’s external service ID can be recorded on the correct sub-record.

Build docs developers (and LLMs) love