Skip to content

Practice Sessions Infrastructure

Created 2026-03-04
Updated 2026-03-05
Status current
Tags practice-sessionsinfrastructureautomationwp-fusionwoocommercebookingtechnical

Technical reference for Practice Sessions purchase flow, access tiers, booking system, and automation. Current program: Montreal, Fall 2026 (8 sessions, October 3 – November 21). Spring 2026 (16 sessions, March 15 – June 27) is the season this doc originally described — most of the detail below is Spring-specific and needs to be read alongside the Fall pricing-engine section added 2026-07-05.

See Baseworks–Practice Automation Infrastructure for the overall platform stack.


Practice Sessions use a credits-based booking model: users purchase session passes (credits), then self-book specific dates from their account dashboard on baseworks.com. There is no fixed enrollment — each participant decides how many sessions to commit to.

Access tiers and pricing are determined by WP Fusion account tags. The booking UI adapts to show the appropriate pricing for the logged-in user.

No Uncanny Automator deadline recipes apply to Practice Sessions — access does not expire.


IDNameWooCommerce price (USD)Page copy price (CAD)TrackTag required
47341Practice Session (Montreal, Spring 2026) - Intro$32 USDTrack B (new to Baseworks)None (open)
47343Practice Session (Montreal, Spring 2026) - Standard$27 USD/session~$38 CAD/sessionTrack B (post-intro)track-standard (ID: 101)
47188Practice Session (Montreal, Spring 2026) - Alumni$27 USD/session base~$38 CAD/session baseTrack A (alumni)track-alumni (ID: 97)

Currency note: WooCommerce products are priced in USD. The site displays prices in CAD via WooCommerce Payments multi-currency — CAD amounts shown above are approximate at the current exchange rate. The Alumni sliding scale is applied dynamically; the widget shows the CAD price in real time. Standard is flat rate. Intro page copy price in CAD — confirm on the live page (the $32 USD WooCommerce price converts to ~$45 CAD at typical rates).

These products have no WooCommerce category assigned. They are infrastructure nodes — not indexed, not publicly browsable. Users reach them via direct add-to-cart links (from the intake form outcome or the booking widget).


Available to users with the Track Alumni tag (WP Fusion tag ID: 97). Unlocked automatically at checkout — logged-in alumni see the discounted rate with real-time quantity preview.

Discount formula: discount = min((quantity - 1) × 0.035, 0.49) Per-session price (CAD): $38.00 CAD × (1 – discount) (base = $27 USD, displayed in CAD via multi-currency)

SessionsPer session (CAD)Total pre-tax (CAD)Discount
1$38.00$38.000%
5$32.68$163.4014%
10$26.03$260.3031.5%
16$19.38$310.0849%

Full table: Practice Sessions Pricing.

Implementation: Custom WooCommerce mu-plugin on baseworks.com using woocommerce_before_calculate_totals hook. Alumni pricing is gated by track-alumni tag check at runtime. The booking widget (separate mu-plugin) also reads this tag to show/hide the alumni pricing card.

$27 USD/session (~$38 CAD) regardless of quantity purchased, available in packs via a variable product (ID 47343). Pricing tiers are defined as WooCommerce variations; credits granted from the pass-size variation attribute (e.g. "5 sessions" → 5 credits) via the custom booking plugin.

Access gate: The Standard pricing section is locked via WP Fusion tag Track Standard (ID: 101). Only users who have been assigned this tag can see and purchase standard passes. This applies both on the main page and in the booking widget.

A sliding scale discount for Standard pricing (similar to alumni) has not been implemented — pricing structure not yet finalized. Flat rate is live and fully operational.

$32 USD for a single introductory session (CAD equivalent shown at checkout via multi-currency). One credit granted at purchase regardless of quantity field (plugin enforces 1 credit). For new-to-Baseworks participants who qualify via the intake form.

This product is technically accessible to anyone who has the direct add-to-cart URL (not restricted by WP Fusion tag), but the only way to encounter the link is via the intake form Outcome A. No public product page.


