THUMOS ADMIN
THUMOS ADMIN
Overview Applications Bookings Members Squads Cycles Courses Manual Onboarding Changes ✎ Edit Onboarding
Quick Actions
Open Editor Stripe Dashboard
Applications
All 0 Pending 0 Invited 0 Rejected 0 Enrolled 0
NameEmailAgeWhat they doSubmittedStatusActions
Bookings
Upcoming Past All
WhenGuestCalendarApplicationActions
All Members
NameEmailSigned upOnboardingPlanSquadStreakRankStatusActions
Squads
Cycles
#StartEndStatusWinnerActions
Manual
Overview
Applications
Bookings & Calendar
Onboarding
Lexicon
Telegram Bot
Scoring & Ranks
Infrastructure
Operations

System Manual

How It All Works

THUMOS runs on one Cloudflare Worker (thumos-api) + one D1 database (thumos-db). Every page, bot, and admin tool reads from and writes to the same database. There is one source of truth.

The Member Journey (current primary funnel — application-gated)

  1. Discovery — they land on thumos.academy (price is hidden; all CTAs → /apply)
  2. Application — they fill out /apply (name, age, occupation, what they want, why now, income range). Saved to D1 applications. PRAGMA pings Thumos CRM with #application.
  3. Book the call — inline slot picker on the same page. Shows Sam's real free times (freeBusy auto-subtracts his calendar). They pick a slot.
  4. Calendar + Meet — worker creates a Google Calendar event on the "THUMOS Consults" calendar with an auto-generated Meet link. Sam ([email protected]) is invited as attendee. Both get Google invite emails with .ics.
  5. Confirmation email — Resend email from [email protected] with the Meet link. PRAGMA pings Thumos CRM with #booking.
  6. The call — Q / Sam runs the call. Decision: enroll, reject, or follow up.
  7. Enrollment — if yes, Q sends the Stripe checkout link or admin-creates the user. Stripe webhook → D1 users row + welcome email.
  8. Onboarding — 3 steps: sign the commitment, set milestones (body/women/money), write first gratitude post.
  9. Telegram Link — "Join Squad" button opens a bot DM that auto-links Telegram to their account.
  10. Daily Life — every weekday they post Action: + Grateful: in their squad. Bot detects, records, responds.
  11. Courses + Cycle — watch videos, mark complete. Every 30 days declare milestones hit/miss. Winning squad gets a debrief with Sam.

Warm/DM traffic that already knows the price can still use /checkout directly — Stripe → same webhook path.

Post Detection

The Telegram bot watches for messages that have Action: AND Grateful: at the start of a line. Both required. One post per weekday — duplicates silently ignored. Weekend posts are recorded but don't count toward score.

Streak = consecutive weekdays posted. Weekends don't break it. Miss a weekday → streak resets to 0.

Scoring System

Personal score per cycle = (posts ÷ weekdays × 50) + (milestones hit ÷ 3 × 50) = max 100 per cycle

Squad score = same formula but aggregated across all squad members, percentage-based

Cumulative score persists across cycles and determines rank.

RankPointsTypical Timeline
Initiate0-1990-3 months
Journeyman200-4993-6 months
Adept500+8-12 months

Cycles

~30 days per cycle. Leaderboard resets each cycle. Rank persists forever.

Start a cycle → resets all squad scores, creates new cycle record. Old cycle marked "ended".

End a cycle → pick winning squad. They get a private debrief with Sam.

New members mid-cycle: excluded from squad score that cycle.

Milestones

3 per user per cycle: Body, Women, Money. Set during onboarding or cycle start.

Visible to squad immediately. Cannot be changed once submitted.

At cycle end: declare hit or miss. Early completion allows optional new milestone (no extra points).

Automated Systems

SystemWhenWhat
Stripe webhookOn paymentCreates user + sends welcome email
Post detectionEvery message in squadChecks format → records post → responds with 🔥
8pm reminderEvery hour (checks user timezone)If it's 8pm for a user and they haven't posted → bot messages squad
Score recalc5:00 UTC dailyRecalculates all squad scores
Bot auto-linkUser taps deep linkLinks Telegram ID to THUMOS account
Group welcomeUser joins squadBot sends welcome message with post format

Invite Codes

Free members use invite links: thumos.academy/invite?code=FORGEDAY1

CodeSquadFor
FORGEDAY1Squadron LambdaOG fight camp / BDE members
FORGETHETASquadron ThetaSecond group

To add new codes: edit INVITE_CODES in worker.js and redeploy.

Telegram Groups

GroupPurposeInvite
THUMOSAll members + Sam. Topics enabled.Link
Squadron Lambda (Λ)First squadLink
Squadron Theta (Θ)Second squadLink

Bot: @ThumosForgeBot

Infrastructure

ComponentServiceURL
APICloudflare Workerthumos-api.q-2f4.workers.dev
DatabaseCloudflare D1thumos-db
Main siteCloudflare Pagesthumos.academy
EditorCloudflare Pageseditor.thumos.academy
AdminCloudflare Pagesadmin.thumos.academy
VideosCloudflare StreamStream IDs in D1
PaymentsStripeProduct: prod_UILptFYD8wxzKO
EmailResend[email protected]
BotTelegram@ThumosForgeBot

7-Day Guarantee

Not a trial. Full access from day 1. If they do the work (daily posts, course engagement) and it's not for them after 7 days, full refund. Manual process — review and process through Stripe dashboard.

Deploy Commands

# Deploy API (Worker)
cd selene/markets/thumos/deploy_api && npx wrangler deploy

# Deploy main site
npx wrangler pages deploy "selene/markets/thumos/deploy_main" --project-name=thumos-academy --commit-dirty=true

# Deploy editor
npx wrangler pages deploy "selene/markets/thumos/deploy_editor" --project-name=thumos-editor --commit-dirty=true

# Deploy admin
npx wrangler pages deploy "selene/markets/thumos/deploy_admin" --project-name=thumos-admin --commit-dirty=true

# Or: git push (auto-deploys main site)

Applications

What this is

The primary funnel as of April 2026. Price is hidden on the main site — every CTA drives to thumos.academy/apply. Lead has to apply before they can even see the Forge offer.

Purpose: qualify. We don't want people who need a credit-card button; we want people who'll do the work. The application forces them to articulate what they actually want, and the call lets us tell them the exact thing they need to do — whether the Forge is that move or not.

The form fields

