course-corporate-edition

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Course Corporate Edition

企业版课程

Schema authority: all
window.COURSE
field names come from
_shared/domain-primitives.md
.
Filename convention (English-first): corporate editions live under
corporate-editions/{client}_{hours}h/
. Per-edition folders use
materials/
,
assets/
,
index.html
,
README.md
. Legacy Chinese names (
企業包班/
,
教學素材/
) are deprecated.
This skill takes an existing public-class teaching site and produces a corporate edition: shorter, brand-customisable, single-folder deliverable.
Schema 权威定义:所有
window.COURSE
字段名称均来自
_shared/domain-primitives.md
命名规范(英文优先):企业版课程存储在
corporate-editions/{client}_{hours}h/
目录下。每个版本的文件夹包含
materials/
assets/
index.html
README.md
。旧版中文命名(
企業包班/
教學素材/
)已废弃。
此Skill可将现有公开授课网站转换为企业版课程:时长更短、可定制品牌、交付物为单个文件夹。

When to Invoke

调用场景

  • User has a finished public-class site (e.g. 4 days × 6h) and needs a 1-day version for a client.
  • User wants to clone an existing corporate edition for a new client with different branding.
  • User wants the deliverable to be a single folder the client's IT can zip and host themselves.
  • 用户已完成公开授课网站(例如4天×6小时),需要为客户制作1天版本。
  • 用户希望为新客户克隆现有企业版课程并更换品牌。
  • 用户需要交付单个文件夹,方便客户IT团队自行压缩并部署。

The Two Architectural Shifts

两大架构转变

The corporate edition makes two deliberate departures from the public-class architecture:
企业版课程在架构上与公开版课程有两处刻意调整:

Shift 1: Single-file SPA (inline
window.COURSE
)