A custom PHP shortcode [bw_practice_quiz] on the Practice Sessions page routes Track B visitors to the appropriate starting point. 6-step scored screener; no form submission, no personal data captured.

OutcomeScoreResult
A — Intro session≥8 ptsDirect add-to-cart link for product 47341
B — Study Group first5–7 ptsRedirect to Spring Study Group page
C — Primer + Events≤4 ptsLinks to Primer and Events pages

Professional override: Step 1 = technical discipline + Step 3 = precision-central → always Outcome A.

Aggregate outcomes logged (no personal data) to wp-content/uploads/bw-quiz-log/quiz-outcomes.jsonl.

Full scoring logic: Practice Sessions — Intake Form.

Track A users (alumni) bypass the form entirely — they use the booking widget directly.

Standard Track Bottleneck — Intro-First Flow

Section titled “Standard Track Bottleneck — Intro-First Flow”

The intake form is the enforced entry point for Standard Track. New participants cannot purchase standard passes directly, even if they find the product URL. The flow is designed as a one-way gate:

  1. Visitor completes the intake form — Outcome A indicates sufficient movement background.
  2. Outcome A shows a direct add-to-cart link for the intro session only (product 47341). Standard pass options are not visible or purchasable at this point.
  3. Purchasing the intro session creates their baseworks.com account (if they don’t have one). At this stage they have 1 credit and can book their intro session from My Account.
  4. They physically attend the session. After attending, the team manually assigns the Track Standard WP Fusion tag (ID: 101).
  5. Once tagged, standard pass options become visible and purchasable on their next visit.

Existing account holders: If someone already has a baseworks.com account for any reason but does not have the Track Standard tag, the standard pricing section remains locked for them. Logging in does not bypass the gate — tag assignment is required regardless of account status.

Tagging someone with Track Standard after their first in-person session coincides with recording that session as learning activity in the practice platform. Context:

  • The practice platform tracks online learning activity automatically (Primer, platform practice sessions, etc.).
  • In-person study group attendance is currently logged manually: CSV exports of session attendees are imported into the activity tracking form on the practice site.
  • For first-time practice session attendees, this same manual step — recording the in-person session on the practice platform — will be done at the same time as assigning the Track Standard tag.
  • The goal over time is to create more automated ways to integrate in-person attendance with other learning activities on the practice platform. For now, it is fully manual.

Pricing Engine — How Discounts Are Actually Implemented

Section titled “Pricing Engine — How Discounts Are Actually Implemented”

Traced from live code, 2026-07-05; ps_fall_2026 deployed same day. This section didn’t exist before — the pricing tables above and in practice-sessions-pricing describe the marketing numbers, but not the mechanism. Confirmed via diff that the production mu-plugins at /var/www/baseworks.com/wp-content/mu-plugins/ are byte-identical to the changelog copies, so the code below is what’s actually running. Changelog entry: 20260705-183000-practice-sessions-fall-2026-pricing-engine.md.

Files: baseworks-changelog/sites/baseworks.com/mu-plugins/baseworks-session-booking.php (program registry, booking/credits) and baseworks-practice-sessions.php (pricing widgets, discount engine, cart logic).

The program registry is multi-season by design

Section titled “The program registry is multi-season by design”

bw_sb_get_programs() in baseworks-session-booking.php returns an array keyed by program ID. ps_fall_2026 is now live alongside ps_spring_2026 — added as a second registry entry, no changes to the discount math itself. Deployed and verified on the server (2026-07-05): bw_sb_get_program('ps_fall_2026') resolves, and all 8 Fall sessions are seeded in option bw_sb_sessions_ps_fall_2026. Version bumped 1.2.0 → 1.3.0; pre-deploy backup taken as .bak-20260705 in addition to Asia’s full-site backup same day.