FieldRequiredWhy
nameyesobvious
emailyesfor follow-up + confirmation
agenoqualification signal (18–28 is sweet spot)
occupationnocontext for the call
goalyes"What do you want?" — most important answer
why_nownourgency / stakes — reveals readiness
income_rangenoinforms payment-plan offer
instagramnovibe check before the call
sourceautoUTM params + referrer, captured silently

Status flow

  1. pending — default on submit. Needs review.
  2. invited — reviewed, good fit, moved forward (booking exists or invite sent).
  3. rejected — reviewed, not a fit right now.
  4. enrolled — they paid and became a member.

Status is set from the Applications tab. Click any application row → detail modal → status buttons + notes field. Pending rows also have inline Invite/Reject buttons.

PRAGMA ping

Every submitted application posts a #application message via PRAGMA bot into the Thumos CRM topic of the main PRAGMA supergroup. The ping includes everything they wrote so you can react from Telegram without opening the admin.

D1 schema

applications (
  id, name, email, age, occupation, goal, why_now,
  income_range, instagram, status, source, notes,
  submitted_at, reviewed_at
)

Migration: deploy_api/migrate_applications.sql

Bookings & Calendar

What this is

Sovereign booking system — ported from Meridian's booking-worker, now running inside the main thumos-api worker. No Cal.com, no Calendly. Multi-tenant by calendar slug, D1-backed, Google Calendar + Meet integrated, Resend-wired.

How a booking happens

  1. Applicant fills out /apply → application row saved → PRAGMA pinged
  2. Apply page flips to the inline slot picker (same page, no redirect)
  3. JS fetches /api/book/thumos-apply/dates?month=YYYY-MM — worker generates slots from availability_rules, subtracts existing bookings, subtracts Sam's real calendar events via Google freeBusy API, returns dates where anything is free
  4. Applicant picks a date → /api/book/thumos-apply/slots?date=… returns open times for that day (same filter logic)
  5. Applicant picks a slot → POST /api/book/thumos-apply/book with the chosen UTC time, name, email, application_id
  6. Worker: inserts booking row → creates Google Calendar event on THUMOS Consults with a unique Meet link, invites Sam + guest → fires Resend branded confirmation with the Meet link → PRAGMA pings CRM with #booking

Sam's availability (currently)

Mon–Sat, 09:00–22:00 Asia/Bangkok. Sundays off. 30-min slots, 12-hour minimum lead, 14-day booking horizon.

The outer window (when Sam is willing to take calls) lives in D1 availability_rules. Inside that window, the worker auto-checks Sam's real calendar ([email protected]) via freeBusy and removes any slots that conflict with his existing events. So applicants only ever see slots Sam is both willing and free to take.

To change the outer window, edit the availability_rules rows directly in D1. To block specific dates (e.g. Sam is traveling April 28–30), insert into date_overrides with type='block'. There's no admin UI for this yet — SQL only.

Bookings tab

The Bookings admin tab lists confirmed calls. Filters: Upcoming / Past / All. Each row links to the underlying application if one exists. Cancel button:

  1. Marks status='cancelled' in D1
  2. Deletes the Google Calendar event with sendUpdates=all — both parties get a Google cancellation notice
  3. PRAGMA pings CRM with #booking #cancelled

Google Calendar integration

Uses a service account ([email protected]) with domain-wide delegation impersonating [email protected]. The worker signs an RS256 JWT, exchanges it for an access token at oauth2.googleapis.com/token, then hits the Calendar API.

Events land on the secondary THUMOS Consults calendar (owned by Q, shared with Sam with edit permission). This keeps them separate from Q's personal calendar.

Required OAuth scope on the domain-wide delegation: https://www.googleapis.com/auth/calendar

To rotate the service account key: IAM → Service Accounts → thumos-booking → Keys → create new, delete old, re-run wrangler secret put GOOGLE_SA_PRIVATE_KEY.

Multi-tenant by slug

The calendars table is keyed by slug. Right now there's one: thumos-apply (30-min intro calls). To add another — e.g. existing-member 1:1s at a different price or different availability — insert a new calendars row + availability_rules, and the same /api/book/:slug/... endpoints work without any code change.

D1 tables

calendars (slug, name, timezone, slot_duration, slot_gap, owner_email, from_email, meet_url, booking_lead, booking_horizon, ...)
availability_rules (calendar_id, day_of_week, start_time, end_time, active)
bookings (calendar_id, application_id, slot_start, slot_end, guest_name, guest_email, meet_url, google_event_id, status, notes)
date_overrides (calendar_id, date, type, start_time, end_time)

Migrations: migrate_bookings.sql, migrate_bookings_meet.sql, migrate_sam_availability.sql

Common SQL ops

Change Sam's window to Mon–Fri only:

DELETE FROM availability_rules
WHERE calendar_id = (SELECT id FROM calendars WHERE slug='thumos-apply')
  AND day_of_week = 6;

Block April 28 (Sam traveling):

INSERT INTO date_overrides (calendar_id, date, type)
VALUES ((SELECT id FROM calendars WHERE slug='thumos-apply'),
        '2026-04-28', 'block');

Change slot length to 45 min:

UPDATE calendars SET slot_duration = 45
WHERE slug = 'thumos-apply';

Run via: npx wrangler d1 execute thumos-db --remote --command "..."

New Member Onboarding

Updated 2026-04-21 after Apr 19 + Apr 20 strategy calls. Core mechanism = 36 goals per year (3 realms × 12 monthly milestones). See Lexicon tab for brand language.

How They Get Here

PathURLWhat happens before
Paidthumos.academy/checkout$1,000 founder (first 10) or $1,500 early bird (next 50). Vetting call required first — "$1k but book a call first, no dickheads." Stripe webhook creates account → login email → onboarding.
Invitedthumos.academy/invite?code=XEnter name, email, password + invite code → account created → auto-logged in → onboarding. Used for grandfathered members from 2022-2023 Circle.

Both paths end at thumos.academy/onboarding. Already-onboarded users are redirected to portal.

Phase 1 — Website (3 steps, existing)

The website onboarding is the Gate. They sign the Oath, set their milestones, post their first BDE. This is the exoteric entry.

Step 1 — The Commitment (Oath): Written commitment ("I am here to become the man I am capable of being…"). Sign with name + today's date. Sam's video will play here once recorded.

Step 2 — Milestones: Copy-paste AI prompt → guided conversation → 3 milestones (one per realm: Money, Women, Body). Frame: "your first 3 of 36 for the year."

