실습에 용이한 웹 페이지 강의자료 만들기

소개

바이브코딩 실습을 하는 수업을 해야 하는데 지난 번에 프롬프트를 복사하는 것에 어려움이 있어서 이번엔 [복사하기] 버튼을 누르면 프롬프트가 복사되는 페이지를 만들어 보고 싶었습니다.

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

claude code에게 마크다운 파일을 주고 구현해 달라고 했습니다.

Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.

검정색 배경의 컴퓨터 화면 스크린샷

Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.

한국어 페이지 스크린샷

[복사하기] 눌러서 프롬프트를 복사하도록 구현했습니다.

Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>바이브 코딩으로 교육용 게임 만들기 | OO중학교</title>
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
  <style>
    :root {
      --bg: #F5EFE7;
      --surface: #FFFFFF;
      --primary: #1E3A5F;
      --primary-hover: #2D5986;
      --secondary: #3D7E6B;
      --accent: #C47B1A;
      --text: #2A2A2A;
      --text-muted: #6B6B6B;
      --border: #E2D9CE;
      --code-bg: #F0EBE3;
      --shadow: 0 2px 16px rgba(0,0,0,0.08);
      --shadow-hover: 0 6px 24px rgba(0,0,0,0.14);
      --radius: 12px;
    }

    * { box-sizing: border-box; margin: 0; padding: 0; }

    body {
      font-family: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, 'Malgun Gothic', sans-serif;
      background: var(--bg);
      color: var(--text);
      line-height: 1.7;
    }

    /* ── Navigation ── */
    nav {
      position: fixed;
      top: 0;
      width: 100%;
      background: var(--primary);
      z-index: 1000;
      padding: 0 2rem;
      box-shadow: 0 2px 12px rgba(0,0,0,0.2);
    }

    .nav-inner {
      max-width: 1100px;
      margin: 0 auto;
      display: flex;
      align-items: center;
      height: 60px;
      gap: 0.25rem;
    }

    .nav-brand {
      font-size: 0.95rem;
      font-weight: 700;
      color: #FFFFFF;
      margin-right: auto;
      white-space: nowrap;
    }

    nav a.nav-link {
      color: rgba(255,255,255,0.75);
      text-decoration: none;
      font-size: 0.83rem;
      font-weight: 500;
      padding: 0.4rem 0.7rem;
      border-radius: 6px;
      transition: all 0.2s;
      white-space: nowrap;
    }

    nav a.nav-link:hover,
    nav a.nav-link.active {
      background: rgba(255,255,255,0.18);
      color: #FFFFFF;
    }

    /* ── Main layout ── */
    main {
      max-width: 1100px;
      margin: 0 auto;
      padding: 80px 2rem 4rem;
    }

    /* ── Hero ── */
    .hero {
      background: linear-gradient(135deg, #1E3A5F 0%, #2D5986 55%, #3D7E6B 100%);
      border-radius: var(--radius);
      padding: 4rem 3rem;
      color: white;
      margin-bottom: 1.5rem;
      text-align: center;
    }

    .hero .badge {
      display: inline-block;
      background: rgba(255,255,255,0.18);
      border: 1px solid rgba(255,255,255,0.3);
      border-radius: 50px;
      padding: 0.3rem 1.2rem;
      font-size: 0.88rem;
      margin-bottom: 1.5rem;
      letter-spacing: 0.04em;
    }

    .hero h1 {
      font-size: 2.3rem;
      font-weight: 700;
      margin-bottom: 0.8rem;
      line-height: 1.35;
    }

    .hero p {
      font-size: 1rem;
      opacity: 0.82;
    }

    /* ── Sections ── */
    section {
      background: var(--surface);
      border-radius: var(--radius);
      padding: 2.5rem;
      margin-bottom: 1.5rem;
      box-shadow: var(--shadow);
      scroll-margin-top: 76px;
    }

    .section-header {
      display: flex;
      align-items: center;
      gap: 0.85rem;
      margin-bottom: 1.75rem;
    }

    .section-icon {
      width: 46px;
      height: 46px;
      border-radius: 10px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 1.4rem;
      flex-shrink: 0;
    }

    .icon-blue   { background: #E6EEF7; }
    .icon-green  { background: #E6F3EE; }
    .icon-amber  { background: #F5EDE0; }
    .icon-purple { background: #EDE8F5; }

    .section-header h2 {
      font-size: 1.45rem;
      font-weight: 700;
      color: var(--primary);
    }

    .subtitle {
      font-size: 0.88rem;
      color: var(--text-muted);
      margin-top: 0.2rem;
    }

    /* ── Info cards ── */
    .info-card {
      background: var(--bg);
      border: 1px solid var(--border);
      border-radius: 10px;
      padding: 1rem 1.25rem;
      margin: 0.75rem 0;
    }

    .card-highlight {
      background: #EBF2FA;
      border-color: #B5CEE5;
      border-left: 4px solid var(--primary);
    }

    .card-note {
      background: #F5F0E6;
      border-color: #DDD0B8;
      border-left: 4px solid var(--accent);
    }

    /* ── IDE grid ── */
    .ide-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 0.85rem;
      margin-top: 1rem;
    }

    .ide-card {
      background: var(--bg);
      border-radius: 10px;
      padding: 1.1rem 1.2rem;
      border: 1px solid var(--border);
      transition: all 0.2s;
    }

    .ide-card:hover {
      box-shadow: var(--shadow);
      transform: translateY(-2px);
    }

    .ide-name {
      font-weight: 700;
      color: var(--primary);
      margin-bottom: 0.3rem;
      font-size: 0.95rem;
    }

    .ide-desc {
      font-size: 0.83rem;
      color: var(--text-muted);
      line-height: 1.5;
    }

    /* ── Buttons ── */
    .btn {
      display: inline-flex;
      align-items: center;
      gap: 0.45rem;
      padding: 0.65rem 1.4rem;
      border-radius: 8px;
      font-size: 0.92rem;
      font-weight: 600;
      cursor: pointer;
      text-decoration: none;
      transition: all 0.2s;
      border: none;
      font-family: inherit;
    }

    .btn-primary {
      background: var(--primary);
      color: white;
    }
    .btn-primary:hover {
      background: var(--primary-hover);
      box-shadow: var(--shadow-hover);
      transform: translateY(-1px);
    }

    .btn-secondary {
      background: var(--secondary);
      color: white;
    }
    .btn-secondary:hover {
      background: #2D6B5A;
      box-shadow: var(--shadow-hover);
      transform: translateY(-1px);
    }

    .btn-accent {
      background: var(--accent);
      color: white;
    }
    .btn-accent:hover {
      background: #A86A10;
      box-shadow: var(--shadow-hover);
      transform: translateY(-1px);
    }

    .btn-copy {
      background: var(--accent);
      color: white;
      padding: 0.45rem 1rem;
      font-size: 0.85rem;
    }
    .btn-copy:hover { background: #A86A10; }
    .btn-copy.copied { background: var(--secondary); }

    .btn-group {
      display: flex;
      flex-wrap: wrap;
      gap: 0.75rem;
      margin-top: 1.25rem;
    }

    /* ── Prompt box ── */
    .prompt-box {
      background: #1C2A3E;
      border-radius: 12px;
      padding: 1.5rem;
      margin: 1.5rem 0;
    }

    .prompt-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      margin-bottom: 1rem;
    }

    .prompt-label {
      color: rgba(255,255,255,0.55);
      font-size: 0.82rem;
      letter-spacing: 0.04em;
    }

    .prompt-text {
      color: #E6D8BF;
      font-size: 0.93rem;
      line-height: 1.85;
      white-space: pre-wrap;
      word-break: keep-all;
    }

    /* ── Rule cards ── */
    .rule-card {
      display: flex;
      gap: 1rem;
      padding: 1.1rem 1.25rem;
      background: var(--bg);
      border-radius: 10px;
      border-left: 4px solid var(--accent);
      margin-bottom: 0.75rem;
    }

    .rule-number {
      width: 30px;
      height: 30px;
      background: var(--accent);
      color: white;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 700;
      font-size: 0.9rem;
      flex-shrink: 0;
      margin-top: 2px;
    }

    .rule-title {
      font-weight: 600;
      margin-bottom: 0.2rem;
      font-size: 0.95rem;
    }

    .rule-desc {
      font-size: 0.85rem;
      color: var(--text-muted);
    }

    /* ── File type grid ── */
    .code-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 1rem;
      margin-top: 1rem;
    }

    .code-item {
      background: var(--code-bg);
      border-radius: 10px;
      padding: 1.25rem;
      border: 1px solid var(--border);
    }

    .file-ext {
      font-size: 1.5rem;
      font-weight: 800;
      color: var(--primary);
      font-family: 'Courier New', monospace;
      display: block;
      margin-bottom: 0.4rem;
    }

    .file-name {
      font-weight: 600;
      color: var(--accent);
      font-family: 'Courier New', monospace;
      font-size: 0.88rem;
      margin-bottom: 0.5rem;
      display: block;
    }

    .code-item p {
      font-size: 0.85rem;
      color: var(--text-muted);
      line-height: 1.55;
    }

    /* ── Single vs multi file ── */
    .file-compare {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 1rem;
      margin-top: 1.25rem;
    }

    .file-box {
      border-radius: 10px;
      padding: 1.4rem;
      text-align: center;
    }

    .file-box.multi {
      background: #EBF2FA;
      border: 2px solid #B5CEE5;
    }

    .file-box.single {
      background: #E6F3EE;
      border: 2px solid #A5CFC0;
    }

    .file-count {
      font-size: 2.6rem;
      font-weight: 800;
      line-height: 1;
      margin-bottom: 0.35rem;
    }

    .file-box.multi .file-count { color: var(--primary); }
    .file-box.single .file-count { color: var(--secondary); }

    .file-box strong { font-size: 0.95rem; }
    .file-box p { font-size: 0.85rem; color: var(--text-muted); margin-top: 0.4rem; }

    /* ── Tip/warning box ── */
    .tip-box {
      display: flex;
      gap: 1rem;
      padding: 1rem 1.25rem;
      border-radius: 10px;
      background: #F5F0E6;
      border: 1px solid #DDD0B8;
      margin: 1.25rem 0;
      align-items: flex-start;
    }

    .tip-icon { font-size: 1.4rem; flex-shrink: 0; padding-top: 0.1rem; }

    /* ── Two-col grid ── */
    .two-col {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 1rem;
      margin-bottom: 1.5rem;
    }

    .feature-panel {
      border-radius: 10px;
      padding: 1.25rem;
    }

    .panel-blue  { background: #EBF2FA; }
    .panel-green { background: #E6F3EE; }

    .panel-title {
      font-size: 0.95rem;
      font-weight: 700;
      margin-bottom: 0.85rem;
    }

    .panel-blue  .panel-title { color: var(--primary); }
    .panel-green .panel-title { color: var(--secondary); }

    .feature-list {
      list-style: none;
      display: flex;
      flex-direction: column;
      gap: 0.5rem;
    }

    .feature-list li {
      padding: 0.6rem 0.85rem;
      background: rgba(255,255,255,0.65);
      border-radius: 7px;
      font-size: 0.88rem;
      border-left: 3px solid;
    }

    .panel-blue  .feature-list li { border-left-color: var(--primary); }
    .panel-green .feature-list li { border-left-color: var(--secondary); }

    /* ── Image ── */
    .image-container {
      text-align: center;
      margin: 1.5rem 0 0;
    }

    .image-container img {
      max-width: 100%;
      max-width: 820px;
      width: 100%;
      border-radius: 12px;
      box-shadow: var(--shadow);
    }

    /* ── Resource cards ── */
    .resource-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 1rem;
    }

    .resource-card {
      border-radius: 10px;
      padding: 1.4rem;
    }

    .resource-card.card-blue  { background: var(--bg); border-left: 4px solid var(--primary);   border: 1px solid var(--border); border-left: 4px solid var(--primary); }
    .resource-card.card-green { background: var(--bg); border-left: 4px solid var(--secondary); border: 1px solid var(--border); border-left: 4px solid var(--secondary); }

    .resource-card strong {
      display: block;
      margin-bottom: 0.45rem;
      font-size: 0.95rem;
    }

    .resource-card.card-blue  strong { color: var(--primary); }
    .resource-card.card-green strong { color: var(--secondary); }

    .resource-card p {
      font-size: 0.85rem;
      color: var(--text-muted);
      margin-bottom: 0.85rem;
      line-height: 1.55;
    }

    hr.divider {
      border: none;
      border-top: 1px solid var(--border);
      margin: 1.5rem 0;
    }

    /* ── Footer ── */
    footer {
      background: var(--primary);
      color: rgba(255,255,255,0.65);
      text-align: center;
      padding: 2rem;
      font-size: 0.88rem;
    }

    footer .footer-title {
      font-weight: 600;
      color: white;
      margin-bottom: 0.3rem;
    }

    /* ── Responsive ── */
    @media (max-width: 768px) {
      main { padding: 70px 1rem 3rem; }
      .hero { padding: 2.5rem 1.5rem; }
      .hero h1 { font-size: 1.65rem; }
      nav a.nav-link { display: none; }
      section { padding: 1.75rem 1.25rem; }
      .code-grid { grid-template-columns: 1fr; }
      .file-compare { grid-template-columns: 1fr; }
      .two-col { grid-template-columns: 1fr; }
      .resource-grid { grid-template-columns: 1fr; }
    }
  </style>
</head>
<body>

<!-- ── Navigation ── -->
<nav>
  <div class="nav-inner">
    <span class="nav-brand">🏫 OO중학교 에듀테크 연수</span>
    <a href="#install"  class="nav-link">프로그램 설치</a>
    <a href="#game"     class="nav-link">교육용 게임</a>
    <a href="#design"   class="nav-link">게임 설계</a>
    <a href="#webapp"   class="nav-link">웹 앱 개발</a>
    <a href="#markdown" class="nav-link">마크다운</a>
    <a href="#resources" class="nav-link">자료</a>
  </div>
</nav>

<main>

  <!-- ── Hero ── -->
  <div class="hero">
    <div class="badge">2026 OO · 학교로 찾아가는 에듀테크 연수</div>
    <h1>바이브 코딩으로<br>교육용 게임을 만들어 보자!</h1>
    <p>OO중학교 · AI와 함께하는 교육용 앱 개발 체험</p>
  </div>

  <!-- ── 프로그램 설치 ── -->
  <section id="install">
    <div class="section-header">
      <div class="section-icon icon-blue">💻</div>
      <div>
        <h2>프로그램 설치</h2>
        <p class="subtitle">본격적으로 진행하기 전에 세팅을 먼저 해보겠습니다!</p>
      </div>
    </div>

    <div class="info-card card-highlight">
      <strong>✅ Google AI Studio</strong> — 별도 설치가 필요 없습니다.
    </div>

    <div class="info-card" style="border-left: 4px solid var(--accent);">
      <strong>📦 Antigravity IDE</strong> — 설치가 필요합니다.
    </div>

    <div class="btn-group">
      <a href="https://antigravity.google/" target="_blank" class="btn btn-primary">
        🔗 Antigravity 설치 사이트 바로가기
      </a>
    </div>
    <p class="subtitle" style="margin-top: 0.6rem; padding-left: 0.2rem;">
      설치 후: Product &gt; Antigravity IDE 항목 선택
    </p>

    <hr class="divider">

    <div style="margin-bottom: 1rem;">
      <strong style="font-size: 1.05rem; color: var(--primary);">IDE란 무엇인가요?</strong>
    </div>

    <div class="info-card card-note">
      <strong>IDE (Integrated Development Environment)</strong>란 '통합 개발 환경'을 말합니다.<br>
      <span style="font-size: 0.9rem; color: var(--text-muted);">코드 작성 · 실행 · 디버깅을 하나의 프로그램 안에서 할 수 있게 해줍니다.</span>
    </div>

    <div class="ide-grid">
      <div class="ide-card">
        <div class="ide-name">Visual Studio</div>
        <div class="ide-desc">마이크로소프트의 강력한 통합 개발 환경</div>
      </div>
      <div class="ide-card">
        <div class="ide-name">IntelliJ IDEA ⭐</div>
        <div class="ide-desc">Java 개발에 가장 많이 쓰이는 인기 IDE — 강추!</div>
      </div>
      <div class="ide-card">
        <div class="ide-name">Xcode</div>
        <div class="ide-desc">애플 기기용 앱을 만들 때 사용하는 IDE</div>
      </div>
      <div class="ide-card">
        <div class="ide-name">Android Studio</div>
        <div class="ide-desc">안드로이드 스마트폰 앱 개발을 위한 전용 IDE</div>
      </div>
      <div class="ide-card">
        <div class="ide-name">VS Code</div>
        <div class="ide-desc">텍스트 에디터이지만 확장 기능으로 IDE처럼 활용 가능</div>
      </div>
    </div>
  </section>

  <!-- ── 교육용 게임 ── -->
  <section id="game">
    <div class="section-header">
      <div class="section-icon icon-green">🎮</div>
      <div>
        <h2>교육용 게임이란?</h2>
        <p class="subtitle">오늘 만들어볼 게임 — 간단한 학습 앱!</p>
      </div>
    </div>

    <div class="two-col">
      <div class="feature-panel panel-blue">
        <div class="panel-title">📌 교육용 게임의 특징</div>
        <ul class="feature-list">
          <li><strong>목적이 명확하다!</strong></li>
          <li>교육 효과가 있다면 재미가 좀 없어도 괜찮다???</li>
          <li><strong>재미도 있으면 더 좋겠지요!</strong></li>
        </ul>
      </div>
      <div class="feature-panel panel-green">
        <div class="panel-title">🎯 진지한 게임 (Serious Game)</div>
        <p style="font-size: 0.88rem; line-height: 1.7;">
          교육, 훈련, 의료, 국방 등 <strong>특정 목적을 달성하기 위해 설계된 기능성 게임</strong>을 말합니다.<br>
          단순한 오락을 넘어 실질적인 학습 효과를 목표로 합니다.
        </p>
      </div>
    </div>

    <strong style="display: block; font-size: 1.05rem; color: var(--primary); margin-bottom: 1rem;">
      🎲 게임을 만들 때 지켜야 할 규칙
    </strong>

    <div class="rule-card">
      <div class="rule-number">1</div>
      <div>
        <div class="rule-title">학습에 꼭 필요한 요소에는 "노.가.다"가 있다.</div>
        <div class="rule-desc">반복 학습은 필수! 지루하지 않게 설계하는 것이 핵심입니다.</div>
      </div>
    </div>
    <div class="rule-card">
      <div class="rule-number">2</div>
      <div>
        <div class="rule-title">재미있게 반복할 수 있다면 — 확실한 피드백과 보상을 설계하기</div>
        <div class="rule-desc">점수, 이펙트, 격려 메시지 등으로 학습 동기를 유지시키세요.</div>
      </div>
    </div>
    <div class="rule-card">
      <div class="rule-number">3</div>
      <div>
        <div class="rule-title">틀렸다고 바로 "The End"를 주지 말기!</div>
        <div class="rule-desc">"다시 해봐~" → 다시 도전할 수 있도록 구현하세요.</div>
      </div>
    </div>
    <div class="rule-card">
      <div class="rule-number">4</div>
      <div>
        <div class="rule-title">제목은 직관적으로, 학부모도 타겟이 되어야 한다.</div>
        <div class="rule-desc">교육용 콘텐츠의 구매 결정자는 학부모! 제목과 설명을 명확하게 쓰세요.</div>
      </div>
    </div>
  </section>

  <!-- ── 게임 설계 ── -->
  <section id="design">
    <div class="section-header">
      <div class="section-icon icon-amber">📐</div>
      <div>
        <h2>교육용 게임 설계</h2>
        <p class="subtitle">AI에게 전달할 프롬프트 예제 — 버튼을 눌러 복사하세요!</p>
      </div>
    </div>

    <div class="prompt-box">
      <div class="prompt-header">
        <span class="prompt-label">📋 프롬프트 예제</span>
        <button class="btn btn-copy" id="copyBtn" onclick="copyPrompt()">복사하기</button>
      </div>
      <div class="prompt-text" id="promptText">나는 교육용 콘텐츠를 개발하는 개발자이고, 너는 나를 가르쳐주는 프로그램 선생님이야. 중학교 학생의 난이도로 영어 단어를 학습하는 앱을 만들고 싶어 문제는 총 100개. 문제를 풀 때마다 1점씩 증가하고, 총점을 기록해주면 좋겠어. 데이터는 배열로 저장해서 내가 편집할 수 있었으면 좋겠어.

첫 번째 페이지는 "중학생을 위한 영어 마스터"라고 나오고 하단에 "Start"라는 버튼을 클릭하면 다음 페이지부터 영어 학습이 가능해. 문제를 맞추면 "참 잘했어요." 라는 피드백과 함께 이펙트가 터지도록 만들어주고, 틀리면 틀렸다고 하지 말고 "다시 한 번 풀어봐."라고 피드백을 해줘. 문제를 풀다가 이전, 다음으로 이동할 수 있고, home으로 이동하는 버튼도 만들어줘. 중학생들이 좋아할 만한 디자인으로 만들어주면 좋겠어. html 단일 페이지로 만들어줘.</div>
    </div>

    <div class="tip-box">
      <span class="tip-icon">💡</span>
      <div>
        <strong>"html 단일 페이지로 만들어줘"</strong> — 이 요청이 핵심입니다!<br>
        <span style="font-size: 0.86rem; color: var(--text-muted);">하나의 HTML 파일 안에 모든 기능을 담을 수 있어 배포와 공유가 매우 편리합니다.</span>
      </div>
    </div>
  </section>

  <!-- ── 웹 앱 개발 ── -->
  <section id="webapp">
    <div class="section-header">
      <div class="section-icon icon-purple">🌐</div>
      <div>
        <h2>웹 앱 개발 기초</h2>
        <p class="subtitle">기본적으로 3개의 파일이 필요합니다</p>
      </div>
    </div>

    <div class="code-grid">
      <div class="code-item">
        <span class="file-ext">.html</span>
        <span class="file-name">index.html</span>
        <p>사용자에게 보이는 화면(Front)의 <strong>구조</strong>를 정의하는 태그들이 담긴 파일</p>
      </div>
      <div class="code-item">
        <span class="file-ext">.css</span>
        <span class="file-name">style.css</span>
        <p>사용자에게 보이는 화면의 <strong>디자인</strong>을 기록한 파일</p>
      </div>
      <div class="code-item">
        <span class="file-ext">.js</span>
        <span class="file-name">script.js</span>
        <p>사용자에게 보이는 화면의 <strong>동작</strong>을 구현해놓은 파일</p>
      </div>
    </div>

    <div class="file-compare">
      <div class="file-box multi">
        <div class="file-count">3개</div>
        <strong>"교육용 앱 만들어줘"</strong>
        <p>html · css · js 각각 분리된 3개 파일 생성</p>
      </div>
      <div class="file-box single">
        <div class="file-count">1개</div>
        <strong>"단일 파일로 만들어줘"</strong>
        <p>모든 코드가 담긴 html 파일 1개만 생성</p>
      </div>
    </div>

    <hr class="divider">

    <div class="tip-box">
      <span class="tip-icon">⚠️</span>
      <div>
        <strong>생성형 AI와 사랑에 빠지지 마세요 = 배신 당하니까!</strong><br>
        <span style="font-size: 0.86rem; color: var(--text-muted);">토큰이 부족하기 때문에 오늘은 3번 정도만 실습해 보겠습니다.</span>
      </div>
    </div>

    <div class="image-container">
      <img src="#" alt="Antigravity IDE 실습 화면">
    </div>
  </section>

  <!-- ── 마크다운 ── -->
  <section id="markdown">
    <div class="section-header">
      <div class="section-icon icon-blue">📝</div>
      <div>
        <h2>마크다운을 사용해보자!</h2>
        <p class="subtitle">프롬프트를 재사용 가능하게 — .md 파일로 관리하기</p>
      </div>
    </div>

    <div class="info-card card-highlight">
      <p>
        프롬프트만 쓰면 재사용하기 어렵습니다.<br>
        <strong>마크다운(.md) 파일</strong>을 만들어 체계적으로 관리해봅시다!
      </p>
    </div>

    <div class="btn-group">
      <a href="#"
         target="_blank" class="btn btn-secondary">
        📖 마크다운 완벽 가이드 보기
      </a>
    </div>
  </section>

  <!-- ── 자료 모음 ── -->
  <section id="resources">
    <div class="section-header">
      <div class="section-icon icon-green">📚</div>
      <div>
        <h2>자료 모음</h2>
        <p class="subtitle">연수 관련 자료를 아래에서 확인하세요</p>
      </div>
    </div>

      <div class="resource-card card-green">
        <strong>📥 강의자료 다운로드</strong>
        <p>좀 더 복잡한 문서를 만들기 위해, 강의자료를 다운로드하세요.</p>
        <a href="#"
           class="btn btn-secondary" style="font-size: 0.85rem; padding: 0.5rem 1rem;">
          ⬇️ 강의자료 다운로드
        </a>
      </div>
  </section>

</main>

<footer>
  <div class="footer-title">2026 OO 아이랑(with AI) · 학교로 찾아가는 에듀테크 연수</div>
  <div>OO중학교 · 바이브 코딩으로 교육용 게임을 만들어 보자!</div>
</footer>

<script>
  // ── Clipboard copy ──
  function copyPrompt() {
    const text = document.getElementById('promptText').innerText;
    const btn  = document.getElementById('copyBtn');

    navigator.clipboard.writeText(text).then(() => {
      btn.textContent = '✅ 복사 완료!';
      btn.classList.add('copied');
    }).catch(() => {
      const ta = document.createElement('textarea');
      ta.value = text;
      ta.style.position = 'fixed';
      ta.style.opacity  = '0';
      document.body.appendChild(ta);
      ta.select();
      document.execCommand('copy');
      document.body.removeChild(ta);
      btn.textContent = '✅ 복사 완료!';
      btn.classList.add('copied');
    });

    setTimeout(() => {
      btn.textContent = '복사하기';
      btn.classList.remove('copied');
    }, 2200);
  }

  // ── Smooth scroll ──
  document.querySelectorAll('a[href^="#"]').forEach(a => {
    a.addEventListener('click', e => {
      e.preventDefault();
      const target = document.querySelector(a.getAttribute('href'));
      if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
    });
  });

  // ── Active nav highlight on scroll ──
  const sections = document.querySelectorAll('section[id]');
  const navLinks = document.querySelectorAll('nav a.nav-link');

  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (!entry.isIntersecting) return;
      navLinks.forEach(l => l.classList.remove('active'));
      const link = document.querySelector(`nav a[href="#${entry.target.id}"]`);
      if (link) link.classList.add('active');
    });
  }, { threshold: 0.35, rootMargin: '-70px 0px -55% 0px' });

  sections.forEach(s => observer.observe(s));
</script>
</body>
</html>

결과와 배운 점

배운 점과 나만의 꿀팁을 알려주세요.

원하는 것이 명확해야 원하는 것을 만들 수 있다!!!는 사실을 깨달을 수 있었습니다.

과정 중에 어떤 시행착오를 겪었나요?

e-class가 없는 상태에서 수업을 진행하는 것을 처음 해보니 어려움들이 있었지만, 그 과정에서 하나하나 노하우가 쌓여가는 듯 합니다.

1
1개의 답글

뉴스레터 무료 구독