SHHA Fitness Admin
Dashboard Classes Calendar Check-in Attendee Management Instructors Payroll
Settings
SHHA
Dashboard Classes Calendar Check-in Attendee Management Instructors Payroll
Superadmin settings

Superadmin

Role elevation and high-impact settings. Visible only to superadmins.

Administrators

People with admin-level access to the system. Promote someone by entering their email — they must already be in the People sheet.

Test purchase

Simulates a pass purchase by running the same downstream flow a real WA payment triggers (member row, Passes row, IOU resolution, confirmation email). Bypasses the WA webhook + invoice fetch. The contact must already exist in Wild Apricot.

Must match an existing Wild Apricot contact.
Number of 10-class packs to add (each pack = 11 credits).

Email templates

Edit the subject and body of every automated email, and toggle each one on or off independently. Defaults are the original copy from the code; saving overrides them via Script Properties (no redeploy needed). Reset to default any time. Send a test to your own inbox before saving for real.

The toggle on each row is the on/off switch — flipping it takes effect immediately. Disabling silences that email everywhere it would otherwise fire (e.g. turning off "Signup confirmation" stops booking-confirmation emails system-wide). Your edits to subject/body are preserved while disabled.

Loading templates…

Liability waiver

Edits the waiver text shown in the first-booking modal (combined with emergency-contact capture). Members re-acknowledge automatically when you bump the version — use that for substantive changes. Save without bumping for typo fixes that shouldn't strand existing acknowledgments.

Active version:— Acked this version:— All-time acks:—
Shown above the waiver body. Keep this short — one or two sentences.
Full liability waiver. HTML allowed (paragraphs, lists, etc.). 9 KB cap per the GAS Script Property limit; we'll migrate to a sheet-based store if real text exceeds that.

Save typo fix — for non-substantive edits (spelling, grammar, formatting tweaks). The waiver version stays put, every member who's already acknowledged stays current, and nobody sees the first-booking modal again on their next class.

Save & require re-acknowledgment — for any change that materially affects what members are agreeing to. Bumps the version number; every member who's previously acknowledged will be prompted to read and re-acknowledge the updated waiver on their next booking attempt. Treat this as a one-way decision; don't bump on a whim.

Most recent acknowledgments

Force one user to re-acknowledge

Clears a single user's waiver acknowledgment at the current version. They'll be prompted on their next booking attempt — same modal a brand-new member sees. Older-version acks for the same user are left intact (those are the historical record). Use this when one person needs to re-confirm without bumping the version community-wide.

Either an email address or a numeric WA contact ID will work — both columns on the Waivers sheet are checked.

Email sender identity

Controls the From-name, From-address, and Reply-to headers on every automated email the app sends. Lives at superadmin level because changing the From-address can break sending if the address isn't a verified Send-as alias on the GAS executor's Gmail account.

Friendly name members see in their inbox. Pure cosmetics — no Gmail-side configuration required.
Important: the address you put here MUST be configured as a verified Send mail as alias on the GAS executor's Gmail account (Gmail → Settings → Accounts and Import → Send mail as). Otherwise sends will fail. Leave blank to revert to the executor's default sender.
Where replies land when a member hits Reply. No Gmail-side setup needed — any address works as a Reply-to header.

Products

The catalog that drives the fitness app's buy page. Aya can edit display names, paste new Stripe Price IDs after creating them in the Stripe dashboard, change eligibility rules, and toggle products on/off — all without code changes. After updating a price in Stripe, paste the new Price ID here and save; new purchases use the new price automatically.

Danger zone

High-impact settings. Get these wrong and important notifications go to the wrong place.

Where cash payment notifications and IOU threshold alerts are sent.
Where Fitness Room Access purchase hand-offs and non-member sales leads are sent. The Stripe migration handed access fulfillment off to whoever runs membership in WA.
Address CC'd on every membership-chair email. Useful when the chair inbox isn't actively monitored — fitness-room access purchases need timely WA updates, and a CC to your own inbox ensures you'll see them within a day even during slow stretches. Leave blank to disable CC.
Where the "Become a member" buttons on buy.html route non-members. Used by the Fitness Room marketing card and the "Member rate" callout on dual-tier products.
New product
Required: display name, type, eligibility, and at least one Stripe Price ID matching that eligibility. Other fields can be filled in any order; save when ready.
Use plain ASCII characters only. Avoid em-dash (—), en-dash (–), smart quotes (" " ' '), ellipsis (…), accented letters, and other Unicode. These break Stripe webhook signature verification and the purchase silently fails to record. Use a regular hyphen (-) and straight quotes (" ') instead.
Same ASCII-only constraint as display name — descriptions get stamped into Stripe payment metadata.
Optional photo shown on the buy-page card. Recommended: drop the image file into the repo's images/products/ folder (commit + push, Netlify auto-deploys), then paste a path like /images/products/10pack.jpg here. Image specs: 1120×840px or 1200×900px (4:3) — cards display at 280×210 so this gives a crisp retina render. JPG, with the parchment background color #efe9d9 baked in as a solid fill (no transparency). Center the product with soft natural lighting and a subtle contact shadow so it feels grounded. Cards without a photo show a clean placeholder so the grid stays uniform. (Note: Google Drive share links won't work — Drive serves a viewer page, not raw image bytes.)
Preview (renders identically to the customer Store page)
No image set
Leave at 0 for Fitness Room access or merchandise.
Optional. Leave blank for unlimited stock. Decrements automatically on each sale; reaches 0 → product shows "Sold out" on the buy page.
Shown on the product card and in the cart so members know what to expect after they pay.
Paste from Stripe dashboard.
Used when a non-member is signed in. Falls back to the member price if blank.
Only relevant for "RVSD teachers only" products. Hidden for everything else.
Lower numbers appear first.
Up to 20 characters. Renders as a small colored pill next to the product title on the buy page.
Each preset bakes its own background and text color so contrast stays accessible. Color has no effect when the label is blank.
Preview: Tag label
—
—
Enabled
This email is currently active. Toggle off to silence it without losing your edits.
Built-in tokens (always available)
Template-specific tokens