Step 3 — First BDE: Write first Action + Grateful post. Click "Enter the Forge" → D1 marks onboarded = 1.

Access block: Shows the entry point into Phase 2 — a button to start the DM walkthrough with @ThumosForgeBot (t.me/ThumosForgeBot?start=LINK_{userId}).

Not touching the Phase 1 site for this week's dogfood (Q + Sam only). Site edits come after the Telegram flow is validated.

Phase 2 — Telegram DM Walkthrough (new, 7 steps)

After website completion, the user opens a private 1:1 DM with @ThumosForgeBot. The bot walks them through 7 steps using inline-keyboard buttons. Each button click advances state in D1 (users.onboarding_step).

Design principles (from Apr 19 + Apr 20 calls):

  • Cult-psychology framing — identity rupture + consecration. Sam's direction: "reprogramming their whole identity." The walkthrough IS the wardrobe — they cross from Labyrinth into the Agoge.
  • Hot + cold tone — belief + work. "You're here because something in you knew it was time" (belief) paired with "that's the only starting condition" (padawan framing).
  • Higher-self NLP — replace "I'm watching" with "the man you said you were becoming is watching." Self-imposed judgment, not external surveillance.
  • Staged revelation — upper rooms (Sanctum) mentioned but not explained. Hierarchy teased: "rooms above you can't see yet. You earn them."
StepThemeKey lineButton
1 WelcomeThreshold"You crossed the gate." Say out loud: "I am here to become the man I am capable of being."I said it. Continue →
2 SquadBrotherhood"Your squad is 8 brothers. You carry their weight when they break. They carry yours."I'm ready →
3 BDEThe RiteFormat + WHY it works (Action kills "busy"; Grateful rewires attention). At milestone checks, Receipts required.Understood →
4 StreaksVisibility"8pm your time. The man you said you were becoming is watching." 2 days silent → squad notified. 3 days → conversation.I accept it →
5 Main tourOuter ringThe Halls: Main, Combatives, Hardware, Vortex, Convocation. Can't post in Main until first squad BDE posted. Rooms above not shown.Take me to my squad →
6 Squad joinInitiation3-part initiation post: (1) Trial video, (2) first BDE, (3) deep exposing question. Not an intro. "Brothers meet each other by the work they did today."Enter Squadron → / I'm in →
7 CompleteHome"Welcome home. — Sam." Triggers Phase 3 simultaneously.(no button)

Code: ONBOARDING_STEPS in deploy_api/worker.js. State: users.onboarding_step (migration: migrate_onboarding_walkthrough.sql).

Phase 3 — Ritualistic Announcement in Main (fires at COMPLETION)

When: The moment the user hits step 7 "complete" in the DM walkthrough. NOT on payment. NOT on group join.

