Integrations
Every service the storefront and its orders depend on, what each is used for, and where it is configured.
The storefront talks to two ASC services on Cloud Run, a set of Zapier zaps, and several third-party apps. Most of their configuration lives outside this repository, so this page records the contract visible from here and where the rest is kept.
ASC services on Cloud Run
Both services run in Google Cloud project asc-map-project, region australia-southeast1.
asc-api-membership-pass
| Purpose | Saved children for the booking form, and membership pass use in the cart |
| Called by | The customer's browser |
| Base URL | Theme setting ASC - Membership Pass, Google Cloud API URL (gcloud_api_root) |
| Source | Private repository Conversion-Kings/asc-api-membership-pass (Hono, TypeScript) |
| In production since | 10 June 2026, replacing the gcloud-api service built from google-cloud-api/ |
| Route | Used by |
|---|---|
GET /v1/customers/{id}/children | Booking form, to list saved children |
POST /v1/customers/{id}/children/save | Booking form, to save a new child |
POST /v1/customers/{id}/membership-pass/use | Cart, to use a pass |
GET /v1/customers/{id}/membership-pass | Not called by the storefront |
DELETE /v1/customers/{id}/children/{childId} | Not called by the storefront |
GET /health | Health check |
Request bodies are JSON, base64-encoded twice and sent as text/plain. Saved children are stored as child metaobjects listed in the customer metafield children.saved_details.
shopify-zoho-integration
| Purpose | Orders and bookings into Zoho, membership purchases, booking emails, club search, camp uploads, camp swaps |
| Called by | Zapier, a daily scheduled job, the booking form, and a Shopify Admin app |
| Base URL | Built into the booking form from ZOHO_INTEGRATION_API_ENDPOINT |
| Source | Repository Conversion-Kings/asc-api-src-zoho-integration (Express, TypeScript). Version 1.13.9 at the time of writing |
| Route | Caller | Purpose |
|---|---|---|
POST /orders | Zapier | Sends a paid order to Zoho |
POST /emails | Zapier | Booking confirmation email |
POST /emails/cron | Scheduled job | 7-day and 2-day reminder emails |
POST /memberships | Zapier | Records a membership pass purchase |
PUT /memberships | Zapier | Reduces the pass balance after checkout |
GET /clubs/search | Booking form | Club name search against Zoho |
POST /form-submissions | Zapier | Tidies Hulk Forms submission data |
POST /camps | Shopify Admin app "Camp Uploader" | Creates or updates camps in Zoho |
POST /camp-swap | Shopify Admin app "Camp Swap" | Moves a participant to another camp in Shopify and Zoho |
POST /auth, /protected/bookings, GET /bookings/search | Shopify Admin app "Order Manager" | Booking push, refund, cancel and search |
GET /heartbeat | Monitoring | Returns status and version |
The Shopify Admin app that provides Camp Swap, Camp Uploader, Email Reminders by Order and Order Manager appears in both architecture diagrams, but its source code is not in any repository available to this project.
The service's own documentation is in docs/ in its repository.
Zapier
Zapier holds the triggers that connect Shopify to the integration service. None of the zaps are exported to a repository.
| Zap | Trigger | Action |
|---|---|---|
| Shopify → Zoho via API | Shopify order created | POST /orders |
| Confirmation Emails via API | Shopify order created | POST /emails |
| Membership Pass Purchase via API | Shopify order created | POST /memberships |
| Auto-archive membership products | Set in Zapier | Archives pass products after 15 minutes through the Shopify Admin API |
| Capture Form Submissions | Catch hook in theme setting form_submission_webhook | Adds the person to prospects |
| Download Brochure Flows | Catch hooks in theme settings download_brochure_webhook and download_brochure_landing_page_webhook | Emails the brochure link and, with consent, adds the person to Klaviyo |
A zap also calls PUT /memberships after checkout, but its name is not recorded anywhere in the repositories.
The Shopify → Zoho via API zap sends Zoho OAuth client details in its request body, so those credentials are stored in Zapier as well as in the service.
The code that used to run inside these zaps in 2024 is in misc/zapier-scripts/. It is kept for reference and is not what the zaps run today.
Forms
| Form | Built with | Where the data goes |
|---|---|---|
| Contact, coach recruitment, coach enquiries | Hulk Form Builder app | Hulk, plus the form_submission_webhook Zapier hook |
| Flyer and guide downloads on resource pages | Hulk Form Builder, opened from the Resources Grid section | download_brochure_landing_page_webhook Zapier hook, with the metaobject id as cardId |
| Brochure download on a camp product page | Theme section Brochure Newsletter Sub | download_brochure_webhook Zapier hook, with referrer: 'PDP' |
| Email sign-up | Klaviyo form embed | Klaviyo |
Hulk forms run in an iframe. src/js/custom.js listens for postMessage events from https://formbuilder.hulkapps.com and forwards form_submit and brochure_download events to the Zapier hooks.
Analytics and tracking
| Tool | Loaded by | Notes |
|---|---|---|
| Google Analytics 4 | Not the theme | The theme settings for Google Tag Manager and Google Ads IDs are blank. GA4 is set up in Shopify Admin, most likely through Customer Events or the Google & YouTube app |
| Shopify custom events | theme/snippets/asc-track-checkout.liquid, theme/snippets/custom-gtm-tracking.liquid | Publishes checkout_clicked from the cart and seo_page_view on combo landing pages. A Customer Events pixel is needed to forward them |
| Hotjar | Theme setting Hotjar ID | Loaded on pages using theme.liquid only, so not on product pages |
| Microsoft Clarity | Clarity app embed, plus theme/assets/clarity-tracking.js | Writes clarity_uid and clarity_session_id as cart attributes, so they appear on orders |
| Klaviyo | Klaviyo app embed | Also tags visitors to "no camps available" pages with a camp_interest_ property |
Klaviyo, Hotjar, Clarity, Google Maps and some map scripts are held back by yett until the visitor first touches the screen, clicks, types, uses the scroll wheel or moves the mouse. The block list is window.YETT_BLACKLIST near the top of both layouts.
Maps and places
| Service | Used for | Configuration |
|---|---|---|
| MapLibre GL with OpenFreeMap tiles | All camp maps | Style URL in theme/assets/map-renderer.js. No account or key |
| Google Maps link | "View in Google Maps" on the product page | Built from the location's latitude and longitude |
| Google Places | School search in the booking form | Browser key from GOOGLE_PLACES_API_KEY, set in Google Cloud |
Payments
Afterpay messaging shows under the price on product pages through theme/assets/shopify-afterpay-javascript.js. Payment itself is handled by Shopify checkout.
Zoho-side systems
These are configured in Zoho and called from Zoho functions. They are listed so their existence is known. This repository does not interact with them.
| System | Used for |
|---|---|
| Zoho Campaigns | Parent and prospect mailing lists |
| MYOB AccountRight | Supplier records for hired coaches |
| An external PHP server | SMS sending and reports from Zoho's daily functions |
Source map
| Concern | Location |
|---|---|
| API root and webhook URLs | theme/config/settings_schema.json groups ASC - Membership Pass and ASC - Webhooks, values in theme/config/settings_data.json |
| Window globals for those URLs | theme/layout/theme.liquid, theme/layout/theme.product.liquid |
| Browser calls | src/js/custom.js, src/components/ |
| Full request list | Storefront requests |
| Accounts and owners | External systems |