'ps_fall_2026' => [
'name' => 'Practice Sessions — Montreal, Fall 2026',
'capacity' => 20,
'cancel_hours' => 24,
'timezone' => 'America/Toronto',
'location' => 'Proto Studio',
'emails' => false,
'alumni_tag_id' => 'track-alumni',
'purchase_url' => '/montreal-practice-sessions/',
'products' => [
61930 => [ 'tier' => 'alumni', 'credits' => 'qty', 'label' => 'Alumni' ],
61932 => [ 'tier' => 'standard', 'credits' => 'variation_attr', 'attr' => 'pass-size', 'label' => 'Standard' ],
61931 => [ 'tier' => 'intro', 'credits' => 'fixed', 'count' => 1, 'label' => 'Intro' ],
],
'pricing' => [
'tax_rate' => 0.14975,
'alumni' => [ 'type' => 'sliding_scale', 'product_id' => 61930, 'step' => 0.035, 'cap' => 0.49, 'max_qty' => 8 ],
'standard' => [ 'type' => 'tiers_from_variations', 'product_id' => 61932, 'attr' => 'pass-size' ],
],
],

Notes on this config:

  • Alumni (step 0.035, cap 0.49, max_qty 8): identical formula to Spring. The 49% cap only ever binds at 15+ sessions, so with an 8-session max the cap never triggers — at 8 sessions the discount is (8-1) × 3.5% = 24.5%, same rate as session 8 in Spring’s table. No new pricing decision needed here; this is just registering the same math against the new product ID (61930) with max_qty lowered so the widget’s slider/selector doesn’t offer more than 8.
  • Standard (tiers_from_variations): the widget (bw_ps_shortcode_standard()) reads live WooCommerce variation data directly — for each published variation under the parent product, it takes the pass-size attribute value (must literally be "N session(s)", e.g. "4 sessions", so intval() parses it) and the variation’s regular_price. There is no separate discount formula for Standard — whatever price you set on each variation in WooCommerce is exactly what displays and charges. This is why Spring’s Standard tier was flagged as “not finalized” in Known Gaps below: the 5/10/16 prices ($128/$240/$328) were manually chosen, not computed.
  • Intro: fixed 1 credit regardless of quantity field, same as Spring.

Standard variation prices (61933 = 1, 61934 = 4, 61935 = 8)

Section titled “Standard variation prices (61933 = 1, 61934 = 4, 61935 = 8)”

Spring’s actual live variation prices (pulled via wp post meta get, not the aspirational table in practice-sessions-pricing): 1 session = $27, 5 = $128 ($25.60/session, 5.2% off), 10 = $240 ($24.00/session, 11.1% off), 16 (full season) = $328 ($20.50/session, 24.1% off).

Confirmed Fall pricing (Asia, 2026-07-05) — deliberately kept a gap above Alumni pricing (Alumni at 8 sessions = $20.39/session, 24.5% off; Standard needs to stay noticeably above that, unlike Spring where the full-season rates converged to nearly the same number):

  • 1 session: $27 (unchanged)
  • 4 sessions: $100 ($25.00/session, 7.5% off)
  • 8 sessions (full season): $180 ($22.50/session, 16.5% off — vs Alumni’s $20.39/session at the same quantity)

Status: fully live as of 2026-07-05 evening (Asia). Verified directly via wp post meta get on the server: 61933 = $27, 61934 = $100, 61935 = $180 — the confirmed Fall prices are set, no longer carrying Spring’s defaults.

Checklist — all steps complete as of 2026-07-05

Section titled “Checklist — all steps complete as of 2026-07-05”
  1. Create WooCommerce products 61930 (alumni), 61931 (intro), 61932 (standard) + variations 61933/61934/61935 — done (Asia).
  2. Set _regular_price to $100 (61934) and $180 (61935) — done, verified live.
  3. Confirm pass-size attribute values — done, verified correct.
  4. Add the ps_fall_2026 registry entry to bw_sb_get_programs() — done, deployed to baseworks-session-booking.php v1.3.0, verified live.
  5. Add bw_sb_seed_fall_2026() — done, deployed, all 8 sessions confirmed seeded.
  6. Update shortcode instances to program="ps_fall_2026" — done, verified on all three placements:
    • Landing page (post 47154): [practice_session_booking program="ps_fall_2026" tier="alumni"] and tier="standard"
    • Booking dashboard (post 34152, “Programs Available”): [bw_booking_dashboard program="ps_fall_2026"]
  7. Update this file — done.