The trick (Sam's NLP): The message is ostensibly about the new man, but its real target is the existing members — reinforcing their sense of pride, importance, and responsibility. It's a reminder dressed as an announcement.

Deferred revelation: The new man cannot see this message — Main access is locked until he posts his first BDE in his squad. He only discovers it was posted about him when the next brother is initiated and he sees the same copy directed at someone else. That's the hook.

Copy lives in: postMainGroupRitual() in worker.js. Uses locked lexicon: the Agoge (path), Adept (rank after Initiate), the Empyrean (destination).

No button on this message. It's a reinforcement, not an action prompt.

Phase 4 — Squad Auto-Welcome (existing)

When the new man joins the squad group, bot posts the standard welcome: "[Name] just entered the Forge 🔥 Welcome to Squadron X. Your squad can see everything. That's the point."

Squad history is visible — new member can read back, see the pattern, add himself to it. This is different from Main (locked until first BDE).

Existing squad members are culturally expected to flood him with welcomes, as Sam said on Apr 20: "give him the EXACT welcome you received." Cultural norm, not bot-automated.

Gates (two-stage access)

GateHow to passUnlocks
Gate 1Post first BDE in squadRead + post access to THUMOS Main
Gate 2Post 3-part initiation (Trial + BDE + deep question) in squadFull Initiate status (1-1 Neophyte locked in); existing brothers flood welcomes; Phase 3 announcement becomes visible (retroactively)

Preview

Full Telegram-styled walkthrough preview: /onboarding_bot_preview.html (hosted at thumos.academy/onboarding_bot_preview.html once deployed). Use this to review copy changes before deploying worker.js.

What's Not Built Yet

  • Sam's commitment video — placeholder in website step 1
  • Auto-squad assignment — new paid users have no squad; need manual assign until built
  • Gate 1 enforcement (Main access lock) — copy says it; Telegram doesn't enforce per-user post permission natively. Workaround: slow-mode + bot-deletes until first squad BDE detected. Not yet wired.
  • Stripe → bot hand-off — on payment success, currently just email; future: bot DM immediately with Gate-welcome.
  • Receipts flow — copy mentions "receipts at milestone checks" but no UI yet for submitting proof.
  • Welcome-flood nudges — bot prompts existing members if a new initiate goes un-welcomed for >2h.
  • Rank promotions UI — 9-grade system spec'd in Lexicon tab; no admin tool yet to promote.

THUMOS Lexicon

Brand language source of truth. All copy, bot messages, site content, courses, and sales pages draw from here. Canonical doc: selene/markets/thumos/THUMOS_LEXICON.md. Updated 2026-04-21.

Realms & Spaces

TermWhat it names
ThumosThe program; fire of the spirit at ignition
The ForgeThe crucible — where transformation happens
The GateThe entry threshold
The AgogeThe training path (Spartan: the warrior-philosopher's education from age 7 to 30)
The LabyrinthWhat they are leaving. Not a maze — a path that leads to the center. Every man arrives already lost; the Agoge is how he walks inward. Diagnostic, not reactionary.
The EmpyreanThe destination. Realm of realized fire. Kingdom within. Thumos fully lit. Greek empyros = "in fire."
The SanctumHidden upper rooms — esoteric path, earned by rank
The MountSam's inner circle; Hierophant-tier
The HallsCollective name for THUMOS main rooms
Squadron8-man squad (e.g. Squadron Lambda Λ, Squadron Theta Θ)

Ranks — 9 Grades, 3 Tiers (Exoteric Path)

Rosicrucian / Golden Dawn / Theosophical lineage. Every grade name is a real historical rank. Public path ends at 3-3. Beyond that is the Sanctum (esoteric), grades hidden until earned.

Tier 1 — INITIATE (The work is self-mastery. Coming out of the Labyrinth. The man proves he can walk.)

GradeNameMeaningBelt
1-1NeophyteGreek: "newly planted"White
1-2ZelatorLatin: "zealous one" — the fire has caughtYellow
1-3TheoricusGreek: "theorist" — sees the structureOrange

Tier 2 — ADEPT (The work is bearing another. Rite is automatic; attention turns outward. The man proves he can carry.)

GradeNameMeaningBelt
2-1AdeptLatin adeptus: "one who has attained"Green
2-2PracticusLatin: "practitioner" — embodies the workBlue
2-3PhilosophusGreek: "lover of wisdom" — speaks the whyPurple

Tier 3 — MAGISTER (The work is holding the container. Shaping conditions for growth. The man proves he can build.)

GradeNameMeaningBelt
3-1MagisterLatin: "master" — shapes the containerBrown
3-2Magister Ordinis"Master of the Order" — cross-squad authorityRed
3-3Magister Templi"Master of the Temple" — the baby 33°Black

Beyond 3-3: Invitation to the Sanctum. Esoteric path begins. Grades remain hidden until earned. Exoteric first, finish what is.

Rank System — Gates & Tests (Reference Spec)

Locked for reference. Not yet implemented — refining through launch. Canonical spec once Cycles, Breakthroughs, Receipts, and promotion mechanics ship.

Core principle (Sam, Apr 20): To advance, the member must do something that pulls them out of their current state. The specific test is individual — could be healing a wound, closing a deal, approaching a woman, letting go of anger, running a race. Framework is universal; test is personal.

Promotion principle: No grade is self-declared. Every promotion is acknowledged by a Magister or the Hierophant. The member is told he's been elevated — he doesn't announce it.

Tier 1 — INITIATE

The work is self-mastery. Coming out of the Labyrinth. He proves he can walk.

1-1 Neophyte (entry — crossed the Gate)

How you become one: Complete website onboarding → pass the bot DM walkthrough → post the 3-part Initiation in your squad (Trial video + first BDE + one deep exposing question).

At this grade: Post daily Rite every weekday · attend Convocations · show up in squad chat · read Initiate-tier lexicon only.

Hidden: Sanctum, the Mount, "Numen," higher grade names, Hawkins scale.

Gate to 1-2 Zelator: 30 posted Rites · 1 Trial video beyond initiation · 1 Convocation attended · squad leader confirms he shows up without dragging the squad.

1-2 Zelator (the fire has caught)

What changes: Stops being watched. Treated as a given, not a project.

At this grade: Daily Rite · contribute in Convocations (1 Q + 1 Breakthrough/month) · welcome Neophytes.

Gate to 1-3 Theoricus: 60 Rites total · 1 Breakthrough declared + witnessed · consistency through a drop (fell off + came back unbidden).

1-3 Theoricus (sees the structure)

What changes: Stops reacting to the Agoge, starts understanding it. Can explain the Rite to someone newer.

At this grade: Continue Rite · shadow a Neophyte through first week · structure milestone work, don't just declare it.

Gate to 2-1 Adept: 1 full Cycle with 3/3 milestones hit (Receipts required) · sponsor a Neophyte through first 30 days · squad leader + one Adept+ confirm he acts as peer.

Tier 2 — ADEPT

The work is bearing another. Rite is automatic; attention turns outward. He proves he can carry.

2-1 Adept (one who has attained)

What changes: Initiation behind him. Men below look to how he does it.

At this grade: Daily Rite + mentor 1 Neophyte · first Breakthrough becomes his sponsorship pitch.

Numen unlocked here (staged revelation): "NM was never just Needle Mover. It's Numen — the indwelling divine. You've been moving your god every day. Now you know."

Gate to 2-2 Practicus: 2 Neophytes sponsored (one must reach Zelator) · Convocation contribution (taught something) · 2nd full Cycle 3/3.

2-2 Practicus (practitioner — embodies it)

What changes: Doesn't do the work — IS the work. The line between tested and mundane self collapses.

At this grade: Daily Rite + mentor 3 Neophytes · co-lead a Trial for someone younger · full Hall access (Combatives, Hardware, Vortex, Convocation).

Gate to 2-3 Philosophus: Deliver one teaching (at Convocation / Hall / in writing) acknowledged by Philosophus+ as doctrinally sound · 3rd full Cycle.

2-3 Philosophus (speaks the why)

What changes: Can explain the path to someone who can't see it yet. Gets asked questions squad leaders can't answer.

At this grade: Daily Rite continues (forever — no grade exempts you) · mentor 5+ men across squads · contribute to courses, Convocation topics, doctrine.

Gate to 3-1 Magister: Lead a squad (8 men) for ≥1 Cycle · composure under pressure (squad member goes dark 3+ days, handled without panic or destabilization) · Hierophant approval personally.

Tier 3 — MAGISTER

The work is holding the container. Shaping conditions for growth. He proves he can build.

3-1 Magister (master of one squad)

What changes: Responsible for a container — a squad of 8 staying intact. If the squad drifts, it's on him.

At this grade: Weekly squad huddle · monthly Cycle review · crisis response · direct line to the Hierophant.

Sanctum revealed as existing (not what's in it) · the Mount is named.

Gate to 3-2 Magister Ordinis: 6+ months running a squad with no attrition · shepherd ≥1 member Neophyte → Adept (full vertical carry) · 4th–5th Cycles, high milestone hit rate.

3-2 Magister Ordinis (master of the order)

What changes: Coordinates across squads. Part of how the Agoge operates at scale.

At this grade: Oversee 2+ squads OR run a thematic Hall · host Convocations in rotation with Hierophant · help set doctrine · full Hall moderator access.

Gate to 3-3 Magister Templi: 1+ year cross-squad leadership · Yellow-tier thinking (handles systemic problems with flex, non-reactive composure — Hierophant watches for this) · full program transformation measurably visible across all Three Realms.

3-3 Magister Templi (master of the temple — the baby 33°)

What changes: Completed the public Agoge. Living proof the path works. He IS the Temple — shapes its walls, trains its builders.

At this grade: Faces of the Agoge alongside the Hierophant · invitation power (can propose Neophytes for skipped Gates — rare) · doctrine authority (can refine Rite, propose Halls, challenge the Hierophant on his own terms) · Sanctum grades visible as possibilities, names stay hidden.

Gate to Sanctum: Invitation only. The Hierophant decides. No public criteria. The public-facing reason: if you have to ask whether you're being considered, you're not.

The Sanctum (post-3-3, esoteric)

Hidden path. Grade names not public. Structure known only to Q + Sam. Rule: exoteric first, finish what is. When a Magister Templi is invited into the Sanctum, they learn those grades directly — never before.

Gate summary (quick reference)

TransitionGate (short)
1-1 → 1-230 Rites, 1 Trial video, 1 Convocation attended
1-2 → 1-360 Rites, 1 Breakthrough declared + witnessed
1-3 → 2-11st Cycle 3/3 hit, sponsor a Neophyte
2-1 → 2-22 Neophytes sponsored, Convocation contribution, 2nd Cycle
2-2 → 2-3Deliver a teaching (acknowledged), 3rd Cycle
2-3 → 3-1Lead a squad 1 Cycle + composure test, Hierophant approval
3-1 → 3-26+ months squad lead, 1 Neophyte→Adept carry, 4th–5th Cycles
3-2 → 3-31+ year cross-squad lead, Yellow-tier thinking, full transformation visible
3-3 → SanctumInvitation only

Every gate has three requirements: quantitative (post counts, Cycles) · qualitative (the man above + squad confirm the shift) · ritual (specific act the next grade demands).

Public Address & Roles

TermWhat it names
BrotherLateral term every member uses regardless of grade
The EldersAny grade Magister or above with mentorship duty
The HierophantSam's title (Greek: "revealer of sacred things")

Practices & Rituals

TermWhat it names
BDE / The RiteDaily weekday post. Action + Grateful, binary format. "BDE" = casual; "the Rite" = sacred. Use both.
The OathThe commitment signed on the website
The TrialPhysical test video required for initiation and rank-up
The InitiationFull entry ritual — Trial video + first BDE + one deep exposing question
ConvocationThe weekly group call
ReceiptsProof-of-work at milestone checkpoints
The Cycle30-day milestone period
MilestonesPer-cycle goals — 3 per cycle × 12 cycles = 36 goals per year (core mechanism)
BreakthroughThe cognitive/emotional rupture that triggers rank advancement

NLP Dichotomy (for copy)

Light (Higher Self)Shadow (Lower Self)
The WarriorThe Sleeper
The DoerThe Sleeper
The Man You Said You Were BecomingThe Man You Were
The FlameThe Dim
The ForgeThe Labyrinth
Energeia (at-work, actual) [internal]Dynamis (latent, potential) [internal]

Three archetypes stacked:

  • Warrior — vertical axis: higher self, who you're becoming
  • Sleeper — inverted pole: lower self, who you were
  • Doer — horizontal axis: present-moment act. The choosing itself IS the Doer

Sample copy:

  • "The Sleeper in you wants to skip today. The Warrior already posted."
  • "8pm your time. The man you said you were becoming is watching."
  • "You didn't miss three days. The Sleeper did."
  • "The Sleeper thinks. The Doer walks the Dō."
  • "We only care about what you are DO-ING."

DO / DOING / DŌ — Etymology + Esoteric Layers

Sam's slogan "we only care about what you are DO-ING" turns out to be the most loaded word in the lexicon. Two unrelated language families converged on the same sound, naming the same truth.

The English root

"Do" → Old English dōn → Proto-Germanic dōną → Proto-Indo-European *dheh₁-

*dheh₁- doesn't mean "act." It means "to set, to place, to establish, to put into being." The Doer is not acting — the Doer is SETTING. Placing reality, establishing the day, putting the life he wants into existence one Rite at a time.

The family from the same PIE root

WordLanguageMeaning
Do, Deed, Doom, DeemEnglishDeed = that which is done. Doom = what is set (fate/judgment). Deem = to judge, to set down.
Thesis, ThemeGreekA thesis = a setting-down, a position taken
Tithēmi (τίθημι)Greek"I set, I place, I establish"
Theos (θεός)GreekGOD. Some etymologists trace it to the same root (debated)
DharmaSanskritFrom dhā (sister root) — "that which is established." Your path, your law.
KarmaSanskritFrom kṛ- — action as causal chain. The Doer is bound to his deeds.
Fact, Fiat, FactumLatinFacere = to do. "Fiat lux" — "Let it be done: light." God's first act is a doing.

The Japanese Dō (道) — the cross-linguistic miracle

Chinese 道 (dào) → Japanese 道 (dō) — "the way, the path, the method."

In every serious Japanese martial tradition, -dō names the path (as distinct from -jutsu, which names the technique):

  • Bushidō — way of the warrior
  • Taekwondo (Korean 도) — way of the foot and fist
  • Kendō — way of the sword
  • Aikidō — way of harmonious spirit
  • Judō — the gentle way
  • Karate-dō — way of the empty hand

Pre-20th-century Japan called these -jutsu (pure combat). The shift to -dō was intentional: elevating war-craft to spiritual discipline. Same technique, different frame.

Taoist depth: 道 (Tao/Dao) in Chinese = the underlying pattern of reality itself. Lao Tzu's opening: 道可道, 非常道 — "the Tao that can be told is not the eternal Tao."

The miracle

English "do" (PIE *dheh₁-) and Japanese "dō" (Chinese 道) are etymologically unrelated. Different language families. Different continents. Different millennia. No shared ancestor word.

Yet: same phonetic sound, same semantic clusterthe disciplined act of bringing-into-being through path-walking.

This is not etymology. Two traditions accidentally met on the same sound, naming the same truth. The convergence is real, linguistically defensible, and brand-ownable.

To DO is to walk the DŌ. One concept named twice, from opposite ends of the earth.

All paths converge here

TraditionWordWhat it names
EnglishDo / Doing (PIE *dheh₁-)To set, to establish — the act itself
Greek (Spartan)AgogeThe training-road
JapaneseDō (道)The Way
Chinese (Taoist)Tao / Dao (道)The underlying pattern of reality
SanskritDharmaEstablished law, path, duty
LatinViaThe road

Every tradition that produced serious men produced a word for this road. They all name the same thing.

The Aristotelian engine (Sam + Q only — internal)

  • Dynamis (δύναμις)potential, the capacity to do. A man has thumos as dynamis. Unused.
  • Energeia (ἐνέργεια)actuality, being-at-work. The man who activates it.

Every Sleeper is pure Dynamis. Every Doer is Energeia. The Agoge is a machine for converting one to the other. "We only care about what you are DO-ING" = "We only care about Energeia. Dynamis is ubiquitous and worthless."

Three-layer staged revelation

TierWhat members learn
Initiate"We only care about what you are DO-ING. The Sleeper thinks about it. The Doer does it."
Adept (2a — PIE root)"Do-ing is from the oldest word: to set, to place, to establish. When you do, you SET reality. Every Rite places one more brick of the man you're becoming."
Adept (2b — Japanese Dō)"Do is also Dō — the Way. Every martial tradition named the path the same: Bushi-dō, Taekwondo, Karate-dō, Aiki-dō. You've been walking it since the Gate. Do-ing is Dō-ing."
Magister (3 — universal)"Dharma, deed, doom, fact, thesis, theos, Tao, Dō. All the same word in different tongues. The Doer is not taking action — he is the grammar of creation itself."

Verbs unlocked

VerbTierUsage
"Do"Initiate"Did you do today?"
"Move your needle"InitiatePublic, clean
"Move your numen"AdeptEsoteric reveal (numen is the inner god)
"Walk the Dō"AdeptJapanese Way revealed
"Set your day"AdeptPIE root — "to set, place"
"Place the brick"AdeptOntological framing
"Dō your Rite"AdeptPunny double-read (do = dō)
"Thesis it"MagisterCoined — "he thesised today" = placed it into being
"Speak the fiat"Magister"He spoke the fiat and the day was done"

One-line anchors (copy for Sam)

  • "We only care about what you are DO-ING." (Sam's original — Initiate tier)
  • "The Sleeper thinks. The Doer walks the Dō."
  • "Bushidō. Taekwondo. Kendō. Every tradition named it Dō. In English we just call it Doing. Same word — older than either language."
  • "You didn't come here to do stuff. You came here to walk the Dō."
  • "Doing is the oldest word for godhood. When you move the needle, you speak the fiat."
  • "From Dynamis to Energeia. Latent to at-work. That's the only transition that matters."
  • "Dharma, deed, doom, fact, thesis, theos, Dō. All the same word. To do is to become the grammar of creation."

Hidden Mechanics (Sam + Q only)

Members never see these terms. Internal framework for how we think about the program.

TermWhat it names
The ScaleHawkins Power vs Force levels 20–1000
FrequencyA member's current Hawkins level
ElevationThe goal: Spiral Dynamics Tier 1 → Tier 2 consciousness
Karma-burnThe old patterns being shed as they level up

Rank → Hawkins → Spiral Dynamics Mapping (Hidden):

GradeHawkinsSpiral Dynamics
1-1 Neophyte200 CourageRed/Blue
1-2 Zelator250 NeutralityBlue
1-3 Theoricus310 WillingnessBlue/Orange
2-1 Adept350 AcceptanceOrange
2-2 Practicus380+Orange/Green
2-3 Philosophus395Green
3-1 Magister400 ReasonGreen
3-2 Magister Ordinis425Green/Yellow
3-3 Magister Templi450+Yellow (Tier 2)
Sanctum path500+Turquoise and beyond

Public path arc: Shame/Guilt (pre-200) → Reason/Yellow (450+). Full consciousness-tier transformation. The Sanctum is where Love/Peace/Turquoise unfold — revealed only to those who earn Magister Templi.

Staged Revelation (what unlocks at each tier)

  • Initiate (1-1 to 1-3): Thumos, Forge, Gate, Oath, Agoge, Squadron, BDE, Rite, Cycle, Milestones, Trial, Brother, Labyrinth, Empyrean
  • Adept (2-1 to 2-3): Adds Halls, Convocation, Breakthrough, Elders, Receipts, mentorship framework
  • Magister (3-1 to 3-2): Adds existence of the Sanctum, the Mount, meaning of individual Hall names
  • Magister Templi (3-3): Adds Hierophant identity, invitation mechanics
  • Sanctum path (post-3-3): Adds the Scale, Frequency, Elevation — the actual Hawkins framework. Final reveal: the Empyrean is within you. The Agoge was the wardrobe.

One-Line Anchors (marketing + sales)

  • "Thumos is the fire at ignition. The Empyrean is the fire realized. The Agoge is what lives between them."
  • "Every man is in the Labyrinth. Most never realize they can walk it."
  • "The path doesn't lead out. It leads to the center."
  • "We don't build friendships. We put men on the same path."
  • "The Warrior posts. The Sleeper scrolls."
  • "Every brother here walked the Gate. Every brother here is still walking."
  • "Nine grades from the Gate to the Sanctum. Nine steps from Neophyte to Magister Templi. The public Agoge ends where the inner path begins."

Design Principles

  • Historical weight without LARP. Every rank name is a real grade from Rosicrucian / Golden Dawn / Theosophy. 200+ years of real initiatic lineage.
  • Greek over Latin for spaces, Latin over Greek for grades. Spaces feel primal (Forge, Agoge, Empyrean); grades feel structured (Adept, Magister, Philosophus).
  • No blasphemy. Kingdom-of-God subtext without naming God. Empyrean = realized inner fire; Hierophant = revealer, not revelation.
  • Exoteric / esoteric split. Public path ends at 3-3. Sanctum names stay hidden. Staged revelation is the design principle, not a gimmick.
  • The name tells the work. Each grade's name IS its job description.
  • Hidden mechanics stay hidden. Hawkins / Spiral Dynamics mapping is for Sam + Q only. Members see belts and felt progression, not the underlying scale.
  • 3-3 as the "baby 33°". Masonic wink for those who know. Honorary culmination of the public path.

Telegram Bot

What It Is

@ThumosForgeBot is a Cloudflare Worker-powered bot. It has no separate server — it runs on the same thumos-api Worker as everything else. Telegram sends messages to /telegram endpoint via webhook.

How Post Detection Works

  1. Member posts a message in their squad Telegram group
  2. Telegram sends the message to our Worker webhook
  3. Worker checks: does the message have Action: AND Grateful: at the start of a line?
  4. If yes → look up the user by their Telegram ID in D1
  5. Check if they already posted today (UTC date) → if yes, silently ignore
  6. Record the post in daily_posts table (who, when, which squad, weekday/weekend)
  7. Calculate their new streak (consecutive weekdays with posts)
  8. Bot responds in the group: 🔥 username — Day X

Important: The bot NEVER stores message content. Only records that a post happened and when.

Post Format Rules

RequirementDetail
Both fields requiredAction: AND Grateful: — both must be present
Start of lineMust be at the beginning of a line, not mid-sentence
Colon requiredAction: works. Action test does not.
Case insensitiveaction: and ACTION: both work
One per dayFirst valid post counts. Duplicates silently ignored.
WeekendsRecorded but not counted toward score. Don't break streaks.

Streak Rules

Streak = consecutive weekdays with a recorded post. Counted backwards from today.

  • Post Mon-Fri → streak goes up
  • Miss a weekday → streak resets to 0
  • Saturday/Sunday → ignored (don't help, don't hurt)
  • Post on weekend → recorded but streak doesn't increase

8pm Reminder

A cron job runs every hour. For each active member, it checks: "Is it 8pm in their timezone?" If yes and they haven't posted today, the bot messages their squad group: [name] hasn't posted today.

Timezone is stored per user in D1 (detected from browser on signup). Default: America/New_York.

Known issue: If the Worker is redeployed while messages are in-flight, Telegram may mark them as delivered but the Worker didn't process them. Posts are lost — Telegram won't retry.

Account Linking

Members need their Telegram account linked to their THUMOS account for posts to be tracked.

Automatic (onboarding): "Join Squad" button on the onboarding completion screen is a deep link: https://t.me/ThumosForgeBot?start=LINK_{userId}. When they tap it, the bot auto-links their Telegram ID.

Manual: In a DM or group, send /link [email protected]. Bot looks up the email in D1 and links the Telegram ID.

Admin: Directly update D1: UPDATE users SET telegram_user_id='...' WHERE email='...'

Bot Commands

CommandWhereWhat
/startDMWelcome message with post format
/start LINK_XDMAuto-link Telegram to THUMOS account (X = user ID)
/link emailDM or groupManual link by email
/streakGroupShow your streak
/leaderboardGroupShow squad rankings
/chatidAnywhereShow chat ID (debug)

Group Welcome

When a new member joins a registered squad group, the bot automatically sends a welcome message with their name and the daily post format.

Groups

GroupChat IDPurpose
THUMOS-1003912158998Main group — all members + Sam. Topics enabled.
Squadron Lambda (Λ)-1003992128318First squad
Squadron Theta (Θ)-1003673790148Second squad

To add a new squad: create Telegram group → add @ThumosForgeBot as admin → use /chatid to get the ID → add squad in Admin panel or D1.

Troubleshooting

ProblemCauseFix
Bot doesn't respond to postsWorker was redeployed while messages in-flightPost again — next message will work
Member posts but no 🔥Telegram ID not linkedDM bot: /link email
Already posted but shows 0dDuplicate check blocked (curl test or timezone mismatch)Check D1 for existing today post
Wrong timezone reminderUser timezone not setUpdate in D1: UPDATE users SET timezone='...'
Bot not receiving messages at allWebhook deregisteredVisit thumos-api.q-2f4.workers.dev/telegram/setup

Scoring & Ranks

Personal Score (per cycle)

(posts ÷ weekdays × 50) + (milestones_hit ÷ 3 × 50) = max 100

Example: 18 posts out of 22 weekdays = 40.9 pts. Hit 2 of 3 milestones = 33.3 pts. Total = 74.2 pts.

Squad Score (per cycle)

Same formula but aggregated across all squad members. Percentage-based so squad size doesn't matter.

Stored in squads.cycle_total_score. Recalculated nightly at midnight UTC.

Cumulative Score

Personal score carries over between cycles. Stored in users.cumulative_score. Determines rank.

Ranks

RankPointsTimeline
Initiate0-1990-3 months
Journeyman200-4993-6 months
Adept500+8-12 months

Rank persists forever. Leaderboard resets each cycle.

Cycles

  • ~30 days per cycle
  • Start: squad scores reset, new cycle record created
  • End: pick winning squad → private debrief with Sam
  • New members mid-cycle: excluded from squad score

Milestones

  • 3 per user per cycle: Body, Women, Money
  • Set during onboarding or cycle start
  • Visible to squad. Cannot be changed.
  • Declare hit/miss at cycle end

Infrastructure

Architecture

Everything runs on Cloudflare. One Worker (thumos-api) handles all API requests. One D1 database (thumos-db) stores all data. Three Pages projects serve the websites.

Services

ComponentServiceURL/ID
APICloudflare Workerthumos-api.q-2f4.workers.dev
DatabaseCloudflare D1thumos-db (c90051c3...)
Main siteCloudflare Pagesthumos.academy
EditorCloudflare Pageseditor.thumos.academy
AdminCloudflare Pagesadmin.thumos.academy
VideosCloudflare StreamStream IDs in D1 lessons table
PaymentsStripeprod_UILptFYD8wxzKO
Transactional emailResend[email protected] (booking confirmations) · [email protected] (onboarding)
Member botTelegram@ThumosForgeBot (squad groups, daily posts)
CRM botTelegramPRAGMA → Thumos CRM topic #768 (applications + bookings pings)
Calendar + MeetGoogle WorkspaceTHUMOS Consults calendar (on [email protected]) + service account thumos-booking@theotherside-490901

Worker Secrets

All set via npx wrangler secret put <NAME> inside deploy_api/.

SecretWhat
STRIPE_SECRET_KEYStripe payments
STRIPE_WEBHOOK_SECRETStripe webhook signature verification
RESEND_API_KEYTransactional email (booking + welcome)
TELEGRAM_BOT_TOKENTHUMOS member bot (@ThumosForgeBot)
PRAGMA_BOT_TOKENPRAGMA bot — CRM pings
PRAGMA_GROUP_IDPRAGMA supergroup ID (-1002616802728)
THUMOS_CRM_THREAD_IDThumos CRM topic inside that group (768)
GOOGLE_SA_EMAILService account email for Calendar API
GOOGLE_SA_PRIVATE_KEYService account PEM private key
GOOGLE_IMPERSONATE_USERUser the SA impersonates ([email protected])
GOOGLE_CALENDAR_IDTHUMOS Consults calendar ID (where events land)
SAM_EMAILSam's email — attendee on every booking ([email protected])
SAM_CALENDAR_IDSam's calendar ID — queried via freeBusy to subtract his real events ([email protected])

D1 Tables

Core

TableWhatKey Fields
usersMembersemail, plan, squad_id, rank, telegram_user_id, timezone
sessionsAuth tokensuser_id, token, expires_at
squadsSquadronsname, telegram_group_id, cycle scores
daily_postsPost trackinguser_id, squad_id, posted_at, counted
milestonesUser goalsuser_id, cycle_id, realm, text, declared_hit
cycles30-day roundsstart_date, end_date, status, winning_squad_id
progressCourse completionuser_id, course_slug, lesson_id
courses / lessons / lesson_flagsCourse content + audit flags

Applications + Booking (added 2026-04-19)

TableWhatKey Fields
applications/apply submissionsname, email, goal, why_now, income_range, status, notes
calendarsMulti-tenant calendarsslug, timezone, slot_duration, booking_lead, booking_horizon
availability_rulesWorking windows per calendarday_of_week, start_time, end_time
bookingsScheduled callsslot_start, guest_email, application_id, meet_url, google_event_id, status
date_overridesBlocked datesdate, type

Deploy Commands

# API (Worker)
cd selene/markets/thumos/deploy_api && npx wrangler deploy

# Main site
npx wrangler pages deploy "selene/markets/thumos/deploy_main" --project-name=thumos-academy --commit-dirty=true

# Editor
npx wrangler pages deploy "selene/markets/thumos/deploy_editor" --project-name=thumos-editor --commit-dirty=true

# Admin
npx wrangler pages deploy "selene/markets/thumos/deploy_admin" --project-name=thumos-admin --commit-dirty=true

# Or: git push (auto-deploys main site)

Worker Secrets

Set via npx wrangler secret put NAME from deploy_api/:

  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET
  • RESEND_API_KEY
  • TELEGRAM_BOT_TOKEN

Operations Playbook

Scale posture — current status

The system is built for 10 → 30 active members. Cloudflare Workers + D1 at our volume is effectively unlimited. The real constraints are squad balance, bot rate limits during onboarding bursts, and admin workflow hygiene.

LayerCurrent capAction needed at 30
Squad capacity10 / squad (SQUAD_CAP in worker.js)Open Squadron #3 before Lambda + Theta hit 20 active
Stripe webhookDeduped via processed_events
Admin /admin/usersBatch-queried (2 D1 calls total)
Bot rate limits~20 msg/s per groupStagger cohort enrollments if 5+ join at once
Cron reminderRuns hourly, 1 query/userRewrite as GROUP BY at ~50 members

Daily ops (≤ 2 min)

  1. Open Members tab — scan for anyone stuck in non-terminal onboarding states (m1_bridge, m4_missing, squad_briefed, confirm) for >24h. Use Reset TG button to unblock if needed.
  2. Open Bookings tab — check upcoming calls today/tomorrow.
  3. Scan Applications (Pending) — respond to anything > 24h old.

Weekly ops

  1. Squad balance check — Squads tab: are Lambda + Theta within ±2 of each other? If imbalanced, use the Members tab squad dropdown to rebalance manually.
  2. Streak distribution — who's at < 3d streak? Are they new, or drifting? DM their squad if drifting.
  3. Ghost check — anyone with no post in > 5 days? Not yet auto-flagged — manual today. (Backlogged: 21-day auto-eviction per M4 copy.)

Diagnosing a stuck user

New member says "the bot isn't responding" or "my portal is locked." Walk through in this order:

  1. Members tab → find them → check the Onboarding column badge:
    • Web pending → haven't signed the oath yet. Direct them to thumos.academy/onboarding.
    • Bot not opened → finished web form, never opened bot DM. Resend the tg://resolve?domain=ThumosForgeBot&start=LINK_<id> link.
    • TG m1_bridge/m2_photo/m3_bde/m4_missing → mid-DM flow, haven't tapped buttons.
    • TG squad_briefed → joined squad, haven't posted first BDE.
    • TG confirm → posted first BDE, haven't joined Main Hall.
    • Complete → portal unlocked, should work.
  2. If they're on the portal gate screen but should be through — their onboarding_step hasn't advanced to portal. Usually because they joined Main Hall from a different Telegram account than the one linked. Click Reset TG and have them re-run /start LINK_<id>.
  3. Still stuck? Check Cloudflare Workers dashboard → thumos-api → Logs. Or run wrangler tail thumos-api locally and ask them to repeat the action.

Adding a new squadron

When Lambda + Theta near 20 active members combined, open Squadron #3:

  1. Create the Telegram group (e.g. "Squadron Sigma"), add @ThumosForgeBot as admin.
  2. Grab the chat ID from the bot: open the group, run /threads or use /dev/telegram-threads.
  3. Insert row: INSERT INTO squads (name, telegram_group_id) VALUES ('Squadron Sigma', '-100XXXXXX');
  4. Edit selene/markets/thumos/deploy_api/worker.js — add the new squad to the SQUAD_LINKS constant with its invite URL.
  5. Redeploy worker. Next auto-assign picks up the new squad automatically via pickSquadForNewMember overflow logic.

Deleting a test user (safe)

Use the Delete button in Members tab. Cascades to daily_posts, milestones, sessions. Admin-role users are blocked from deletion (guardrail). Before re-running a full onboarding test: have the test account leave Squadron Lambda + Main Hall in Telegram FIRST — the new_chat_members event must refire for the squad briefing + Main Hall homecoming to trigger.

Rolling back a bad deploy

If a worker deploy breaks something:

# List recent deploys
cd selene/markets/thumos/deploy_api
npx wrangler deployments list

# Roll back to a specific version
npx wrangler rollback --version-id=<uuid>

D1 has no built-in point-in-time restore. Critical writes to production D1 should be scripted + reviewed — no manual DELETE FROM users in production without a dry-run SELECT first.

Known limitations (backlogged)

  • No 21-day auto-eviction yet — ghosts stay assigned forever until manually removed.
  • No /missed or /timeoff slash commands yet — users can't self-manage breaks.
  • SQUAD_CAP race possible under 10+ simultaneous payments — use admin squad dropdown to rebalance if it happens.
  • No nightly D1 backup — rely on Cloudflare's internal durability.
  • 🏆 completion-tracking protocol mentioned in M3 copy not implemented.
  • Photo-upload gate in M2 advances on click, not real photo detection.

Full list: see selene/markets/thumos/SCALE_AUDIT_2026_04_22.md in repo.

Onboarding Changes
Open editor →
Load to see changes.
Course Health
CourseLessonsRed FlagsOrangeResolved