Repository navigation
Description
Header
- Priority: High (CEO-approved outreach unlock — free Partner Channel pitch)
- Assignee posture: Denise-ready P0 slices below — implement in order; each slice has its own ACs
- Must NOT block: Core matching V1, individual tutor checkout ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543 materials), private verification
- Depends on / related (shipped bases — reuse, do not rebuild):
- #412 —
/business/joinBR + EA-safe org fields (CLOSED) - #548 — Unified Channel Profile + centre affiliations (CLOSED)
- #550 — Centre Workspace multi-staff + inbox (CLOSED)
- #256–#258 absorbed by [Compliance / B2B] Extend centre partnership (#251/#256–258): 3-step EA-safe triage, BR org fields, COMPLIANCE_HOLD, How-it-works Partners tab #412 — centre student case / partnership / guide Partners tab
- #543 / #573 — digital Notes/materials Stripe 2% + 72h (centre posts as Centre)
- #423 Cap.57 case chip · #549 Posts · #576 Join Option 4 routes here
- Centre case board/reveal: #583 / #582 under #552 — do not re-spec case fees here
- #412 —
- Must NOT unpark: #413 vacancy SaaS · #458 Institutional Shop checkout · #475 tutoring tuition escrow/payouts · full #530 Academy Ops ERP (later / Managed only)
- Duplicate: #578 closed — implement once here
Denise-ready Ship checklist (P0 — ordered)
CEO 2026-11-03: Soft-launch Thin Partner Channel for free centre onboard. Course cards = Enquire / lead-gen only. Cap.57 + Cap.279 locks stay. Full shop stays parked.
Definition of done — outreach pitch
Founder can email / visit centres and honestly offer:
Free Partner Centre → public channel (
/en/business/[slug]) · Notes/materials · affiliated tutors · centre student cases / tutor obtain · Cap.57 independent-educator posture. Course cards = Enquire (lead-gen). No on-platform class tuition cart.
Ship is done when that sentence is true in product + copy (EN + 繁中), with empty states that do not imply a full tuition shop.
Slice 0 — Wire existing bases (smoke, no new product)
Reuse only. Confirm live paths before new UI.
-
/business/join([Compliance / B2B] Extend centre partnership (#251/#256–258): 3-step EA-safe triage, BR org fields, COMPLIANCE_HOLD, How-it-works Partners tab #412) creates/activates org with BR + legal fields - Channel profile exists for centre slug ([Feature · V1 · #459] Unified Channel Profile: inline owner view, Materials & Hours tabs, Centre Affiliation & Pro-Bono capacity #548)
- Workspace Mode + Centre Inbox exist ([Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550)
- Materials can post as Centre ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543 rails)
- Centre-routed case path exists ([Compliance / B2B] Extend centre partnership (#251/#256–258): 3-step EA-safe triage, BR org fields, COMPLIANCE_HOLD, How-it-works Partners tab #412 / # Issue C1 — Centre student case #256 intent)
AC: Smoke checklist green in staging; blockers filed as comments on this issue (do not invent parallel tickets).
Slice 1 — 60-second activation + Cap.57 / Cap.279 / B2B checkboxes (P0)
Goal: Centre publishes a Partner Channel in ~60–90s with compliance locks.
Required fields (align live #412):
- Public name EN / 繁中 +
@slug legal_entity_name(staff/verify; may differ from public name)rep_name+rep_roleorg_type:tutorial_centre|day_school|ngo- ≥1 district/address + contact email or WhatsApp
br_number- Mandatory unticked checkbox (publish blocked until checked):
- EN: confirm (1) educators engaged as independent operators with zero admin/reception duties (Cap. 57), (2) courses comply with Cap. 279, (3) agree MatchMax B2B Partner Introduction Fee on enrolled student referrals
- 繁中 equivalent on same checkbox
Optional: logo · EDB / school reg no. (trust pill only after staff verify) · curricula/subjects tags · website
MUST: Publish blocked until required fields + policy checkbox complete.
MUST NOT: Imply MatchMax employs centre tutors or is Cap.279 registrar.
AC:
- Thin sheet collects all required fields above
- Unchecked policy → Continue disabled + inline error
- Success → channel published → redirect
/en/business/[slug]Edit Mode - EDB number stored but hidden publicly until staff verified
- Copy EN + 繁中 for labels, errors, checkbox
Slice 2 — Public channel polish (P0)
Goal: Partner storefront that looks pitch-ready without shop checkout.
Surface: /en/business/[slug] (and 繁中 locale twin).
- Header: logo, public name,
@slug, districts, optional Verified Partner badge, optional verified EDB pill - Sticky / primary CTA:
Enquire with Centre/向中心查詢 - Stats row (counts): Affiliated Tutors · Active Courses · Study Notes
- Tabs:
Courses & Classes/課程及常規班·Our Tutors/導師團隊·Study Materials/精讀筆記·Posts/中心動態 - Footnote Cap.57/279 (see Exact copy)
AC:
- Desktop 3-col / mobile 1-col layouts
- Verified Partner badge only when org partnership approved
- No Hire / Recruit / Vacancy / Apply-to-centre language anywhere on channel
- EN + 繁中 tab labels + footnote
Slice 3 — Our Tutors affiliations tab (P0)
Goal: Show mutually approved #548 affiliates only; Cap.57 subtitle; correct lead ownership.
- Permanent Cap.57 subtitle:
- EN:
Verified independent educators and faculty affiliated with {Centre Name}. - 繁中:
與 {Centre Name} 合作之認證獨立導師及教學團隊。
- EN:
- Tutor appears only when both tutor + Centre Admin approved affiliation
- Routing:
- Request Lesson from Our Tutors tab → Centre Workspace (
case.centre_idset, tagged tutor) - Same tutor standalone
/en/tutors/...→ individual tutor (case.centre_idnull)
- Request Lesson from Our Tutors tab → Centre Workspace (
AC:
- Unapproved / revoked affiliates never listed
- Cap.57 subtitle always visible when tab has content
- Centre-tab request lands in Centre Inbox ([Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550)
- Standalone request does not route to centre
- Empty:
No affiliated tutors yet/尚未有合作導師+ owner CTA to invite/affiliate
Slice 4 — Notes / Study Materials tab (P0)
Goal: Centre materials surface on channel; money path = existing goods rails only.
- Tab lists centre-published materials ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543)
- Owner/staff in Workspace Mode can add/publish as Centre ([Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550)
- Checkout = materials 2% + 72h ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543/[Policy · #543] Notes Marketplace Master SoT — Option A (2% launch rate) + D10 removed + Open Marketplace #573) — not course tuition
AC:
- Published materials visible on public Materials tab
- Buy flow uses materials checkout SoT (no tuition cart)
- Empty:
No study materials yet/尚未有精讀筆記+ owner CTA - Partner Centre seller badge when applicable ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543)
Slice 5 — Course Showcase — Enquire-only cards (P0)
Goal: Lead-gen course cards; zero Stripe for physical classes.
Add Course modal fields:
- Title EN / 繁中
- Curriculum + subject + target grade
- Format: Small Group (Max N) | Intensive Bootcamp | 1-on-1 Centre Tuition | Admissions Consultation
- Location/mode · schedule_summary ≤100 chars · price_display · optional Trial badge
- Optional
assigned_tutor_id(approved affiliate only) - ≤3 highlights ≤300 chars
- Optional
instruction_languages[]: English | Cantonese | Mandarin
CTA: Enquire / Reserve Seat → / 查詢/預留學位 →
→ Enquiry modal pre-filled course_id + centre_id · Who is this for? (Myself / My Child per #459)
→ Creates Centre Case Lead in Centre Workspace Inbox (notify Centre Admin + Concierge)
→ No Stripe
MUST NOT: Collect course tuition on-platform · seat inventory engine · multi-seat cart
AC:
- Centre admin can add / edit / unpublish cards
- Enquire submits structured lead to Centre Inbox with course title attached
- No payment step on course CTA
- Empty:
No courses listed yet/尚未列出課程+[ + Add Course / Class ]for owner - Card grid desktop 3-col / mobile 1-col + reachable sticky enquire on mobile
Slice 6 — Staff workspace handoff (P0)
Goal: Day-1 ops without password sharing — wire Thin Channel leads into shipped #550.
- Course Enquire + Our Tutors centre-tab requests appear in Centre Workspace Inbox for all active
workspace_members - Owner can Invite Staff (email) if not already ([Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550)
- Context switcher Personal ↔ Centre Workspace works for channel edit / materials / course cards
AC:
- New course enquire visible to owner + admin staff in Workspace Mode
- Staff can reply on centre-routed leads
- Password-sharing discouraged in Team copy (EN + 繁中)
- Do not rebuild RBAC beyond owner/admin from [Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550
Slice 7 — Empty states + bilingual polish pass (P0)
Goal: Pitch-safe empties; no cloneable “shop” implication.
| Surface | Empty EN | Empty 繁中 |
|---|---|---|
| Courses | No courses listed yet | 尚未列出課程 |
| Our Tutors | No affiliated tutors yet | 尚未有合作導師 |
| Materials | No study materials yet | 尚未有精讀筆記 |
| Posts | No posts yet | 尚未有動態 |
AC:
- Every tab has empty + loading skeleton + inline error where applicable
- Owner Edit Mode shows add CTAs; public visitor sees soft empty (no broken admin buttons)
- Channel footnote Cap.57/279 present on public view
- Spot-check EN + 繁中 for activation, tabs, CTAs, Cap.57 subtitle, enquire modal
Product lock (ship vs parked)
| Ship now (Thin Partner Channel) | KEEP PARKED |
|---|---|
| 60s activation + Cap.57/279/B2B checkbox | #458 institutional cart / seat inventory / class tuition checkout |
| Public centre channel + tabs | #413 vacancy / job / apply-to-centre SaaS |
| Course Showcase Enquire only | #475 tutoring tuition escrow / Stripe Connect payouts |
| Our Tutors (approved affiliates) | Full #530 Academy Ops ERP (calendar/packs/attendance) — later Managed |
| Notes tab via #543 goods rails | Implying employment under Cap.57 |
| Workspace handoff via #550 | Complex multi-branch RBAC |
Exact behaviour (detail — implement against slices)
A. Activation (Slice 1)
See Slice 1. Trigger: Partner as a Centre / Admin provisions Centre Workspace / Join Option 4 from #576.
B. Course Showcase (Slice 5)
Lead-gen only. Payment & enrolment happen directly with the centre under B2B introduction-fee agreement. Digital notes remain #543.
C. Our Tutors (Slice 3)
Mutually approved affiliations only; centre-tab vs standalone routing locked.
UI / UX wireframe (public channel)
+-----------------------------------------------------------------------+
| [Cover] [Logo] Top Leader Education [✓ Verified Partner Centre] |
| @topleader · 📍 TST, Causeway Bay · [EDB Reg #… if verified] |
| [ 💬 Enquire with Centre ] |
+-----------------------------------------------------------------------+
| 📊 N Tutors | 🎓 N Courses | 📚 N Notes |
| Tabs: [Courses & Classes] [Our Tutors] [Study Materials] [Posts] |
| Course card → [ Enquire / Reserve Seat → ] ← NO Stripe |
+-----------------------------------------------------------------------+
Exact copy (EN + 繁中)
- Tabs:
Courses & Classes/課程及常規班·Our Tutors/導師團隊·Study Materials/精讀筆記·Posts/中心動態 - Course CTA:
Enquire / Reserve Seat →/查詢/預留學位 → - Cap.57 subtitle:
Verified independent educators and faculty affiliated with {Centre Name}./與 {Centre Name} 合作之認證獨立導師及教學團隊。 - Footnote:
Partner Centre listings are operated independently by the respective institution. Affiliated tutors operate as independent educators./合作教育中心之課程由該機構獨立營辦;所列導師均以獨立教育工作者身份合作。
Logic & edge cases
| Case | Expected |
|---|---|
| Centre sells PDF notes / mocks | #543 Materials tab (Stripe 2% + 72h) |
| Centre lists in-person class | Enquire lead-gen only (no Stripe) |
| Affiliate revoked | Drop from Our Tutors; clear assigned_tutor_id on cards |
| Enquire from Our Tutors | Centre Workspace + tutor tag |
Book same tutor from /tutors |
Individual tutor case |
| EDB entered, not staff-verified | Stored; pill hidden |
| Centre under Cap.279 small-class limits | Allowed with checkbox warrant; still no on-platform class tuition |
Implementation notes
centre_courses(or equiv.): id, centre_id, titles EN/ZH, curriculum, subject, target_grade, class_format, location_or_mode, schedule_summary, price_display, has_trial_offer, assigned_tutor_id nullable, highlights, instruction_languages[], is_published, timestamps- Course CTA → Case Enquiry with
centre_id+course_id— no cart - Reuse
centre_affiliations([Feature · V1 · #459] Unified Channel Profile: inline owner view, Materials & Hours tabs, Centre Affiliation & Pro-Bono capacity #548), Workspace ([Feature · V1] B2B Centre Workspace: Multi-Staff Access, Role-Based Leads Routing & Context Switcher #550), materials ([Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543) - Prefer extending Channel Profile layout over a new page type
- schedule_summary 100 · highlights 300 · multi-location free-text V1 · EDB verify = existing admin pattern
Acceptance criteria (roll-up)
- Slices 0–7 ACs all green
- Outreach Definition of Done sentence is true in product + bilingual copy
- No on-platform tuition collection for physical centre courses
- [PARKED · Cap.57] Partner storefront SaaS + vacancy ad board — blocked pending solicitor/EAA; storefront-only slice under D1/D3 #413 / [Parked Epic – V3] Institutional Layer: Profiles, Events, Verification & Network #458 / [Parked] Automated Fee Collection & Tutor/Centre Payout Rails (FPS → Stripe Connect → Hold-until-Confirm) #475 / [Epic] Classcard-style Academy Ops (Hybrid Managed) #530 full ERP remain parked (no scope creep in this PR)
Out of scope (explicit)
- ❌ Stripe course / seat cart for physical classes ([Parked Epic – V3] Institutional Layer: Profiles, Events, Verification & Network #458)
- ❌ Vacancy / job / apply-to-centre board ([PARKED · Cap.57] Partner storefront SaaS + vacancy ad board — blocked pending solicitor/EAA; storefront-only slice under D1/D3 #413)
- ❌ Tutoring tuition escrow / Connect payouts ([Parked] Automated Fee Collection & Tutor/Centre Payout Rails (FPS → Stripe Connect → Hold-until-Confirm) #475)
- ❌ Full Academy Ops ERP — calendar, packs, attendance, family wallet ([Epic] Classcard-style Academy Ops (Hybrid Managed) #530) — optional Managed later
- ❌ Changing [Feature · V1 · #251] Digital materials: Stripe checkout, 2% fee, R2 download, 72h hold #543 materials 2% SoT or 1.5-lesson matching fee
- ❌ Implying employment under Cap.57
- ❌ Complex branch-level permissions
Test plan (Denise)
- Activation: Complete thin sheet with policy checkbox → channel live Edit Mode
- Course enquire: Add IBDP Chem HL card → Parent Enquire for child → lead in Centre Inbox, no Stripe
- Affiliation: Approve tutor → Our Tutors Cap.57 subtitle → Request Lesson → Centre Inbox
- Standalone: Same tutor
/tutorsrequest → individual, not centre - Materials: Publish note as Centre → Materials tab → materials checkout path only
- Staff: Invite admin → Workspace Mode sees course lead
- EDB: Enter reg no. → hidden until staff verify
- Mobile + 繁中: Grid + sticky enquire + locale strings
Thin Partner Channel secures B2B supply for outreach without unparking the institutional shop. Reuses #412 join, #548 channel, #550 workspace, #543 materials, #256–#258 case intent via #412.
Activity
owlstonbusiness-svg commentedon Nov 2, 2026
Jarvis · SoT refine (2026-11-02 HKT)
Canonical Thin Centre Channel ticket (parent #548). Exact twin #578 closed as duplicate — implement once here.
Locked alignment
/tutors→ individual 1.5-lesson case.Cross-links
No fee/escrow contradictions found.
owlstonbusiness-svg commentedon Nov 2, 2026
Jarvis · Centre onboarding form audit (2026-11-02 HKT)
CEO question: Does the centre form capture everything a centre must answer and everything MatchMax needs to streamline B2B matching / lead-gen?
Verdict: NEEDS IMPROVE (thin sheet + 3 compliance fields from #412) — 60-second Thin Centre Channel stays the right product; Cap.279 lead-gen-only + Cap.57 independent-educator locks stay. Do not unpark #458 checkout. But the activation sheet as written drops a few fields that live
/business/join(#412) already requires for EA-safe B2B ops.Field inventory
@slug· logo · districts/addresses · contact WA/email · BR · optional EDB · curricula/subjects tags · Cap.57+279+B2B fee checkboxcourse_id/centre_id· Who is this for? (Myself / Child per #459)Gaps ranked
#412/business/join(rep_name,rep_role). Ops / compliance need a named human for Cap.57 triage and B2B fee chase. Must be on the thin sheet.legal_entity_name(staff-only / verify). Align with [Compliance / B2B] Extend centre partnership (#251/#256–258): 3-step EA-safe triage, BR org fields, COMPLIANCE_HOLD, How-it-works Partners tab #412.tutorial_centre|day_school|ngo(same enum as [Compliance / B2B] Extend centre partnership (#251/#256–258): 3-step EA-safe triage, BR org fields, COMPLIANCE_HOLD, How-it-works Partners tab #412). Drives Cap.279 expectations and desk macros; one Select, not a long form.English/Cantonese/Mandarin) so parent enquire + centre case board ([Feature · V1] Distinguish Private, Centre, and Activity/Gig case types on cases board #583) can filter. Not a publish blocker for the centre channel itself.Adopted activation-sheet deltas (eng AC)
legal_entity_name,rep_name,rep_role,org_type(tutorial_centre|day_school|ngo).@slug, ≥1 district/address, contact email or WhatsApp, BR number, Cap.57 + Cap.279 + B2B introduction-fee checkbox.instruction_languages[]; schedule_summary ≤100; highlights ≤300 — unchanged otherwise./tutorsrouting unchanged ([Feature · V1 · #459] Unified Channel Profile: inline owner view, Materials & Hours tabs, Centre Affiliation & Pro-Bono capacity #548).Parent / centre-case side
Parent answers for a centre course = Enquire modal (who-for) + later centre case board fields in #582 / #583 — not a second Join form. Private parent matching intake remains the shipped
#466/#423case wizard (good enough).No new epic. Tutor-side companion → #576.
[-][Feature · V1] Thin Centre Channel: 60-Second Centre Onboarding, Course Showcase Cards, Our Tutors Tab & Cap.57/279 Policy Locks[/-][+][Feature · V1] Thin Partner Channel: Denise ship checklist — 60s centre onboard, Enquire-only courses, Cap.57 locks[/+]owlstonbusiness-svg commentedon Nov 2, 2026
CEO-approved · Denise ship checklist landed (2026-11-03 HKT)
Body rewritten for implement-from-issue. No new sibling ticket (GitHub Issue Integrator). Twin #578 stays closed duplicate.
Ordered P0 slices
/en/business/[slug])/tutorsroutingDefinition of done (outreach)
Founder can pitch: Free Partner Centre → channel · Notes · affiliated tutors · centre cases / tutor obtain · Cap.57 locks · course cards = Enquire only — not a tuition shop.
Explicit out of scope (do not unpark)
#413 vacancy SaaS · #458 institutional cart · #475 tuition escrow/payouts · full #530 Academy Ops ERP (later Managed).
Denise: implement slices 0→7 in order; ACs live in issue body.
owlstonbusiness-svg commentedon Nov 2, 2026
Phase 0 → Phase 1 roadmap link (do not expand this issue’s P0 checklist)
#577 remains Enquire-only Thin Partner Channel (no Stripe tuition cart; Cap.57/279 locks unchanged).
After soft-launch supply is live, Phase 1 single-player wedge is filed under Academy Ops — not as a rewrite of this issue:
MUST NOT treat #612 as unparking full #530 ERP. Stripe seat cart / #413 vacancy / #475 tuition rails stay parked.