AX 과제 - 1 → AX 강의 - 1 폴더명 변경 및 강의형 산출물 추가

Made-with: Cursor
This commit is contained in:
dsyoon
2026-02-26 09:55:10 +09:00
parent b0a2b0eec4
commit c0c486bc86
87 changed files with 10359 additions and 520 deletions

View File

@@ -0,0 +1,29 @@
너는 기업 AX 전환 교육용 PPT를 설계하는 교육 콘텐츠 디자이너다.
주제(폴더명/PPT 제목): 오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)
구분: 실행력
요청(시드 프롬프트):
"노코드 툴을 활용한 워크플로우 자동화 설계(강의형)" 슬라이드를 구성해줘. 서로 다른 앱(메일-슬랙-엑셀)을 AI로 연결하는 구조도를 포함하고, 운영 관점(예외 처리, 승인 단계, 로그/모니터링)을 자세히 설명해줘. 직관적이고 기술적인 신뢰감이 가는 디자인으로 제안해줘.
목표:
- 리더십부터 실무자까지 "왜 이 주제를 이해해야 하는지"를 먼저 설득한다.
- 30분 교육으로 진행 가능하도록 구성한다.
- 최소 20장 이상(권장 22장) 슬라이드가 나오도록 한다.
- 예시(상황/결과/체크리스트/사례)가 풍부해야 한다.
- 발표자가 그대로 읽어도 자연스럽도록 슬라이드 흐름(도입→핵심→사례→리스크→정리)을 만든다.
- 발표 중 **참여형 활동 없이 진행한다.** (참여자에게 '직접 해보라'는 지시 금지)
- 프롬프트/템플릿은 "참고 예시"로만 제시하고, 단계별 따라하기 구성은 만들지 않는다.
출력 형식(반드시 준수):
- 최종 출력은 JSON 한 덩어리만 출력한다. (설명/문장/코드블록 금지)
- JSON은 아래 스키마를 만족해야 한다: slides.schema.json
- slides[0]은 반드시 type="cover"로 둔다. (표지는 meta.title/meta.subtitle/meta.badge로 자동 생성됨)
- 슬라이드 타입은 다음만 사용한다:
- cover, agenda, section, bullets, two_column, process, table
작성 규칙:
- bullets는 4~7개 내로, 한 줄은 60자 내로.
- 별도의 prompt(코드블록) 슬라이드를 만들지 않는다. (참여형 활동 유도로 오해될 수 있음)
- table 슬라이드는 열 3~4개, 행 3~6개 정도로 간결하게.
- 보안/윤리/환각 등 리스크가 있는 주제는 "Do & Don't" 또는 "리스크/완화"를 반드시 포함한다.
- 마지막은 요약 + 다음 행동(오늘부터 1개 실행)으로 끝낸다.

View File

