Beauty Affairs HK

Theme settings

Every settings group in config/settings_schema.json, which appears under the gear icon in the theme editor, and the code that reads it.

The theme editor writes setting values to config/settings_data.json. Do not edit that file by hand, because the theme pull workflow overwrites it.

Read a setting in Liquid as settings.<id>.

Groups

GroupSettingsOwner
SEO - Page Titles20Plug in SEO app
SEO - Meta Descriptions17Plug in SEO app
SEO - Exclusions1Plug in SEO app
SEO - Structured Data4Plug in SEO app
Brand4Prestige
Colors21Prestige
Typography6Prestige, plus medispa_fml
Animation4Prestige
Search1Prestige
Rewards Tiers36Custom
Products grid6Prestige
Products39Prestige, plus the purchase gift settings
Cart14Prestige, plus gift and sample thresholds
Social media11Prestige
WhatsApp7Custom
Favicon1Prestige
Development Mode1Legacy. See the warning below
GTM Tracking2Custom
Klaviyo12Custom
Medispa20Custom
Medispa - Terms & Conditions Popup2Custom
PDP - Two Up Section - General Settings2Custom
PDP - Two Up Section - First6Custom
PDP - Two Up Section - Second6Custom
Medispa Deposit6Custom
Medispa PDP - Meet our team2Custom
Popup Manager2Custom
Need Help Finding Something Popup15Custom
Authenticity Widgets8Custom, Hong Kong specific

Leave Development Mode off

is_dev_mode, labelled "Access site through BrowserSync?", replaces the styles.css bundle with a script at /dev/main.js:

{% if settings.is_dev_mode %}
  <script type='text/javascript' src='/dev/main.js' defer></script>
{% else %}
  {%- render 'vite-tag' with 'styles.css', preload_stylesheet: true -%}
{% endif %}

That path belongs to a BrowserSync setup the project no longer uses. Turning the setting on removes the theme's stylesheet and loads a file that does not exist.

All three layouts read it, at about line 310 of each.

Rewards Tiers

The group has four tiers with the same eight settings each, plus four settings for the homepage section.

SettingNotes
tier_N_price_thresholdCart subtotal that unlocks the tier, in dollars
tier_N_titleTitle used outside the cart
tier_N_cart_titleTitle used inside the cart
tier_N_imageTier image
tier_N_subtitle_desktop, tier_N_subtitle_mobileAccept {threshold} and {threshold_money}
tier_N_encouragement_messageShown while below the threshold
tier_N_cart_encouragement_messageThe same message, inside the cart
unlock_free_bonus_title, _description, _cta, _linkThe homepage Unlock Free Bonus section

layout/theme.liquid writes these values to window.theme.cartRewardBanner, and src/components/cart-reward-banner/ reads them.

Purchase gift, in the Products group

SettingNotes
enable_product_giftMaster switch, off by default
product_gift_productProduct list
product_gift_collectionCollection the shopper chooses from
product_gift_price_thresholdDollars
product_gift_quantityUnits added
product_gift_explainer_label, _cta_label, _badge_labelProduct page wording
product_gift_modal_title, _modal_description, _skip_cta_labelGift chooser wording

layout/theme.liquid writes these values to window.theme.gift_product and window.theme.labels.product_gift_skip_cta_label, and src/components/purchase-gift-manager/ reads them.

Cart thresholds

These settings are separate from Rewards Tiers and control different wording.

SettingNotes
cart_show_free_shipping_threshold, cart_free_shipping_thresholdFree shipping message
cart_show_free_sample_threshold, cart_free_sample_threshold, cart_free_sample_collection, cart_free_sample_descriptionFree samples
cart_show_free_gift_threshold, cart_free_gift_threshold, cart_free_gift_collectionFree gifts
cart_gift_message, cart_popup_message, global_popup_titleWording
cart_type, cart_enable_notesPrestige settings

Medispa

The group holds settings for three separate features.

Live booking availability is a social proof display. Its settings are show_booking_availability, booking_availability_operating_mode, booking_availability_demo_tick_timer_secs_minimum and _maximum, booking_timeframe_days, start_date_type, booking_availability_low_threshold, booking_availability_low_copy, booking_availability_anon_name and booking_availability_user_name.

Booking toasts use show_booking_toasts, booking_toasts_lifespan_seconds, booking_toasts_timestamp_interval_seconds, booking_toasts_visible_count, booking_toasts_just_now_label, booking_toasts_copy and booking_toasts_custom_css.

Booking forms use medispa_booking_form_id, medispa_booking_form_id_mobile and medispa_zapier_webhook_url.

booking_availability_operating_mode has a demo mode, which uses the two tick timer settings to generate activity. Check which mode is selected before you treat the displayed availability as real.

Medispa Deposit

SettingNotes
medispa_deposit_amountFallback deposit, dollars
medispa_pay_in_store_label_priceFallback pay-in-clinic price, dollars
medispa_deposit_messageCart message against a deposit line
medispa_remaining_amount_line_item_labelDefault Remaining Amount
medispa_remaining_amount_line_item_value_templateAccepts {remaining_amount}
medispa_deposit_timezoneAsia/Hong_Kong

layout/theme.liquid writes these values to window.theme.labels.medispa, and snippets/medispa-calendar-config.liquid adds them to the calendar config. Product metafields override them for each treatment.

Klaviyo

SettingNotes
enable_offers_popup_pdpOffers popup on product pages
klaviyo_popup_id_desktop_pdp, klaviyo_popup_id_mobile_pdpForm IDs per device
enable_offers_popup_medispaThe same for Medispa pages
offers_cta_label_medispa, offers_display_mode_medispaTrigger wording and style
klaviyo_popup_id_desktop_medispa, klaviyo_popup_id_mobile_medispaForm IDs per device

src/entrypoints/klaviyo-popup-trigger.ts reads these through window.offerPopupConfig. It does nothing unless both the desktop and the mobile ID are set.

SettingNotes
enable_popup_managerOn by default. When off, snippets/popup-logic.liquid outputs nothing
popup_manager_blacklistOne selector,type pair per line. Type is klaviyo or custom. Hides with CSS only

Known schema problem

config/settings_schema.json contains one setting with an invalid type, which Theme Check reports as a ValidJSON error:

{ "type": "image", "id": "pluginseo_structuredDataLogo.png", "label": "Logo" }

image is not a valid setting type. The valid type is image_picker. The setting belongs to the Plug in SEO app's structured data group. The theme works with it in place, but do not copy it, and expect Theme Check to keep reporting it.

On this page