Book X-Core Studio 7 AM West Portal Class
Purpose
Reserve the daily 7:00 AM xBURN class at X-Core Studio's West Portal location (2528 Ocean Ave, San Francisco) for a signed-in member, every weekday (Mon–Fri). X-Core runs its scheduling on Mariana Tek (tenant slug xcore). Reservations open on a rolling window and the popular 7 AM slot fills to waitlist within seconds of opening, so the value of this skill is timing: it must fire the reservation at the exact instant the booking window opens, unattended, while the member is asleep.
This is a write skill — it creates a real reservation against the member's account/credits. It signs in with the member's stored credentials, books the single target class, and stops. It does not buy packages, cancel, or modify anything else.
When to Use
- "Book my 7 AM West Portal class for next Monday (and every weekday)."
- A recurring scheduled job that auto-grabs the 7 AM xBURN slot the moment it becomes reservable.
- Any unattended booking where the class sells out instantly and a human can't be awake at 7 AM to click Reserve.
- Securing a spot (or auto-joining the waitlist) for a specific future weekday class at one named location.
Workflow
Recommended method: hybrid. Use Mariana Tek's public read API to resolve the exact target class and the precise second its booking window opens, then execute the authenticated reservation (browser, signed-in) at that instant. The public API is unauthenticated and was verified end-to-end; the reservation step requires the member's credentials and could not be exercised without them, so treat its exact transport as documented-but-unverified and prefer the browser path for the actual click.
Stable identifiers (verified):
- Mariana Tek tenant:
xcore→ API basehttps://xcore.marianatek.com - Region (San Francisco):
48608 - West Portal location:
48785(2528 Ocean Ave, SF 94132, timezoneAmerica/Los_Angeles) - 7 AM class start time is
T14:00:00Zduring PDT (UTC−7) andT15:00:00Zduring PST (UTC−8). Do not hardcode the UTC hour — filter on local 07:00 (see gotchas).
1. Resolve the target class (public API, no auth)
For the desired calendar date, list West Portal classes and pick the one whose local start time is 07:00:
# date range should bracket the single target day in local time
curl -s "https://xcore.marianatek.com/api/customer/v1/classes?min_start_date=YYYY-MM-DD&max_start_date=YYYY-MM-DD&location=48785&page_size=200&format=json"
Each result includes: id, start_datetime (UTC Z), class_type.name (e.g. "xBURN", "xBURN Arms and Abs"), available_spot_count, waitlist_count, is_user_reserved, is_user_waitlisted, and critically booking_start_datetime. Select the result whose start, converted to America/Los_Angeles, is 07:00. The class name varies by weekday (xBURN / xBURN Arms and Abs / xBURN Basics / xBURN Booty and Abs) — match on time + location, not name.
2. Read the booking-open instant — do NOT assume a fixed window
The target class object carries booking_start_datetime, e.g. "2026-06-08T07:00:00-07:00". This is the authoritative moment the slot becomes reservable. Across every weekday 7 AM West Portal class observed, this was exactly 7 days (1 week) before class, at 07:00 local time — i.e. a Monday 7 AM class opens the previous Monday at 7:00 AM PT.
Assumption / correction: The request described a "2 weeks in advance / 2 Mondays prior" window. The live API consistently reported a 7-day window, not 14. The skill must always trust
booking_start_datetimefrom the class object and schedule against it, never a hardcoded offset — the studio can change the window at any time and only the field is authoritative.
3. Schedule the unattended run
Register a recurring job (this is what lets it "run regardless" while the member sleeps):
- For each desired class day, the booking job must fire at that class's
booking_start_datetime. Practically: each weekday at 06:59:5x America/Los_Angeles, target the class exactly one window-length (currently 7 days) ahead, and fire Reserve at 07:00:00.000 PT. - The
-07:00/-08:00offset embedded inbooking_start_datetimealready encodes DST, so anchoring the cron to theAmerica/Los_Angeleszone (not a fixed UTC hour) keeps "7 AM" correct year-round. - Pre-resolve the class
idand pre-authenticate (warm a signed-in session) before the window opens. The slot goes to "waitlist only" within seconds, so all setup must be done with the session idle and ready, leaving only the single Reserve action to execute at T=0.
4. Execute the reservation (browser, signed-in)
- Open
https://www.xcorestudio.com/login-account, dismiss the "This site uses cookies" banner (Accept All Cookies), and click LOG IN inside the embedded Mariana Tek account widget. Enter the member's email + password. (The widget is an iframe — see gotchas.) - Navigate to the West Portal schedule:
https://www.xcorestudio.com/ocean-schedule(the Squarespace embeddata-mariana-integrations="/schedule/daily/48608?locations=48785"confirms region 48608 / location 48785 — "ocean-schedule" IS West Portal). - Select the target day tab, find the 7:00 AM row, and click its Reserve button the instant it turns from "waitlist only" to reservable. If only the waitlist is available at T=0, join the waitlist (matches the member's intent to secure the recurring slot).
- Confirm success by re-reading the class via the API:
is_user_reserved: true(oris_user_waitlisted: true). Stop. Do not navigate further or purchase anything.
Pure-API alternative (documented, unverified)
Mariana Tek exposes authenticated customer endpoints under https://xcore.marianatek.com/api/customer/v1/.... Reads (classes, locations, regions) are public and verified. The reservation write requires an OAuth2 bearer token obtained from the member's login; the exact reserve endpoint/payload was not verified here (no credentials available) and unauthenticated probes of me/reservations returned 404. If a valid bearer token is available, an authenticated POST is faster than the browser (lower latency at T=0, which matters for instant-fill classes) — but verify the endpoint against a throwaway/low-demand class before relying on it for the 7 AM rush.
Site-Specific Gotchas
- Window is 7 days, not 2 weeks — and it's a field, not a constant. Every observed 7 AM West Portal class opened booking exactly 7 days prior at 07:00 PT. Always read
booking_start_datetimeoff the target class; never hardcode 7 or 14 days. - "ocean-schedule" = West Portal. The West Portal studio is at 2528 Ocean Ave; X-Core's site labels its schedule page
/ocean-scheduleand the embed targetslocations=48785. There is no separate "west-portal-schedule" URL. Don't be thrown by the name mismatch. - Filter on local 07:00, not a UTC hour. 7 AM PT =
14:00Zin summer (PDT) but15:00Zin winter (PST). Convertstart_datetimetoAmerica/Los_Angelesbefore matching. - The 7 AM slot fills instantly. Every in-window 7 AM class observed showed
available_spot_count: 0and "waitlist only". You cannot book late — the entire skill hinges on firing at T=0. Pre-resolve the class id and pre-authenticate; leave only the Reserve click for the exact second. - Class name varies by weekday. Mon "xBURN Arms and Abs", Wed "xBURN Basics", Fri "xBURN Booty and Abs", etc. Match on time + location, never on class name.
- The login button is inside a Mariana Tek iframe. On
/login-account, a top-documentdocument.querySelectorwill not find the LOG IN control or the email/password fields — they live in the embedded Mariana Tek widget. Interact within the iframe context (e.g. snapshot/click by ref rather than top-frameeval). - Cookie banner intercepts clicks. A "This site uses cookies" modal overlays the account area on first load; dismiss
Accept All Cookiesbefore attempting to log in. - No anti-bot friction. Site is Squarespace + Mariana Tek; the pre-run probe detected no anti-bots and a bare Browserbase session (no
--verified, no--proxies) loaded every page and hit the public API successfully. Stealth/proxies were not required. - Read-only API endpoints that work unauthenticated:
/api/customer/v1/classes,/api/customer/v1/locations,/api/customer/v1/regions(append?format=json).meandreservationsreturn 404 without auth — they are not the discovery surface. - Credentials required. This skill cannot run without the member's X-Core (Mariana Tek) email + password. Without them it can resolve the class and timing but cannot reserve.
- Booking consumes credits/membership. A successful reserve draws on the member's package/membership and is subject to X-Core's late-cancel policy. This is a real, billable action — only run it for genuinely-wanted classes.
Expected Output
// Success — spot reserved
{
"success": true,
"action": "reserved",
"location": "West Portal",
"location_id": "48785",
"class_id": "86xxxx",
"class_name": "xBURN Arms and Abs",
"class_start_local": "2026-06-15T07:00:00-07:00",
"booking_opened_at": "2026-06-08T07:00:00-07:00",
"is_user_reserved": true
}
// Slot full at T=0 — joined waitlist instead
{
"success": true,
"action": "waitlisted",
"location": "West Portal",
"class_id": "86xxxx",
"class_start_local": "2026-06-15T07:00:00-07:00",
"is_user_waitlisted": true,
"waitlist_position_estimate": 2
}
// Could not authenticate
{
"success": false,
"reason": "auth_failed",
"detail": "Mariana Tek login rejected the stored credentials."
}
// No 7 AM class on the target day
{
"success": false,
"reason": "no_target_class",
"detail": "No 07:00 local class at location 48785 on 2026-06-15."
}
// Ran too late — window already closed/filled
{
"success": false,
"reason": "window_missed",
"detail": "booking_start_datetime was 2026-06-08T07:00:00-07:00; class was full by the time Reserve fired."
}