@@ -0,0 +1,17 @@
from __future__ import annotations
import subprocess
import sys
from pathlib import Path
def main() -> None:
base = Path(__file__).resolve().parent
common = base.parent / "_common" / "make_ppt.py"
spec = base / "slides.json"
out = base / f"{base.name}.pptx"
subprocess.check_call([sys.executable, str(common), "--spec", str(spec), "--out", str(out)])
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,112 @@
{
"meta": {
"title": "예시 - 강의형(참여형 활동 없음)",
"subtitle": "AX 전환 교육 (30분 / 20+ Slides)",
"badge": "예시 트랙",
"duration_minutes": 30,
"audience": "리더십 + 실무자",
"tone": "명확하고 실용적, 예시 중심",
"footer_left": "AX 전환 교육 | 2026.02"
},
"slides": [
{
"type": "cover",
"notes": "오프닝: 오늘은 참여형 활동 없이, 사례/체크리스트 중심으로 진행합니다."
},
{
"type": "agenda",
"title": "오늘의 흐름 (30분)",
"items": [
"1) 왜 필요한가",
"2) 핵심 개념/원칙",
"3) 사례로 이해하는 적용 가이드",
"4) 리스크/체크리스트",
"5) 요약 & 다음 행동"
],
"notes": "전체 흐름을 10초로 안내하고 바로 본론으로 들어갑니다."
},
{
"type": "section",
"title": "1. 왜 필요한가",
"subtitle": "리더십부터 실무자까지",
"notes": "리더 관점(성과/리스크)과 실무 관점(시간/품질)을 연결해 설명합니다."
},
{
"type": "bullets",
"chapter": "Part 1",
"title": "기대 효과(정량/정성)",
"bullets": [
"시간 절감(반복 업무)",
"품질 표준화(템플릿)",
"리스크 감소(검증/승인)",
"온보딩 가속",
"의사결정 리드타임 단축"
],
"notes": "조직 사례가 있다면 1개만 붙여 설득력을 높입니다."
},
{
"type": "section",
"title": "2. 핵심 개념과 원칙",
"subtitle": "이것만 지키면 실패 확률이 줄어든다",
"notes": "핵심 개념은 3~6개로 제한하고, 각각 1문장으로 정의합니다."
},
{
"type": "two_column",
"chapter": "Part 2",
"title": "오해 vs 현실",
"left_title": "오해",
"left_bullets": ["AI는 만능", "한 번 도입하면 끝"],
"right_title": "현실",
"right_bullets": ["사람 검증이 필수", "운영/거버넌스가 성패를 좌우"],
"notes": "오해를 정리한 뒤, 현실 기준을 '팀 표준'으로 제시합니다."
},
{
"type": "process",
"chapter": "Part 3",
"title": "적용 루틴(강의형 가이드)",
"steps": [
"목표/대상/제약 정의",
"입력 데이터 정리",
"출력 형식 지정",
"검증/리스크 체크",
"공유/표준화",
"지표로 개선"
],
"notes": "참여자에게 '지금 해보라'가 아니라, 기준과 사례를 설명합니다."
},
{
"type": "table",
"chapter": "Part 3",
"title": "Before / After (예시)",
"columns": ["업무", "기존", "개선", "절감"],
"rows": [
["회의록", "40분", "12분", "28분"],
["메일", "20분", "5분", "15분"],
["보고 1p", "60분+", "20분", "40분"]
],
"notes": "표는 정의/기간을 같이 확인하며 읽습니다."
},
{
"type": "two_column",
"chapter": "Part 4",
"title": "리스크와 완화",
"left_title": "리스크",
"left_bullets": ["환각/오류", "보안/기밀", "품질 편차", "운영 장애"],
"right_title": "완화",
"right_bullets": ["원문 대조", "입력 금지/가명화", "승인/리뷰", "로그/모니터링"],
"notes": "리스크는 '기술'이 아니라 '프로세스'로 줄입니다."
},
{
"type": "bullets",
"chapter": "Part 5",
"title": "요약 & 다음 행동",
"bullets": [
"목적·맥락·형식 + 검증",
"작게 시작해 표준화",
"지표로 개선",
"오늘 행동: 템플릿 1개를 팀 표준으로 정하기"
],
"notes": "마무리는 '오늘부터 무엇을 할지' 한 문장으로 정리합니다."
}
]
}

View File