转变1:单文件SPA(内联
window.COURSE

Public class:
index.html
+
course-data.js
(separate file). Corporate:
course-data
is inlined as
<script>window.COURSE = { ... }</script>
inside
index.html
.
Why: corporate clients zip and host the folder themselves. One file is one less moving part. Also:
file://
double-click works (no separate JS fetch issues).
Cost: editing the data requires touching HTML. Acceptable because corporate editions ship and don't get edited again.
公开版:
index.html
+
course-data.js
(独立文件)。 企业版:
course-data
内联
<script>window.COURSE = { ... }</script>
,嵌入到
index.html
中。
原因:企业客户会自行压缩并部署文件夹。单文件减少了依赖项,同时支持
file://
协议双击打开(避免独立JS文件的加载问题)。
代价:编辑数据需要修改HTML文件。但企业版课程交付后通常不会再编辑,因此该代价是可接受的。

Shift 2: Asset fallback chain

转变2:资源 fallback 链

Corporate edition has its own
assets/
folder, but falls back to the public-class
assets/
for anything not overridden:
corporate-editions/client_6h/
├── index.html              ← inline COURSE
├── assets/                 ← corporate-specific overrides (logo, customised hero)
└── materials/              ← curated subset (~11 files vs. public's ~30)
                              ↓ falls back to
project-root/assets/         ← public class's full asset library
project-root/course-package/materials/  ← public class's full material library
Implementation: every asset reference tries the corporate path first; on 404, it tries the public-class path. The bundled ebook builder does the same in its compose layer:
js
const ASSET_ROOTS = [
  path.join(CORP_DIR, 'assets'),
  path.join(PUBLIC_ROOT, 'assets'),
];
async function findAsset(filename) {
  for (const root of ASSET_ROOTS) {
    try { await fs.access(path.join(root, filename)); return path.join(root, filename); }
    catch { /* try next */ }
  }
  return null;
}
Why: you'd duplicate 200+ MB of illustrations across every client edition otherwise. Override only what changes (brand, hero), share everything else.
企业版课程拥有独立的
assets/
文件夹,但对于未覆盖的资源,会** fallback 到公开版课程的
assets/
文件夹**:
corporate-editions/client_6h/
├── index.html              ← 内联COURSE数据
├── assets/                 ← 企业专属资源覆盖(logo、定制化首页)
└── materials/              ← 精选素材子集(约11个文件,对比公开版的约30个)
                              ↓ fallback 至
project-root/assets/         ← 公开版完整资源库
project-root/course-package/materials/  ← 公开版完整素材库
实现方式:每个资源引用优先尝试企业版路径;若返回404,则尝试公开版路径。打包电子书的构建工具在合成层也采用相同逻辑:
js
const ASSET_ROOTS = [
  path.join(CORP_DIR, 'assets'),
  path.join(PUBLIC_ROOT, 'assets'),
];
async function findAsset(filename) {
  for (const root of ASSET_ROOTS) {
    try { await fs.access(path.join(root, filename)); return path.join(root, filename); }
    catch { /* 尝试下一个路径 */ }
  }
  return null;
}
原因:否则每个客户版本都会重复200+MB的插图资源。仅覆盖需要修改的内容(品牌、首页),其余资源共享。

Folder Convention

目录规范

project-root/
├── (all public-class files)
├── corporate-editions/
│   ├── clientA_6h/                     ← Generic edition (fictional case, sellable to many clients)
│   │   ├── index.html
│   │   ├── README.md                   ← shipping / HR onboarding notes
│   │   ├── assets/                     ← edition-specific overrides
│   │   └── materials/                  ← edition-specific curated materials
│   └── clientB_condensed/              ← Real-client custom edition
│       └── (same shape)
└── assets/                              ← public-class full asset library (fallback target)
Generic vs custom edition: the generic edition uses a fictional company name (e.g. "GreenField Select") as the running case — sellable to multiple clients. Custom editions replace the case with real client data only on demand.
project-root/
├── (所有公开版课程文件)
├── corporate-editions/
│   ├── clientA_6h/                     ← 通用版本(虚构案例,可售给多个客户)
│   │   ├── index.html
│   │   ├── README.md                   ← 交付说明/HR入职指南
│   │   ├── assets/                     ← 版本专属资源覆盖
│   │   └── materials/                  ← 版本专属精选素材
│   └── clientB_condensed/              ← 客户定制版本
│       └── (相同目录结构)
└── assets/                              ← 公开版完整资源库(fallback目标)
通用版 vs 定制版:通用版使用虚构公司名称(例如“GreenField Select”)作为案例,可售给多个客户。定制版仅在需要时将案例替换为真实客户数据。

Condensing Strategy (24h → 6h)

浓缩策略(24小时→6小时)

Picking which units to keep is the hardest part. Heuristic:
  1. Drop units about general concepts (e.g. "AI 的歷史", "Prompt 基礎") — corporate audiences want to see immediate ROI, not foundations.
  2. Keep units with concrete deliverables — the corporate measure of success is "what did we walk out with". Aim for 7–8 takeaway artifacts.
  3. Compress shared scenario — public class has multiple recurring brands; corporate gets one (the most relatable to the client's industry).
  4. Merge similar units — two related units in the public class often become one combined unit (e.g. "撰寫提示詞" + "建立 Gem" → "Gem 封裝實戰").
  5. Restructure time: public class is "Day-based"; corporate is usually "Morning / Afternoon" (e.g. AM 3h + PM 3h with 1h lunch). Adjust
    window.COURSE.day1.title
    accordingly (
    "Day1: 上午"
    ,
    "Day2: 下午"
    ).
筛选保留哪些课程单元是最核心的工作,可遵循以下启发式规则:
  1. 删除通用概念单元(例如“AI 的历史”“Prompt 基础”)——企业学员更关注即时ROI,而非基础知识。
  2. 保留有具体产出的单元——企业衡量培训成功的标准是“学员带走了什么成果”,目标是7-8个可带走的产出物。
  3. 压缩共享场景——公开版包含多个重复品牌案例;企业版仅保留与客户行业最相关的一个。
  4. 合并相似单元——公开版中两个相关单元通常合并为一个(例如“撰写提示词”+“建立 Gem”→“Gem 封装实战”)。
  5. 调整时间结构:公开版按“天数”划分;企业版通常按“上午/下午”划分(例如上午3小时+下午3小时,含1小时午餐)。需相应调整
    window.COURSE.day1.title
    (例如
    "Day1: 上午"
    "Day2: 下午"
    )。

Unit-Picking Worksheet

单元筛选工作表

When planning the condensed version, fill in a table like this:
Corporate UnitBorrowed FromTimeWhy kept
1.1 開場 + 自我盤點(new)25 minAnchor for the day
1.2 Gem 概念 + 多平台文案public Day 1 u2-u495 minHighest ROI, concrete output
1.3 NotebookLM × Gem 整合public Day 3 u125 minDifferentiator
............
This table becomes the source of truth when wiring up the corporate
index.html
— every unit must trace back.
规划浓缩版本时,可填写如下表格:
企业版单元来源公开版时长保留原因
1.1 开场 + 自我盘点(新增)25分钟当日课程锚点
1.2 Gem 概念 + 多平台文案公开版Day1 u2-u495分钟ROI最高,产出具体
1.3 NotebookLM × Gem 整合公开版Day3 u125分钟差异化亮点
............
该表格将成为企业版
index.html
配置的依据——每个单元都必须能追溯到来源。

Branding Customisation Variables

品牌定制变量

Pull all client-specific text into a single block at the top of inlined COURSE:
js
window.COURSE = {
  meta: {
    title: '電商團隊 AI 即戰力',
    audience: '3–30 人企業內訓',
    client: '景笙顧問',           // ← swap per client
    hours: 6,
    schedule: '09:00–16:00',
    classroom: '客戶端(由企業指定,實體 / 線上同步皆可)',
  },
  // ...
};
Cloning for a new client: copy the folder, search-replace the client name, swap branded assets in
assets/
.
将所有客户专属文本集中到内联COURSE数据的顶部:
js
window.COURSE = {
  meta: {
    title: '电商团队 AI 即战力',
    audience: '3–30人企业内训',
    client: '景笙顾问',           // ← 按客户替换
    hours: 6,
    schedule: '09:00–16:00',
    classroom: '客户端(由企业指定,实体/线上同步皆可)',
  },
  // ...
};
为新客户克隆版本:复制文件夹,替换客户名称,更换
assets/
中的品牌资源即可。

Single-Folder Deliverable Check

单文件夹交付物检查

Before sending to a client, verify the folder is truly self-contained:
js
// scripts/verify-corp-self-contained.mjs
// Walk the folder, parse every src/href, ensure no path goes outside this folder
// EXCEPT for the documented public-class fallback paths.
If a stray
../assets/foo.png
slips in, the client's IT will see broken images after unzipping.
交付给客户前,需验证文件夹是否真正独立完整:
js
// scripts/verify-corp-self-contained.mjs
// 遍历文件夹,解析所有src/href,确保没有路径指向文件夹外部
// 除了已文档化的公开版fallback路径。
如果出现遗漏的
../assets/foo.png
,客户IT团队解压后会看到图片加载失败。

Companion Verification Scripts

配套验证脚本

The example workshop ships these — adapt for any new corporate edition:
ScriptWhat it checks
scripts/verify-corp-{name}.mjs
Playwright: load, screenshot at multiple viewports, sidebar/scrollspy/progress
scripts/verify-corp-{name}-404.mjs
Crawl every asset, confirm none 404
scripts/audit-corp-{name}-content.mjs
Diff inlined COURSE vs source markdown to catch drift
scripts/diagnose-corp-{name}-{topic}.mjs
Per-issue diagnostic (DOM zone, day visibility)
The pattern: one verify script per concern, all under
scripts/
with the
corp-{name}
prefix.
示例工作坊提供以下脚本,可适配任何新的企业版课程:
脚本检查内容
scripts/verify-corp-{name}.mjs
Playwright:加载页面、多视口截图、侧边栏/滚动追踪/进度验证
scripts/verify-corp-{name}-404.mjs
爬取所有资源,确认无404错误
scripts/audit-corp-{name}-content.mjs
对比内联COURSE与源markdown,检查内容偏差
scripts/diagnose-corp-{name}-{topic}.mjs
特定问题诊断(DOM区域、天数可见性)
模式:每个关注点对应一个验证脚本,均存储在
scripts/
目录下,前缀为
corp-{name}

Anti-Patterns

反模式

  • Duplicating the whole assets folder — defeats the point of the fallback chain.
  • Editing the public-class site to "make it work" for the corporate version — keep them decoupled. The corporate edition reads from public-class assets read-only.
  • Hardcoding the client's actual data in the generic edition — keep the generic edition with a fictional case; only customise on demand.
  • Forgetting
    file://
    constraints
    — corporate clients double-click
    index.html
    . Avoid
    fetch()
    of local JSON, avoid features that need a real HTTP server (localStorage works fine).
  • 复制整个资源文件夹——违背了fallback链的设计初衷。
  • 修改公开版网站以适配企业版——保持两者解耦。企业版仅只读访问公开版资源。
  • 在通用版中硬编码真实客户数据——通用版保留虚构案例,仅在需要时定制。
  • 忽略
    file://
    协议限制
    ——企业客户会双击
    index.html
    打开页面。避免本地JSON的
    fetch()
    请求,避免需要真实HTTP服务器的功能(localStorage可正常使用)。

Hand-off

交付

When this skill finishes:
  • A new folder under
    corporate-editions/{client}_{hours}h/
    is ready to zip.
  • README.md
    inside explains startup (double-click), HR notes, and a course summary.
  • Verify scripts pass.
If the client also wants a printed PDF / DOCX deliverable, that's
course-ebook-publishing
's job — invoke that next.
当此Skill完成后:
  • corporate-editions/{client}_{hours}h/
    下的新文件夹已准备好压缩交付。
  • 文件夹内的
    README.md
    说明了启动方式(双击打开)、HR指南和课程摘要。
  • 所有验证脚本已通过。
如果客户还需要打印版PDF/DOCX交付物,可调用
course-ebook-publishing
Skill处理。",