Answer each question top to bottom.
Ask for the next number in the master sheet (e.g. HCS-219 — the running
per-program count, never restarting at 001). Adopt it verbatim. It’s immutable once set.
flowchart TD
A["fa:fa-calendar-plus A class needs to go on the calendar"]:::sys --> Q{"Has this class been
taught before?"}:::dec
Q -- "yes — it exists" --> R["fa:fa-hashtag Same letters as before — HCS · TFM · TSP
ask the sheet for the next number"]:::acct
Q -- "no — brand new" --> N["fa:fa-file-circle-plus Accounting issues a new letter prefix
and starts its count"]:::acct
R --> ID["fa:fa-lock Course ID — e.g. HCS-219
adopt verbatim · immutable once set"]:::ok
N --> ID
classDef acct fill:#fdf4e3,stroke:#d9ab3c,stroke-width:1.4px,color:#8a6412;
classDef sys fill:#fff,stroke:#cdd3d9,color:#232b33;
classDef dec fill:#fff5ee,stroke:#EB5825,color:#8a3d1e;
classDef ok fill:#eef6f3,stroke:#1d7a5f,color:#1d7a5f;
flowchart TD
S["fa:fa-calendar-plus New class to add"]:::sys --> Q1{"Has this class been taught before?
does its class code already exist?"}:::dec
Q1 -- "no — brand-new class" --> W1["fa:fa-globe Build the WordPress pages by hand
catalog entry + course description page
once per class — every future run reuses them"]:::wp
W1 --> A2["fa:fa-file-circle-plus Issue a new class code prefix
in the master sheet"]:::acct
A2 --> H3["fa:fa-code-branch Register the program in
naming-canonical.json"]:::hs
H3 --> Q2
Q1 -- "yes — repeat class" --> Q2{"Does this course run over multiple
non-contiguous days?"}:::dec
Q2 -- "yes" --> S1["fa:fa-layer-group No new Course ID —
add this day as a Session
on the existing Course"]:::hs
S1 --> STOP["fa:fa-circle-check Stop — nothing further needed"]:::ok
Q2 -- "no — consecutive days,
or a standalone class" --> A1["fa:fa-hashtag Get the Course ID for this cohort
e.g. HCS-219 · adopt verbatim"]:::acct
A1 --> H1["fa:fa-video Set class template + delivery_mode
a real variant gets its own letters — V-HCS"]:::hs
H1 --> H2["fa:fa-hand Create the Course record
the one manual step"]:::manual
H2 --> WP["fa:fa-bolt Automation creates the event and its tickets
the description page is not touched"]:::wp
WP --> DONE["fa:fa-circle-check Live in both systems
one Course ID ties registrations to revenue"]:::ok
classDef acct fill:#fdf4e3,stroke:#d9ab3c,stroke-width:1.4px,color:#8a6412;
classDef hs fill:#FDEBE8,stroke:#EF4C32,color:#a3301c;
classDef manual fill:#FDEBE8,stroke:#EF4C32,stroke-width:2px,color:#a3301c;
classDef wp fill:#eef2f7,stroke:#7d8ca5,color:#28344a;
classDef sys fill:#fff,stroke:#cdd3d9,color:#232b33;
classDef dec fill:#fff5ee,stroke:#EB5825,color:#8a3d1e;
classDef ok fill:#eef6f3,stroke:#1d7a5f,color:#1d7a5f;
Four things live on the site. Only the bottom two are automated.
| What | Example | How often | Who builds it |
|---|---|---|---|
| Catalog listing | /course-catalog-2/ | Once per class | By hand |
| Course description page what the class is, who it’s for |
/hue-methods/hue-communication-strategies/ | Once per class | By hand |
| Event one specific run — dates, venue |
/event/hue-communication-strategies-10/ | Every run | Automated |
| Tickets the products people buy |
attached to that event | Every run | Automated |
It never creates or edits the catalog listing or the course description page. Those are written once when the class is new, and every future run of that class points back at them — which is why a brand-new class has to have them in place before its first event can be generated.
It also means a wording change to what the class is happens in one place, by hand, and applies everywhere. Changing dates, venue or price is the event, and that is automatic.
Two different codes do two different jobs. Mixing them up is the most common mistake here.
| Code | Example | What it decides |
|---|---|---|
Program codeprogram_code |
HCS |
The broad curriculum. Drives the number sequence (HCS-217, HCS-218…) and how revenue rolls up. |
Class templatecourse_template |
HCS · V-HCS · MToP Int 1 |
The specific class type or variant. This is what WordPress reads to pick the event content template to clone — keyed on the class template, not the program code. |
Where the mapping lives: the master sheet’s TemplateCode column is the source of
truth for the letters. They are mapped back to a program code in
hubspot-schema/naming-canonical.json → template_code_map. Most are identity
(TFM → TFM); the interesting ones are not:
"HCS" → "HCS" the standard in-person class
"V-HCS" → "HCS" virtual variant — own template, same program
"HC" → "HCS" pre-rebrand 2025 code, same class
If the class is delivered differently enough that it can’t reuse the same event page and materials,
it is a new class template — give it its own code. Virtual is the clearest case:
V-HCS exists because a virtual run needs its own content template (joining instructions instead
of a venue, different timings, different materials), even though it teaches the same curriculum.
What does not change: V-HCS still maps to HCS, so it keeps the HCS
number sequence and rolls up with HCS revenue. A different room or a different trainer is not a
fundamental difference — that is the same template, a new Course ID.