@@ -0,0 +1,311 @@
{
"meta": {
"title": "오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)",
"subtitle": "AX 전환 교육 (30분 / 20+ Slides)",
"badge": "실행력 트랙",
"duration_minutes": 30,
"audience": "리더십 + 실무자",
"tone": "명확하고 실용적, 예시 중심",
"footer_left": "AX 전환 교육 | 2026.02"
},
"slides": [
{
"type": "cover",
"notes": "오프닝(10초): 오늘 주제는 '오늘 바로 적용하는 AI 업무 자동화 - 노코드 워크플로우 설계(강의형)'입니다.\n운영 안내(10초): 오늘은 참여형 활동 없이, 사례와 체크리스트 중심으로 정리합니다.\n목표(10초): 왜 중요한지 → 핵심 원칙 → 사례 해설 → 리스크/대응 → 다음 행동까지 30분에 끝냅니다."
},
{
"type": "agenda",
"title": "오늘의 흐름 (30분)",
"items": [
"1) 왜 필요한가",
"2) 핵심 개념/원칙",
"3) 사례로 이해하는 적용 가이드",
"4) 리스크/체크리스트",
"5) 요약 & 다음 행동"
],
"notes": "전체 구성(20초): 5파트로 진행합니다.\n- 1) 왜 필요한가\n- 2) 핵심 개념/원칙\n- 3) 사례로 이해하는 적용 가이드\n- 4) 리스크/체크리스트\n- 5) 요약 & 다음 행동\n안내(10초): 참여형 활동 없이, 바로 가져가 쓸 수 있는 요약/체크리스트 중심입니다."
},
{
"type": "section",
"title": "1. 왜 이 주제를 이해해야 하나",
"subtitle": "리더십부터 실무자까지",
"notes": "전환(10초): 이제 '1. 왜 이 주제를 이해해야 하나' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다."
},
{
"type": "bullets",
"chapter": "Part 1",
"title": "리더십 관점: 왜 중요한가",
"bullets": [
"자동화는 ‘업무 표준화’와 직결",
"작은 자동화가 누적되면 생산성 격차가 커짐",
"통합(메일/슬랙/시트)의 설계가 중요",
"권한/로그/보안 통제가 필수",
"운영 관점(장애/오작동) 고려 필요"
],
"notes": "핵심(10초): '리더십 관점: 왜 중요한가' 슬라이드입니다.\n포인트(20초): 자동화는 ‘업무 표준화’와 직결 / 작은 자동화가 누적되면 생산성 격차가 커짐\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "bullets",
"chapter": "Part 1",
"title": "실무자 관점: 무엇이 달라지나",
"bullets": [
"반복 전달/복붙 작업을 줄이는 가장 빠른 방법",
"노코드로도 충분히 시작 가능",
"자동화는 ‘작게’가 핵심",
"실수(누락/지연) 감소",
"내 업무를 시스템화하면 야근이 줄어듦"
],
"notes": "핵심(10초): '실무자 관점: 무엇이 달라지나' 슬라이드입니다.\n포인트(20초): 반복 전달/복붙 작업을 줄이는 가장 빠른 방법 / 노코드로도 충분히 시작 가능\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "two_column",
"chapter": "Part 1",
"title": "흔한 오해 vs 현실",
"left_title": "오해",
"left_bullets": [
"자동화는 거창하다",
"개발이 없으면 못 한다",
"한 번 만들면 끝이다",
"자동화는 위험하다"
],
"right_title": "현실",
"right_bullets": [
"1~2개 앱 연결부터 가능",
"노코드+AI로 시작 가능",
"운영/모니터링이 중요",
"권한/로그로 안전하게 가능"
],
"notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다."
},
{
"type": "bullets",
"chapter": "Part 1",
"title": "기대 효과(정량/정성)",
"bullets": [
"복붙/전달 시간 절감",
"업무 누락 감소(트리거/알림)",
"업무 흐름 가시화",
"협업 속도↑",
"프로세스 표준화"
],
"notes": "핵심(10초): '기대 효과(정량/정성)' 슬라이드입니다.\n포인트(20초): 복붙/전달 시간 절감 / 업무 누락 감소(트리거/알림)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "section",
"title": "2. 핵심 개념과 원칙",
"subtitle": "이것만 지키면 실패 확률이 줄어든다",
"notes": "전환(10초): 이제 '2. 핵심 개념과 원칙' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다."
},
{
"type": "bullets",
"chapter": "Part 2",
"title": "핵심 개념 6가지",
"bullets": [
"Trigger(시작 조건)",
"Action(실행)",
"Filter(조건)",
"AI Step(분류/요약/추출)",
"Human 승인 단계",
"로그/모니터링"
],
"notes": "핵심(10초): '핵심 개념 6가지' 슬라이드입니다.\n포인트(20초): Trigger(시작 조건) / Action(실행)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "process",
"chapter": "Part 2",
"title": "실행 프레임워크(권장 루틴)",
"steps": [
"업무 1개 선정(반복/규칙적)",
"Trigger 정의(메일 수신 등)",
"AI 단계(요약/분류/추출)",
"Action 연결(슬랙/시트)",
"예외 처리(조건/승인)",
"모니터링/개선"
],
"notes": "핵심(10초): '실행 프레임워크(권장 루틴)'는 실행 흐름(루틴)을 제시합니다.\n요약(20초): 업무 1개 선정(반복/규칙적) → Trigger 정의(메일 수신 등) → AI 단계(요약/분류/추출) …\n팁(10초): 이 순서를 팀 템플릿으로 고정하면 재작업이 크게 줄어듭니다."
},
{
"type": "two_column",
"chapter": "Part 2",
"title": "좋은 예 vs 나쁜 예 (짧은 비교)",
"left_title": "좋은 예",
"left_bullets": [
"단일 흐름부터 시작",
"예외/승인 단계 포함",
"로그/테스트 케이스 준비",
"권한 최소화"
],
"right_title": "나쁜 예",
"right_bullets": [
"여러 흐름을 한 번에",
"예외 없이 자동 발송",
"테스트 없이 운영",
"권한 과다 부여"
],
"notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다."
},
{
"type": "bullets",
"chapter": "Part 2",
"title": "자주 하는 실수",
"bullets": [
"트리거 조건이 모호",
"중복 실행",
"에러 시 알림 없음",
"민감 데이터 노출",
"운영 주체 없음"
],
"notes": "핵심(10초): '자주 하는 실수' 슬라이드입니다.\n포인트(20초): 트리거 조건이 모호 / 중복 실행\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "section",
"title": "3. 사례로 이해하는 적용 가이드",
"subtitle": "참여형 활동 없이도 이해되는 예시 중심",
"notes": "전환(10초): 이제 '3. 사례로 이해하는 적용 가이드' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다."
},
{
"type": "bullets",
"chapter": "Part 3",
"title": "사례 1) 자동화 시나리오 설계(업무→흐름)",
"bullets": [
"요청의 역할/관점: 워크플로우 설계자",
"핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)",
"출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨",
"짧은 예시 문장(참고): \"업무: [업무] / 앱: 이메일, 슬랙, 구글시트\"",
"포인트: 목표를 1개로",
"포인트: 예외/승인을 반드시",
"포인트: 중복 방지 조건 넣기"
],
"notes": "핵심(10초): '사례 1) 자동화 시나리오 설계(업무→흐름)' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 워크플로우 설계자 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "bullets",
"chapter": "Part 3",
"title": "사례 2) AI 단계 프롬프트(분류+추출)",
"bullets": [
"요청의 역할/관점: 이메일 분류/추출기",
"핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)",
"출력 통제: 결론 먼저, 근거/리스크를 함께 요청하면 품질이 안정화됨",
"짧은 예시 문장(참고): \"입력은 이메일 본문이야. / 1) 카테고리(요청/문의/공지/기타)로 분류\"",
"포인트: 출력 형식을 고정",
"포인트: 담당/기한이 핵심",
"포인트: 필드 추출로 자동 기록"
],
"notes": "핵심(10초): '사례 2) AI 단계 프롬프트(분류+추출)' 슬라이드입니다.\n포인트(20초): 요청의 역할/관점: 이메일 분류/추출기 / 핵심 입력 요소: 목적·대상·제약·데이터·출력 형식(표/목차/분량)\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "table",
"chapter": "Part 3",
"title": "워크플로우 예시(메일→슬랙→시트)",
"columns": [
"단계",
"입력",
"출력"
],
"rows": [
[
"Trigger",
"특정 메일 수신",
"본문/제목"
],
[
"AI Step",
"본문",
"요약+카테고리"
],
[
"Action",
"요약",
"슬랙 알림"
],
[
"Log",
"필드",
"시트 기록"
]
],
"notes": "읽는 법(15초): 표는 단계, 입력, 출력 기준으로 비교합니다.\n포인트(15초): 수치/정의/기간을 같이 확인해 오해를 줄입니다."
},
{
"type": "bullets",
"chapter": "Part 3",
"title": "결과 품질 검증 체크",
"bullets": [
"사실/수치/고유명사는 원문 대조",
"누락된 가정이 없는지 질문",
"대안 2개 이상 비교 요청",
"리스크/반론을 함께 요청"
],
"notes": "핵심(10초): '결과 품질 검증 체크' 슬라이드입니다.\n포인트(20초): 사실/수치/고유명사는 원문 대조 / 누락된 가정이 없는지 질문\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "section",
"title": "4. 리스크 & 체크리스트",
"subtitle": "안전하게, 팀 단위로 굴리기",
"notes": "전환(10초): 이제 '4. 리스크 & 체크리스트' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다."
},
{
"type": "two_column",
"chapter": "Part 4",
"title": "리스크와 완화 전략",
"left_title": "리스크",
"left_bullets": [
"오작동으로 잘못된 알림/기록",
"민감정보 유출",
"중복 실행",
"운영 부재"
],
"right_title": "완화",
"right_bullets": [
"승인 단계/조건 필터",
"가명화/필드 최소화",
"중복 방지 키",
"에러 알림/로그"
],
"notes": "의도(10초): 좌/우 대비로 메시지를 빠르게 정렬합니다.\n정리(10초): 오른쪽(권장/현실/완화) 기준으로 팀 표준을 잡는 것이 목표입니다."
},
{
"type": "bullets",
"chapter": "Part 4",
"title": "체크리스트(현업 적용용)",
"bullets": [
"트리거가 명확한가",
"예외/승인이 있는가",
"민감정보를 최소화했나",
"중복 방지 장치가 있나",
"에러 알림이 있나"
],
"notes": "핵심(10초): '체크리스트(현업 적용용)' 슬라이드입니다.\n포인트(20초): 트리거가 명확한가 / 예외/승인이 있는가\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "bullets",
"chapter": "Part 4",
"title": "팀 적용(롤아웃) 방법",
"bullets": [
"팀 1개 흐름부터 파일럿",
"체크리스트로 승인",
"성과(절감시간) 공유",
"표준 템플릿으로 확장"
],
"notes": "핵심(10초): '팀 적용(롤아웃) 방법' 슬라이드입니다.\n포인트(20초): 팀 1개 흐름부터 파일럿 / 체크리스트로 승인\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
},
{
"type": "section",
"title": "5. 요약 & 다음 행동",
"subtitle": "오늘부터 1개만 실행",
"notes": "전환(10초): 이제 '5. 요약 & 다음 행동' 파트로 넘어갑니다.\n안내(15초): 핵심 메시지를 먼저 잡고, 사례/체크리스트로 연결하겠습니다."
},
{
"type": "bullets",
"chapter": "Part 5",
"title": "핵심 요약",
"bullets": [
"자동화는 ‘작게 시작→안전하게 확장’",
"Trigger-AI-Action-Log가 기본 구조",
"예외/승인/로그가 안전장치",
"오늘 행동: 내 업무 1개를 Trigger/Action으로 정의"
],
"notes": "핵심(10초): '핵심 요약' 슬라이드입니다.\n포인트(20초): 자동화는 ‘작게 시작→안전하게 확장’ / Trigger-AI-Action-Log가 기본 구조\n연결(10초): 다음 슬라이드에서 구조(원칙/사례/리스크)로 이어갑니다."
}
]
}

