| name | slide-authoring |
| description | Author slide decks in Marp Markdown and render to HTML. Use when turning class beats into 4-7 slides per class, applying Marp frontmatter/layout rules, preventing overflow, or rendering via the marp CLI. Triggered by the slide-author agent. |
Slide Authoring โ Marp Markdown
slide๋ Marp Markdown์ผ๋ก ์์ฑํ ๋ค marp CLI๋ก HTML ๋ ๋ํ๋ค. AI๊ฐ raw HTML์ ์ง์ ์ฐ๋ฉด ๋ ์ด์์์ด ๊นจ์ง๊ธฐ ์ฌ์ฐ๋ฏ๋ก ๋ฐ๋์ Marp MD ๊ฒฝ์ .
Marp ํ๋ก ํธ๋งคํฐ ํ์ค
---
marp: true
theme: default
paginate: true
footer: "LO-X.Y"
style: |
section { font-size: 28px; }
h1 { font-size: 42px; }
code { font-size: 22px; }
---
paginate: true โ ์ฐํ๋จ ํ์ด์ง ๋ฒํธ
footer๋ class์ ์ฃผ LO id. ์ฌ๋ผ์ด๋๋ง๋ค ๋ค๋ฅธ LO๋ฉด ์ฌ๋ผ์ด๋ ์์ <!-- _footer: "LO-X.Z" --> ์ค๋ฒ๋ผ์ด๋
์ฌ๋ผ์ด๋ ๊ฐ์
- class๋น 4~7์ฅ ๊ณ ์
- ๊ณต์:
beats ๊ฐ์ + 1 (์ ๋ชฉ ์ฌ๋ผ์ด๋) + (๋ง๋ฌด๋ฆฌ/recap 1)
์ฌ๋ผ์ด๋ ๋ ์ด์์ ๊ท์น (ํ1)
๊ฐ ์ฌ๋ผ์ด๋๋ ๋ค์ 3๊ฐ์ง ์ค ์ ํํ ํ๋๋ง ๋ด๋๋ค:
A. Bullet ์ฌ๋ผ์ด๋ (3~5 bullet)
## ์๋ฒ ์ปดํฌ๋ํธ๋
- ์๋ฒ์์ ๋ ๋๋ง๋๋ React ์ปดํฌ๋ํธ
- ํด๋ผ์ด์ธํธ ๋ฒ๋ค์ ํฌํจ๋์ง ์์
- DB/ํ์ผ์์คํ
์ง์ ์ ๊ทผ ๊ฐ๋ฅ
- Suspense ๊ฒฝ๊ณ๋ก ์คํธ๋ฆฌ๋ฐ๋จ
B. Code ์ฌ๋ผ์ด๋ (โค15์ค)
## RSC ์์
~~~jsx
// app/posts/page.js
export default async function Page() {
const posts = await db.query(...);
return posts.map(p => <Post {...p} />);
}
~~~
C. Diagram ์ฌ๋ผ์ด๋ (๊ทธ๋ฆผ/๋ค์ด์ด๊ทธ๋จ)
Mermaid ๋ด์ฅ ๊ฐ๋ฅ (default theme ์ง์):
## ์์ฒญ ํ๋ฆ
~~~mermaid
flowchart LR
Browser --> Edge --> Server --> DB
~~~
์ ๋ชฉ ๊ท์น
- h2 (
##) ์ฌ์ฉ, h1์ ์ ๋ชฉ ์ฌ๋ผ์ด๋์๋ง
- โค10 ๋จ์ด, ์กฐ์ฌ ์ ์ธ
- ์ง๋ฌธํ/์ ์ธํ ์์ด์ ๋ฆฌ๋ฌ๊ฐ (
๋ฌด์์ด RSC์ธ๊ฐ โ RSC๋ ์ด๋์ ์ฐ๋๊ฐ โ RSC ์์)
Overflow ๋ฐฉ์ง
LO footer ํ์
Beat ํ๊น
(TTS affect ์ ํ๋์ฉ)
๊ฐ ์ฌ๋ผ์ด๋์ ์ด๋ค beat์์ ์ ๋๋๋์ง ํ๊ธฐํ๋ฉด synthesize-tts.py ๊ฐ per-slide speaker_affect ์ค๋ฒ๋ ์ด๋ฅผ ์ ํํ ๋งคํํ๋ค (์์ผ๋ฉด proportional-stretch ํด๋ฆฌ์คํฑ์ผ๋ก fallback).
---
<!-- beat: b2 -->
<!-- _footer: "LO-1.1" -->
## ์ฌ๋ผ์ด๋ ์ ๋ชฉ
<!-- beat: bN --> ๋ plain HTML comment โ Marp directive ์๋๋ผ render ์ํฅ ์์
- ๊ฐ์
_workspace/03_class_<id>_beats.json ์ beat id (์: b1, b2) ๊ทธ๋๋ก
- ํ beat์ด ์ฌ๋ฌ ์ฌ๋ผ์ด๋๋ฅผ ์ปค๋ฒํ๋ฉด ๋์ผ id ๋ฐ๋ณต ํ๊น
- ์ฃผ์ ์๋ต ์ ํด๋น ์ฌ๋ผ์ด๋๋ neutral affect ์ฒ๋ฆฌ
ํ์ผ ๊ตฌ์กฐ
course/sections/<sec-slug>/classes/<class-slug>/
โโโ slide.source.md โ Marp ์๋ณธ (ํธ์ง ๋์)
โโโ slide.html โ ๋ ๋ ๊ฒฐ๊ณผ (generated, ํธ์ง ๊ธ์ง)
๋ ๋ ์คํฌ๋ฆฝํธ ์ฌ์ฉ
scripts/render-marp.sh๋ฅผ ํธ์ถ:
bash .claude/skills/slide-authoring/scripts/render-marp.sh \
course/sections/01-intro/classes/01-what-is-rsc
์ด ์คํฌ๋ฆฝํธ๋:
slide.source.md ์กด์ฌ ํ์ธ
marp CLI ํธ์ถ (--html --allow-local-files)
- ๋ ๋ ์๋ฌ ์ stderr ์บก์ฒํ์ฌ ๋ฐํ (๋น์์ exit)
์๋ฌ ๋์
Marp ๋ฏธ์ค์น
์๋ฌ ์ ์ฌ์ฉ์์๊ฒ ์๋ด: npm install -g @marp-team/marp-cli
์ค๋ฒํ๋ก์ฐ ๊ฐ์ง
Marp๋ ๋ฐํ์์ overflow ๊ฐ์ง ๋ถ๊ฐ. ๋์ :
- ์ฌ์ ๊ท์น (โค80 ๋จ์ด, โค15์ค) ์๊ฐ๊ฒ์ฌ
- ๋ ๋ ํ
slide.html ๊ฐ section์ ํ
์คํธ ๊ธธ์ด ์ธก์ ์คํฌ๋ฆฝํธ๋ก post-check
ํค ๋ฐ์
tone=friendly: ์ ๋ชฉ์ ๊ฐํํยท์ง๋ฌธํ ํผ์ฉ, bullet์ ์น๊ทผํ ์ด๋ฏธ
tone=formal: ๋ช
์ฌํ ์ข
๊ฒฐ, ๊ฐ๊ด์ ์ดํ
tone=socratic: ์ ๋ชฉ์ ์ง๋ฌธ์ผ๋ก, bullet์ ์ถ๋ก ์ ๋
์ฌ์คํ ๊ท์น
- slide ์์/๊ฐ์ ๋ณ๊ฒฝ ์ script-writer์
[slide N] cue ์ฌ๋งคํ ํ์ํจ์ coherence-reviewer๊ฐ ๊ฐ์ง
- ๋ถ๋ถ ์์ ์ด๋ฉด ํด๋น ์ฌ๋ผ์ด๋๋ง ๊ต์ฒด