Loading...
Loading...
Use this skill when an existing multi-day public-class teaching site needs to be condensed and re-packaged for a corporate in-house training — typically a half-day or one-day intensive (e.g. 4-day public class → 6-hour corporate). Triggers on phrases like "企業包班", "濃縮版", "客製化課程", "corporate edition", "intensive version", "in-house training", "single-file deliverable", "客戶端課程", "壓縮成一天", or when the user wants a single-folder zippable deliverable for a client. This skill builds on top of an existing site — picking units, condensing time allocation, embedding data into a single HTML, setting up asset fallback chains, and producing an offline-ready package.
npx skill4agent add kevintsai1202/teaching-site-skills course-corporate-editionSchema authority: allfield names come fromwindow.COURSE._shared/domain-primitives.mdFilename convention (English-first): corporate editions live under. Per-edition folders usecorporate-editions/{client}_{hours}h/,materials/,assets/,index.html. Legacy Chinese names (README.md,企業包班/) are deprecated.教學素材/
window.COURSEindex.htmlcourse-data.jscourse-data<script>window.COURSE = { ... }</script>index.htmlfile://assets/assets/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 libraryconst 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;
}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.
window.COURSE.day1.title"Day1: 上午""Day2: 下午"| Corporate Unit | Borrowed From | Time | Why kept |
|---|---|---|---|
| 1.1 開場 + 自我盤點 | (new) | 25 min | Anchor for the day |
| 1.2 Gem 概念 + 多平台文案 | public Day 1 u2-u4 | 95 min | Highest ROI, concrete output |
| 1.3 NotebookLM × Gem 整合 | public Day 3 u1 | 25 min | Differentiator |
| ... | ... | ... | ... |
index.htmlwindow.COURSE = {
meta: {
title: '電商團隊 AI 即戰力',
audience: '3–30 人企業內訓',
client: '景笙顧問', // ← swap per client
hours: 6,
schedule: '09:00–16:00',
classroom: '客戶端(由企業指定,實體 / 線上同步皆可)',
},
// ...
};assets/// 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.../assets/foo.png| Script | What it checks |
|---|---|
| Playwright: load, screenshot at multiple viewports, sidebar/scrollspy/progress |
| Crawl every asset, confirm none 404 |
| Diff inlined COURSE vs source markdown to catch drift |
| Per-issue diagnostic (DOM zone, day visibility) |
scripts/corp-{name}file://index.htmlfetch()corporate-editions/{client}_{hours}h/README.mdcourse-ebook-publishing