| Name | Age | What they do | Submitted | Status | Actions |
|---|
| When | Guest | Calendar | Application | Actions |
|---|
| Name | Plan | Squad | Streak | Rank | Status | Actions |
|---|
| # | Start | End | Status | Winner | Actions |
|---|
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)
- Discovery — they land on thumos.academy (price is hidden; all CTAs → /apply)
- 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. - 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.
- 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.
- Confirmation email — Resend email from [email protected] with the Meet link. PRAGMA pings Thumos CRM with
#booking. - The call — Q / Sam runs the call. Decision: enroll, reject, or follow up.
- Enrollment — if yes, Q sends the Stripe checkout link or admin-creates the user. Stripe webhook → D1
usersrow + welcome email. - Onboarding — 3 steps: sign the commitment, set milestones (body/women/money), write first gratitude post.
- Telegram Link — "Join Squad" button opens a bot DM that auto-links Telegram to their account.
- Daily Life — every weekday they post
Action:+Grateful:in their squad. Bot detects, records, responds. - 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.
| Rank | Points | Typical Timeline |
|---|---|---|
| Initiate | 0-199 | 0-3 months |
| Journeyman | 200-499 | 3-6 months |
| Adept | 500+ | 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
| System | When | What |
|---|---|---|
| Stripe webhook | On payment | Creates user + sends welcome email |
| Post detection | Every message in squad | Checks format → records post → responds with 🔥 |
| 8pm reminder | Every hour (checks user timezone) | If it's 8pm for a user and they haven't posted → bot messages squad |
| Score recalc | 5:00 UTC daily | Recalculates all squad scores |
| Bot auto-link | User taps deep link | Links Telegram ID to THUMOS account |
| Group welcome | User joins squad | Bot sends welcome message with post format |
Invite Codes
Free members use invite links: thumos.academy/invite?code=FORGEDAY1
| Code | Squad | For |
|---|---|---|
| FORGEDAY1 | Squadron Lambda | OG fight camp / BDE members |
| FORGETHETA | Squadron Theta | Second group |
To add new codes: edit INVITE_CODES in worker.js and redeploy.
Telegram Groups
| Group | Purpose | Invite |
|---|---|---|
| THUMOS | All members + Sam. Topics enabled. | Link |
| Squadron Lambda (Λ) | First squad | Link |
| Squadron Theta (Θ) | Second squad | Link |
Bot: @ThumosForgeBot
Infrastructure
| Component | Service | URL |
|---|---|---|
| API | Cloudflare Worker | thumos-api.q-2f4.workers.dev |
| Database | Cloudflare D1 | thumos-db |
| Main site | Cloudflare Pages | thumos.academy |
| Editor | Cloudflare Pages | editor.thumos.academy |
| Admin | Cloudflare Pages | admin.thumos.academy |
| Videos | Cloudflare Stream | Stream IDs in D1 |
| Payments | Stripe | Product: prod_UILptFYD8wxzKO |
| Resend | [email protected] | |
| Bot | Telegram | @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
| Field | Required | Why |
|---|---|---|
| name | yes | obvious |
| yes | for follow-up + confirmation | |
| age | no | qualification signal (18–28 is sweet spot) |
| occupation | no | context for the call |
| goal | yes | "What do you want?" — most important answer |
| why_now | no | urgency / stakes — reveals readiness |
| income_range | no | informs payment-plan offer |
| no | vibe check before the call | |
| source | auto | UTM params + referrer, captured silently |
Status flow
- pending — default on submit. Needs review.
- invited — reviewed, good fit, moved forward (booking exists or invite sent).
- rejected — reviewed, not a fit right now.
- 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
- Applicant fills out /apply → application row saved → PRAGMA pinged
- Apply page flips to the inline slot picker (same page, no redirect)
- JS fetches
/api/book/thumos-apply/dates?month=YYYY-MM— worker generates slots fromavailability_rules, subtracts existing bookings, subtracts Sam's real calendar events via Google freeBusy API, returns dates where anything is free - Applicant picks a date →
/api/book/thumos-apply/slots?date=…returns open times for that day (same filter logic) - Applicant picks a slot →
POST /api/book/thumos-apply/bookwith the chosen UTC time, name, email, application_id - 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:
- Marks
status='cancelled'in D1 - Deletes the Google Calendar event with
sendUpdates=all— both parties get a Google cancellation notice - 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
| Path | URL | What happens before |
|---|---|---|
| Paid | thumos.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. |
| Invited | thumos.academy/invite?code=X | Enter 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."
| Step | Theme | Key line | Button |
|---|---|---|---|
| 1 Welcome | Threshold | "You crossed the gate." Say out loud: "I am here to become the man I am capable of being." | I said it. Continue → |
| 2 Squad | Brotherhood | "Your squad is 8 brothers. You carry their weight when they break. They carry yours." | I'm ready → |
| 3 BDE | The Rite | Format + WHY it works (Action kills "busy"; Grateful rewires attention). At milestone checks, Receipts required. | Understood → |
| 4 Streaks | Visibility | "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 tour | Outer ring | The 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 join | Initiation | 3-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 Complete | Home | "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)
| Gate | How to pass | Unlocks |
|---|---|---|
| Gate 1 | Post first BDE in squad | Read + post access to THUMOS Main |
| Gate 2 | Post 3-part initiation (Trial + BDE + deep question) in squad | Full 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
| Term | What it names |
|---|---|
| Thumos | The program; fire of the spirit at ignition |
| The Forge | The crucible — where transformation happens |
| The Gate | The entry threshold |
| The Agoge | The training path (Spartan: the warrior-philosopher's education from age 7 to 30) |
| The Labyrinth | What 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 Empyrean | The destination. Realm of realized fire. Kingdom within. Thumos fully lit. Greek empyros = "in fire." |
| The Sanctum | Hidden upper rooms — esoteric path, earned by rank |
| The Mount | Sam's inner circle; Hierophant-tier |
| The Halls | Collective name for THUMOS main rooms |
| Squadron | 8-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.)
| Grade | Name | Meaning | Belt |
|---|---|---|---|
| 1-1 | Neophyte | Greek: "newly planted" | White |
| 1-2 | Zelator | Latin: "zealous one" — the fire has caught | Yellow |
| 1-3 | Theoricus | Greek: "theorist" — sees the structure | Orange |
Tier 2 — ADEPT (The work is bearing another. Rite is automatic; attention turns outward. The man proves he can carry.)
| Grade | Name | Meaning | Belt |
|---|---|---|---|
| 2-1 | Adept | Latin adeptus: "one who has attained" | Green |
| 2-2 | Practicus | Latin: "practitioner" — embodies the work | Blue |
| 2-3 | Philosophus | Greek: "lover of wisdom" — speaks the why | Purple |
Tier 3 — MAGISTER (The work is holding the container. Shaping conditions for growth. The man proves he can build.)
| Grade | Name | Meaning | Belt |
|---|---|---|---|
| 3-1 | Magister | Latin: "master" — shapes the container | Brown |
| 3-2 | Magister Ordinis | "Master of the Order" — cross-squad authority | Red |
| 3-3 | Magister 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)
| Transition | Gate (short) |
|---|---|
| 1-1 → 1-2 | 30 Rites, 1 Trial video, 1 Convocation attended |
| 1-2 → 1-3 | 60 Rites, 1 Breakthrough declared + witnessed |
| 1-3 → 2-1 | 1st Cycle 3/3 hit, sponsor a Neophyte |
| 2-1 → 2-2 | 2 Neophytes sponsored, Convocation contribution, 2nd Cycle |
| 2-2 → 2-3 | Deliver a teaching (acknowledged), 3rd Cycle |
| 2-3 → 3-1 | Lead a squad 1 Cycle + composure test, Hierophant approval |
| 3-1 → 3-2 | 6+ months squad lead, 1 Neophyte→Adept carry, 4th–5th Cycles |
| 3-2 → 3-3 | 1+ year cross-squad lead, Yellow-tier thinking, full transformation visible |
| 3-3 → Sanctum | Invitation 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
| Term | What it names |
|---|---|
| Brother | Lateral term every member uses regardless of grade |
| The Elders | Any grade Magister or above with mentorship duty |
| The Hierophant | Sam's title (Greek: "revealer of sacred things") |
Practices & Rituals
| Term | What it names |
|---|---|
| BDE / The Rite | Daily weekday post. Action + Grateful, binary format. "BDE" = casual; "the Rite" = sacred. Use both. |
| The Oath | The commitment signed on the website |
| The Trial | Physical test video required for initiation and rank-up |
| The Initiation | Full entry ritual — Trial video + first BDE + one deep exposing question |
| Convocation | The weekly group call |
| Receipts | Proof-of-work at milestone checkpoints |
| The Cycle | 30-day milestone period |
| Milestones | Per-cycle goals — 3 per cycle × 12 cycles = 36 goals per year (core mechanism) |
| Breakthrough | The cognitive/emotional rupture that triggers rank advancement |
NLP Dichotomy (for copy)
| Light (Higher Self) | Shadow (Lower Self) |
|---|---|
| The Warrior | The Sleeper |
| The Man You Said You Were Becoming | The Man You Were |
| The Flame | The Dim |
| The Forge | The Labyrinth |
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."
Hidden Mechanics (Sam + Q only)
Members never see these terms. Internal framework for how we think about the program.
| Term | What it names |
|---|---|
| The Scale | Hawkins Power vs Force levels 20–1000 |
| Frequency | A member's current Hawkins level |
| Elevation | The goal: Spiral Dynamics Tier 1 → Tier 2 consciousness |
| Karma-burn | The old patterns being shed as they level up |
Rank → Hawkins → Spiral Dynamics Mapping (Hidden):
| Grade | Hawkins | Spiral Dynamics |
|---|---|---|
| 1-1 Neophyte | 200 Courage | Red/Blue |
| 1-2 Zelator | 250 Neutrality | Blue |
| 1-3 Theoricus | 310 Willingness | Blue/Orange |
| 2-1 Adept | 350 Acceptance | Orange |
| 2-2 Practicus | 380+ | Orange/Green |
| 2-3 Philosophus | 395 | Green |
| 3-1 Magister | 400 Reason | Green |
| 3-2 Magister Ordinis | 425 | Green/Yellow |
| 3-3 Magister Templi | 450+ | Yellow (Tier 2) |
| Sanctum path | 500+ | 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
- Member posts a message in their squad Telegram group
- Telegram sends the message to our Worker webhook
- Worker checks: does the message have
Action:ANDGrateful:at the start of a line? - If yes → look up the user by their Telegram ID in D1
- Check if they already posted today (UTC date) → if yes, silently ignore
- Record the post in
daily_poststable (who, when, which squad, weekday/weekend) - Calculate their new streak (consecutive weekdays with posts)
- 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
| Requirement | Detail |
|---|---|
| Both fields required | Action: AND Grateful: — both must be present |
| Start of line | Must be at the beginning of a line, not mid-sentence |
| Colon required | Action: works. Action test does not. |
| Case insensitive | action: and ACTION: both work |
| One per day | First valid post counts. Duplicates silently ignored. |
| Weekends | Recorded 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
| Command | Where | What |
|---|---|---|
/start | DM | Welcome message with post format |
/start LINK_X | DM | Auto-link Telegram to THUMOS account (X = user ID) |
/link email | DM or group | Manual link by email |
/streak | Group | Show your streak |
/leaderboard | Group | Show squad rankings |
/chatid | Anywhere | Show 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
| Group | Chat ID | Purpose |
|---|---|---|
| THUMOS | -1003912158998 | Main group — all members + Sam. Topics enabled. |
| Squadron Lambda (Λ) | -1003992128318 | First squad |
| Squadron Theta (Θ) | -1003673790148 | Second 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
| Problem | Cause | Fix |
|---|---|---|
| Bot doesn't respond to posts | Worker was redeployed while messages in-flight | Post again — next message will work |
| Member posts but no 🔥 | Telegram ID not linked | DM bot: /link email |
| Already posted but shows 0d | Duplicate check blocked (curl test or timezone mismatch) | Check D1 for existing today post |
| Wrong timezone reminder | User timezone not set | Update in D1: UPDATE users SET timezone='...' |
| Bot not receiving messages at all | Webhook deregistered | Visit 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
| Rank | Points | Timeline |
|---|---|---|
| Initiate | 0-199 | 0-3 months |
| Journeyman | 200-499 | 3-6 months |
| Adept | 500+ | 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
| Component | Service | URL/ID |
|---|---|---|
| API | Cloudflare Worker | thumos-api.q-2f4.workers.dev |
| Database | Cloudflare D1 | thumos-db (c90051c3...) |
| Main site | Cloudflare Pages | thumos.academy |
| Editor | Cloudflare Pages | editor.thumos.academy |
| Admin | Cloudflare Pages | admin.thumos.academy |
| Videos | Cloudflare Stream | Stream IDs in D1 lessons table |
| Payments | Stripe | prod_UILptFYD8wxzKO |
| Transactional email | Resend | [email protected] (booking confirmations) · [email protected] (onboarding) |
| Member bot | Telegram | @ThumosForgeBot (squad groups, daily posts) |
| CRM bot | Telegram | PRAGMA → Thumos CRM topic #768 (applications + bookings pings) |
| Calendar + Meet | Google Workspace | THUMOS Consults calendar (on [email protected]) + service account thumos-booking@theotherside-490901 |
Worker Secrets
All set via npx wrangler secret put <NAME> inside deploy_api/.
| Secret | What |
|---|---|
STRIPE_SECRET_KEY | Stripe payments |
STRIPE_WEBHOOK_SECRET | Stripe webhook signature verification |
RESEND_API_KEY | Transactional email (booking + welcome) |
TELEGRAM_BOT_TOKEN | THUMOS member bot (@ThumosForgeBot) |
PRAGMA_BOT_TOKEN | PRAGMA bot — CRM pings |
PRAGMA_GROUP_ID | PRAGMA supergroup ID (-1002616802728) |
THUMOS_CRM_THREAD_ID | Thumos CRM topic inside that group (768) |
GOOGLE_SA_EMAIL | Service account email for Calendar API |
GOOGLE_SA_PRIVATE_KEY | Service account PEM private key |
GOOGLE_IMPERSONATE_USER | User the SA impersonates ([email protected]) |
GOOGLE_CALENDAR_ID | THUMOS Consults calendar ID (where events land) |
SAM_EMAIL | Sam's email — attendee on every booking ([email protected]) |
SAM_CALENDAR_ID | Sam's calendar ID — queried via freeBusy to subtract his real events ([email protected]) |
D1 Tables
Core
| Table | What | Key Fields |
|---|---|---|
| users | Members | email, plan, squad_id, rank, telegram_user_id, timezone |
| sessions | Auth tokens | user_id, token, expires_at |
| squads | Squadrons | name, telegram_group_id, cycle scores |
| daily_posts | Post tracking | user_id, squad_id, posted_at, counted |
| milestones | User goals | user_id, cycle_id, realm, text, declared_hit |
| cycles | 30-day rounds | start_date, end_date, status, winning_squad_id |
| progress | Course completion | user_id, course_slug, lesson_id |
| courses / lessons / lesson_flags | Course content + audit flags | — |
Applications + Booking (added 2026-04-19)
| Table | What | Key Fields |
|---|---|---|
| applications | /apply submissions | name, email, goal, why_now, income_range, status, notes |
| calendars | Multi-tenant calendars | slug, timezone, slot_duration, booking_lead, booking_horizon |
| availability_rules | Working windows per calendar | day_of_week, start_time, end_time |
| bookings | Scheduled calls | slot_start, guest_email, application_id, meet_url, google_event_id, status |
| date_overrides | Blocked dates | date, 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_KEYSTRIPE_WEBHOOK_SECRETRESEND_API_KEYTELEGRAM_BOT_TOKEN
| Course | Lessons | Red Flags | Orange | Resolved |
|---|