Not yet done — Asia’s own note: another round of testing planned for the next session (2026-07-05 evening → next day). Nothing broken as of this check; treat the above as “deployed and verified reachable,” not “fully QA’d through a real purchase/booking flow.”


Plugin: baseworks-session-booking.php (mu-plugin, baseworks.com) Shortcode: [bw_booking_dashboard program="ps_spring_2026"] Location: baseworks.com/available-programs/ (inside account dashboard)

  1. User purchases session pass (product 47341, 47188, or 47343)
  2. On order completion, credits added to user meta bw_credits_ps_spring_2026
  3. User opens Available Programs page → sees 16 Spring session slots
  4. Checks desired sessions → confirms → credits deducted, bookings written to wp_bw_bookings
  5. Cancellations: per-session cancel button; 24-hour cutoff enforced; credit refunded
Product IDTypeCredits
47341Intro1 (fixed)
47188Alumniqty purchased
47343Standardqty from pass-size variation attribute

20 participants per session (all ticket types combined).

WP Admin → Session Bookings: session table, attendee counts, credit balances, email notification toggle. Manual credit adjustment available under individual user profiles.

Full technical documentation: Practice Sessions Booking Widget.


TagSlugIDRole
Practice Sessions - MTL 2026 Springpractice-sessions---mtl-2026-springBuddyBoss community / forum access for enrolled participants
Track Alumnitrack-alumni97Enables alumni pricing at checkout and in booking widget
Track Standardtrack-standard101Unlocks Standard pricing section and passes at checkout and in booking widget

Track Alumni is not granted on purchase — it is applied manually by the team when a participant meets alumni eligibility criteria. All currently eligible participants are tagged.

Track Standard is also assigned manually — see Standard Track Bottleneck above. No automatic mechanism currently exists. Assignment coincides with recording the participant’s first in-person session on the practice platform.


Practice Sessions currently have no Uncanny Automator recipes. Purchase, credit assignment, and booking are handled entirely by the custom booking plugin and WP Fusion. If post-purchase communication (e.g., onboarding emails, schedule reminders) is needed in the future, that would be added here.


  • Standard sliding scale: Pricing structure not finalized. Standard widget is live as flat rate — discount plugin not implemented yet. (Update 2026-07-05: this is not actually a gap in the code — the Standard widget reads whatever price you set on each WooCommerce variation directly, there is no separate formula to implement. See Pricing Engine — How Discounts Are Actually Implemented.)
  • Proto Studio rate: Special rate for Proto Studio members/residents. Terms not yet confirmed; currently handled via email on request. No product or automation exists.
  • FAQ cancellation window: Page copy still has [X hours] placeholder — confirmed to be 24 hours; needs to be updated in the page copy.
  • French intake form and checkout terms acknowledgment: Not implemented. Decision (2026-03-07): duplicate the [bw_practice_quiz] shortcode with French strings (either [bw_practice_quiz_fr] or a lang="fr" parameter) for a standalone French practice sessions page. Additionally, add a bilingual checkbox + French terms link to all checkout entry points (intake form Outcome A card, booking widget, study group CTA) — CTA button hidden until checkbox checked. No custom WooCommerce plugin needed; modifications to existing shortcode and mu-plugin code. Code: baseworks-changelog/sites/baseworks.com/code-snippets/2026-03-05-practice-sessions-quiz-v2.php. Full compliance plan: Quebec Language Compliance — Bill 96.

Widget development: practice-sessions-booking-widget