View File

@@ -0,0 +1,218 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AX Curriculum Slides Spec",
"type": "object",
"required": ["meta", "slides"],
"properties": {
"meta": {
"type": "object",
"required": ["title", "duration_minutes"],
"properties": {
"title": { "type": "string", "minLength": 1 },
"subtitle": { "type": "string" },
"badge": { "type": "string" },
"duration_minutes": { "type": "integer", "minimum": 1 },
"audience": { "type": "string" },
"tone": { "type": "string" },
"footer_left": { "type": "string" }
},
"additionalProperties": true
},
"slides": {
"type": "array",
"minItems": 20,
"items": {
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "string",
"enum": ["cover", "agenda", "section", "bullets", "two_column", "process", "prompt", "table"]
},
"chapter": { "type": "string" },
"title": { "type": "string" },
"subtitle": { "type": "string" },
"items": { "type": "array", "items": { "type": "string" } },
"bullets": { "type": "array", "items": { "type": "string" } },
"left_title": { "type": "string" },
"left_bullets": { "type": "array", "items": { "type": "string" } },
"right_title": { "type": "string" },
"right_bullets": { "type": "array", "items": { "type": "string" } },
"steps": { "type": "array", "items": { "type": "string" } },
"prompt": { "type": "string" },
"tips": { "type": "array", "items": { "type": "string" } },
"columns": { "type": "array", "items": { "type": "string" } },
"rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "AX Deck Slides JSON Schema",
"type": "object",
"additionalProperties": false,
"required": ["meta", "slides"],
"properties": {
"meta": {
"type": "object",
"additionalProperties": false,
"required": ["title", "language"],
"properties": {
"title": { "type": "string", "minLength": 1 },
"subtitle": { "type": "string" },
"author": { "type": "string" },
"date": { "type": "string" },
"language": { "type": "string", "default": "ko-KR" },
"duration_minutes": { "type": "integer", "minimum": 1 },
"audience": { "type": "string" },
"version": { "type": "string" }
}
},
"slides": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/definitions/slide" }
}
},
"definitions": {
"bulletItem": {
"oneOf": [
{ "type": "string" },
{
"type": "object",
"additionalProperties": false,
"required": ["text"],
"properties": {
"text": { "type": "string" },
"children": {
"type": "array",
"items": { "$ref": "#/definitions/bulletItem" }
}
}
}
]
},
"column": {
"type": "object",
"additionalProperties": false,
"required": ["heading", "bullets"],
"properties": {
"heading": { "type": "string" },
"bullets": {
"type": "array",
"items": { "$ref": "#/definitions/bulletItem" }
}
}
},
"slide": {
"type": "object",
"additionalProperties": false,
"required": ["type", "title"],
"properties": {
"type": {
"type": "string",
"enum": [
"title",
"section",
"agenda",
"bullets",
"two_column_bullets",
"quote",
"table",
"exercise",
"closing",
"blank"
]
},
"title": { "type": "string" },
"subtitle": { "type": "string" },
"bullets": {
"type": "array",
"items": { "$ref": "#/definitions/bulletItem" }
},
"items": { "type": "array", "items": { "type": "string" } },
"left": { "$ref": "#/definitions/column" },
"right": { "$ref": "#/definitions/column" },
"quote": { "type": "string" },
"attribution": { "type": "string" },
"headers": { "type": "array", "minItems": 1, "items": { "type": "string" } },
"rows": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } },
"steps": { "type": "array", "items": { "type": "string" } },
"timebox_minutes": { "type": "integer", "minimum": 1 },
"notes": { "type": "string" }
},
"allOf": [
{ "if": { "properties": { "type": { "const": "agenda" } } }, "then": { "required": ["items"] } },
{ "if": { "properties": { "type": { "const": "bullets" } } }, "then": { "required": ["bullets"] } },
{
"if": { "properties": { "type": { "const": "two_column_bullets" } } },
"then": { "required": ["left", "right"] }
},
{ "if": { "properties": { "type": { "const": "quote" } } }, "then": { "required": ["quote"] } },
{ "if": { "properties": { "type": { "const": "table" } } }, "then": { "required": ["headers", "rows"] } },
{ "if": { "properties": { "type": { "const": "exercise" } } }, "then": { "required": ["steps"] } }
]
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AX 교육용 slides.json 스키마",
"type": "object",
"required": ["meta", "slides"],
"properties": {
"meta": {
"type": "object",
"required": ["title", "duration_minutes", "language"],
"properties": {
"title": { "type": "string", "minLength": 1 },
"subtitle": { "type": "string" },
"duration_minutes": { "type": "integer", "minimum": 5, "maximum": 180 },
"audience": { "type": "string" },
"language": { "type": "string", "enum": ["ko"] },
"version": { "type": "integer", "minimum": 1 }
},
"additionalProperties": true
},
"slides": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["type"],
"properties": {
"type": { "type": "string", "enum": ["title", "section", "content", "two_content"] },
"title": { "type": "string" },
"subtitle": { "type": "string" },
"bullets": {
"type": "array",
"items": {
"oneOf": [
{ "type": "string" },
{
"type": "object",
"required": ["text"],
"properties": {
"text": { "type": "string" },
"level": { "type": "integer", "minimum": 0, "maximum": 5 }
},
"additionalProperties": false
}
]
}
},
"left_bullets": { "$ref": "#/properties/slides/items/properties/bullets" },
"right_bullets": { "$ref": "#/properties/slides/items/properties/bullets" },
"notes": { "type": "string" }
},
"additionalProperties": true
}
}
},
"additionalProperties": false
}