Created
September 4, 2025 03:57
-
-
Save ghostflare76/6d5aad198bfe23ccaeac4b1004ec6fcf to your computer and use it in GitHub Desktop.
bmad
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="ko"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>UX Research Quest: BMAD-METHOD Adventure</title> | |
| <style> | |
| body { | |
| background-color: #0a0a0a; | |
| color: #00ff00; | |
| font-family: 'Courier New', monospace; | |
| margin: 0; | |
| padding: 20px; | |
| line-height: 1.4; | |
| } | |
| .terminal { | |
| background-color: #1a1a1a; | |
| border: 2px solid #00ff00; | |
| border-radius: 5px; | |
| padding: 20px; | |
| max-width: 800px; | |
| margin: 0 auto; | |
| box-shadow: 0 0 20px rgba(0, 255, 0, 0.3); | |
| } | |
| .header { | |
| text-align: center; | |
| border-bottom: 1px solid #00ff00; | |
| padding-bottom: 10px; | |
| margin-bottom: 20px; | |
| } | |
| .game-area { | |
| min-height: 400px; | |
| } | |
| .story-text { | |
| margin-bottom: 20px; | |
| animation: typewriter 0.5s steps(50); | |
| } | |
| .agent-message { | |
| color: #ffff00; | |
| background-color: #2a2a0a; | |
| padding: 10px; | |
| border-left: 4px solid #ffff00; | |
| margin: 10px 0; | |
| } | |
| .user-message { | |
| color: #00ffff; | |
| background-color: #0a2a2a; | |
| padding: 10px; | |
| border-left: 4px solid #00ffff; | |
| margin: 10px 0; | |
| } | |
| .options { | |
| margin: 20px 0; | |
| } | |
| .option { | |
| background-color: #2a2a2a; | |
| border: 1px solid #00ff00; | |
| color: #00ff00; | |
| padding: 10px 15px; | |
| margin: 5px 0; | |
| cursor: pointer; | |
| display: block; | |
| width: 100%; | |
| text-align: left; | |
| transition: all 0.3s; | |
| } | |
| .option:hover { | |
| background-color: #00ff00; | |
| color: #000; | |
| } | |
| .status-bar { | |
| background-color: #2a2a2a; | |
| padding: 10px; | |
| border-top: 1px solid #00ff00; | |
| margin-top: 20px; | |
| display: flex; | |
| justify-content: space-between; | |
| } | |
| .progress-bar { | |
| width: 100%; | |
| height: 10px; | |
| background-color: #2a2a2a; | |
| border: 1px solid #00ff00; | |
| margin: 10px 0; | |
| } | |
| .progress-fill { | |
| height: 100%; | |
| background-color: #00ff00; | |
| transition: width 0.5s; | |
| } | |
| .agent-list { | |
| background-color: #1a1a2a; | |
| padding: 10px; | |
| border: 1px solid #00ffff; | |
| margin: 10px 0; | |
| } | |
| .agent-available { | |
| color: #00ff00; | |
| } | |
| .agent-inactive { | |
| color: #666666; | |
| } | |
| .document-preview { | |
| background-color: #2a1a1a; | |
| border: 1px solid #ff00ff; | |
| padding: 10px; | |
| margin: 10px 0; | |
| max-height: 200px; | |
| overflow-y: auto; | |
| } | |
| @keyframes typewriter { | |
| from { width: 0; } | |
| to { width: 100%; } | |
| } | |
| @keyframes blink { | |
| 0%, 50% { opacity: 1; } | |
| 51%, 100% { opacity: 0; } | |
| } | |
| .cursor { | |
| animation: blink 1s infinite; | |
| } | |
| .input-area { | |
| margin-top: 20px; | |
| } | |
| .user-input { | |
| background-color: #0a0a0a; | |
| color: #00ff00; | |
| border: 1px solid #00ff00; | |
| padding: 10px; | |
| width: calc(100% - 22px); | |
| font-family: 'Courier New', monospace; | |
| font-size: 14px; | |
| } | |
| .send-button { | |
| background-color: #00ff00; | |
| color: #000; | |
| border: none; | |
| padding: 10px 20px; | |
| margin-top: 5px; | |
| cursor: pointer; | |
| font-family: 'Courier New', monospace; | |
| } | |
| .send-button:hover { | |
| background-color: #00cc00; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="terminal"> | |
| <div class="header"> | |
| <h1>๐ฌ UX RESEARCH QUEST ๐ฌ</h1> | |
| <p>BMAD-METHOD์ ํจ๊ปํ๋ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก ๊ฐ๋ฐ ์ฌ์ </p> | |
| </div> | |
| <div class="game-area" id="gameArea"> | |
| <div class="story-text" id="storyText"> | |
| > ์์คํ ๋ถํ ์ค...<br> | |
| > BMAD-METHOD ์์ด์ ํธ ํ๋ ์์ํฌ ์ด๊ธฐํ ์๋ฃ<br> | |
| > UX ๋ฆฌ์์น ์๋๋ฆฌ์ค ๋ก๋ฉ...<br><br> | |
| ๐ <strong>๋น์ ์ ์ญํ :</strong> UX ๋ฆฌ์์ฒ ์์ด์ <br> | |
| ๐ <strong>ํ์ฌ ์์น:</strong> BMAD-METHOD ์ํฌ์คํ์ด์ค<br> | |
| ๐ <strong>๋ฏธ์ :</strong> ๋ชจ๋ฐ์ผ ์ผํ์ฑ์ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก ์๋ฆฝ<br><br> | |
| ๋น์ ์ ์ฒ์์ผ๋ก BMAD-METHOD๋ฅผ ์ฌ์ฉํ๊ฒ ๋ UX ๋ฆฌ์์ฒ์ ๋๋ค. | |
| ํ์ฌ์์ ์๋ก์ด ๋ชจ๋ฐ์ผ ์ผํ์ฑ 'ShopEasy'์ ์ฌ์ฉ์ฑ ํ๊ฐ๋ฅผ ๋ด๋นํ๊ฒ ๋์๊ณ , | |
| ์ฒด๊ณ์ ์ธ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก ์ ์๋ฆฝํด์ผ ํฉ๋๋ค.<br><br> | |
| <span class="cursor">โ</span> | |
| </div> | |
| <div class="agent-list"> | |
| <h3>๐ค ์ฌ์ฉ ๊ฐ๋ฅํ BMAD ์์ด์ ํธ๋ค:</h3> | |
| <div class="agent-available">โ Mary (๋น์ฆ๋์ค ๋ถ์๊ฐ) - ๋ธ๋ ์ธ์คํ ๋ฐ ์ ๋ฌธ</div> | |
| <div class="agent-inactive">โ PM (ํ๋ก์ ํธ ๋งค๋์ ) - PRD ์์ฑ ์ ๋ฌธ</div> | |
| <div class="agent-inactive">โ Architect (์ํคํ ํธ) - ์์คํ ์ค๊ณ ์ ๋ฌธ</div> | |
| <div class="agent-inactive">โ Scrum Master - ๊ฐ๋ฐ ์คํ ๋ฆฌ ๊ด๋ฆฌ</div> | |
| <div class="agent-inactive">โ Developer - ์ค์ ๊ตฌํ ๋ด๋น</div> | |
| <div class="agent-inactive">โ QA - ํ์ง ๊ฒ์ฆ ๋ด๋น</div> | |
| </div> | |
| <div class="status-bar"> | |
| <span>ํ๋ก์ ํธ ์งํ๋ฅ :</span> | |
| <div class="progress-bar"> | |
| <div class="progress-fill" id="progressFill" style="width: 5%;"></div> | |
| </div> | |
| <span id="progressText">5%</span> | |
| </div> | |
| </div> | |
| <div class="options" id="optionsArea"> | |
| <button class="option" onclick="startBrainstorming()"> | |
| ๐ง Mary์ ๋ธ๋ ์ธ์คํ ๋ฐ ์์ํ๊ธฐ | |
| </button> | |
| <button class="option" onclick="exploreWorkspace()"> | |
| ๐ ์ํฌ์คํ์ด์ค ์ดํด๋ณด๊ธฐ | |
| </button> | |
| <button class="option" onclick="checkDocuments()"> | |
| ๐ ๊ธฐ์กด ๋ฌธ์ ํ์ธํ๊ธฐ | |
| </button> | |
| </div> | |
| <div class="input-area" id="inputArea" style="display: none;"> | |
| <input type="text" class="user-input" id="userInput" placeholder="๋น์ ์ ์๋ต์ ์ ๋ ฅํ์ธ์..."> | |
| <button class="send-button" onclick="sendMessage()">์ ์ก</button> | |
| </div> | |
| </div> | |
| <script> | |
| let gameState = { | |
| currentStage: 'intro', | |
| progress: 5, | |
| activeAgent: null, | |
| conversationHistory: [], | |
| documents: [], | |
| researchMethods: [] | |
| }; | |
| const agents = { | |
| mary: { | |
| name: "Mary (๋น์ฆ๋์ค ๋ถ์๊ฐ)", | |
| personality: "์ฐฝ์์ ์ด๊ณ ์ง๋ฌธ์ ๋ง์ด ํ๋ ๋ธ๋ ์ธ์คํ ๋ฐ ์ ๋ฌธ๊ฐ", | |
| color: "#ffff00" | |
| }, | |
| pm: { | |
| name: "PM (ํ๋ก์ ํธ ๋งค๋์ )", | |
| personality: "์ฒด๊ณ์ ์ด๊ณ ๋ ผ๋ฆฌ์ ์ธ ์๊ตฌ์ฌํญ ์ ๋ฆฌ ์ ๋ฌธ๊ฐ", | |
| color: "#ff8800" | |
| }, | |
| architect: { | |
| name: "Architect (์์คํ ์ํคํ ํธ)", | |
| personality: "๊ตฌ์กฐ์ ์ฌ๊ณ ์ ์์คํ ์ค๊ณ ์ ๋ฌธ๊ฐ", | |
| color: "#8800ff" | |
| } | |
| }; | |
| function updateProgress(newProgress) { | |
| gameState.progress = newProgress; | |
| document.getElementById('progressFill').style.width = newProgress + '%'; | |
| document.getElementById('progressText').textContent = newProgress + '%'; | |
| } | |
| function addMessage(sender, message, isAgent = false) { | |
| const gameArea = document.getElementById('gameArea'); | |
| const messageDiv = document.createElement('div'); | |
| messageDiv.className = isAgent ? 'agent-message' : 'user-message'; | |
| messageDiv.innerHTML = `<strong>${sender}:</strong> ${message}`; | |
| gameArea.appendChild(messageDiv); | |
| gameArea.scrollTop = gameArea.scrollHeight; | |
| gameState.conversationHistory.push({ | |
| sender: sender, | |
| message: message, | |
| timestamp: new Date() | |
| }); | |
| } | |
| function startBrainstorming() { | |
| gameState.currentStage = 'brainstorming'; | |
| gameState.activeAgent = 'mary'; | |
| updateProgress(15); | |
| document.getElementById('optionsArea').style.display = 'none'; | |
| document.getElementById('inputArea').style.display = 'block'; | |
| setTimeout(() => { | |
| addMessage("Mary", `์๋ ํ์ธ์, ์์ด์ ๋! ์ ๋ BMAD-METHOD์ ๋น์ฆ๋์ค ๋ถ์๊ฐ Mary์ ๋๋ค. ๐ฏ<br><br> | |
| ๋ชจ๋ฐ์ผ ์ผํ์ฑ 'ShopEasy'์ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก ์ ํจ๊ป ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค!<br><br> | |
| ๋จผ์ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ๋๋ฆด๊ฒ์:<br> | |
| 1๏ธโฃ ์ด ์ฑ์ ์ฃผ์ ์ฌ์ฉ์์ธต์ ๋๊ตฌ๋ผ๊ณ ์๊ฐํ์๋์?<br> | |
| 2๏ธโฃ ๊ฐ์ฅ ์ค์ํ๊ฒ ํ๊ฐํ๊ณ ์ถ์ UX ์์๋ ๋ฌด์์ธ๊ฐ์?<br> | |
| 3๏ธโฃ ๊ธฐ์กด์ ์ฌ์ฉํด๋ณด์ UX ํ๊ฐ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ด๋ค ๊ฒ๋ค์ด ์์๊น์?<br><br> | |
| ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ต๋ณํด์ฃผ์๋ฉด, ์ ๊ฐ 20๊ฐ์ง ๋ธ๋ ์ธ์คํ ๋ฐ ๊ธฐ๋ฒ ์ค์์ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ถ์ฒํด๋๋ฆด๊ฒ์! ๐`, true); | |
| }, 1000); | |
| } | |
| function exploreWorkspace() { | |
| addMessage("์์คํ ", `๐ BMAD-METHOD ์ํฌ์คํ์ด์ค ํ์ ์ค...<br><br> | |
| ๐ <strong>ํ์ฌ ํ๋ก์ ํธ ๊ตฌ์กฐ:</strong><br> | |
| โโโ /docs (๋ฌธ์ ์๋ ์ ์ฅ ๊ณต๊ฐ)<br> | |
| โโโ /brainstorming (๋ธ๋ ์ธ์คํ ๋ฐ ๊ฒฐ๊ณผ)<br> | |
| โโโ /requirements (์๊ตฌ์ฌํญ ๋ฌธ์)<br> | |
| โโโ /architecture (์ค๊ณ ๋ฌธ์)<br> | |
| โโโ /research_methods (UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก )<br><br> | |
| ๐ก <strong>ํน์ง:</strong><br> | |
| โข ๋ชจ๋ ๋ํ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์ค์๊ฐ์ผ๋ก ๋ฌธ์ํ๋ฉ๋๋ค<br> | |
| โข ์์ด์ ํธ ๊ฐ ํ์ ์ผ๋ก ์ฒด๊ณ์ ์ธ ๋ฐฉ๋ฒ๋ก ์ ๊ตฌ์ถํฉ๋๋ค<br> | |
| โข ์น ์ธํฐํ์ด์ค ์์ด๋ IDE ๋ด์์ ๋ชจ๋ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค<br><br> | |
| ๋ค์ ๋จ๊ณ๋ฅผ ์ ํํ์ธ์:`); | |
| document.getElementById('optionsArea').innerHTML = ` | |
| <button class="option" onclick="startBrainstorming()"> | |
| ๐ง Mary์ ๋ธ๋ ์ธ์คํ ๋ฐ ์์ํ๊ธฐ | |
| </button> | |
| <button class="option" onclick="checkTemplates()"> | |
| ๐ UX ํ๊ฐ ํ ํ๋ฆฟ ํ์ธํ๊ธฐ | |
| </button> | |
| `; | |
| } | |
| function checkDocuments() { | |
| addMessage("์์คํ ", `๐ ๊ธฐ์กด ๋ฌธ์ ์ค์บ ์ค...<br><br> | |
| <div class="document-preview"> | |
| <strong>๋ฐ๊ฒฌ๋ ๊ด๋ จ ๋ฌธ์๋ค:</strong><br><br> | |
| ๐ <strong>company_ux_guidelines.md</strong><br> | |
| - ํ์ฌ UX ํ๊ฐ ๊ฐ์ด๋๋ผ์ธ<br> | |
| - ๊ธฐ๋ณธ ์ฌ์ฉ์ฑ ํ ์คํธ ํ๋ก์ธ์ค<br> | |
| - ์ ๊ทผ์ฑ ์ฒดํฌ๋ฆฌ์คํธ<br><br> | |
| ๐ฑ <strong>mobile_app_benchmarks.xlsx</strong><br> | |
| - ๊ฒฝ์์ฌ ์ผํ์ฑ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ<br> | |
| - ์ฌ์ฉ์ ๋ง์กฑ๋ ์ ์<br> | |
| - ์ฃผ์ ํ์ธํฌ์ธํธ ๋ถ์<br><br> | |
| ๐ฅ <strong>user_persona_draft.pdf</strong><br> | |
| - ์ด๊ธฐ ์ฌ์ฉ์ ํ๋ฅด์๋ (๋ฏธ์์ฑ)<br> | |
| - ํ๊ฒ ์ฐ๋ น๋: 20-40์ธ<br> | |
| - ์ฃผ์ ์ผํ ํจํด ์ ๋ณด<br> | |
| </div> | |
| ์ด ์ ๋ณด๋ค์ ๋ฐํ์ผ๋ก Mary์ ๋ ๊ตฌ์ฒด์ ์ธ ๋ธ๋ ์ธ์คํ ๋ฐ์ ์งํํ ์ ์์ต๋๋ค!`); | |
| updateProgress(10); | |
| document.getElementById('optionsArea').innerHTML = ` | |
| <button class="option" onclick="startAdvancedBrainstorming()"> | |
| ๐ ๊ธฐ์กด ์๋ฃ๋ฅผ ํ์ฉํ ๊ณ ๊ธ ๋ธ๋ ์ธ์คํ ๋ฐ | |
| </button> | |
| <button class="option" onclick="startBrainstorming()"> | |
| ๐ง ๊ธฐ๋ณธ ๋ธ๋ ์ธ์คํ ๋ฐ๋ถํฐ ์์ | |
| </button> | |
| `; | |
| } | |
| function startAdvancedBrainstorming() { | |
| gameState.currentStage = 'advanced_brainstorming'; | |
| updateProgress(20); | |
| document.getElementById('optionsArea').style.display = 'none'; | |
| document.getElementById('inputArea').style.display = 'block'; | |
| setTimeout(() => { | |
| addMessage("Mary", `ํ๋ฅญํด์! ๊ธฐ์กด ์๋ฃ๋ค์ ํ์ธํ์ จ๊ตฐ์! ๐โจ<br><br> | |
| ๊ธฐ์กด ๋ฌธ์๋ค์ ๋ถ์ํ ๊ฒฐ๊ณผ, ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ธ๋ ์ธ์คํ ๋ฐ ๊ธฐ๋ฒ์ ์ ์๋๋ฆด ์ ์์ด์:<br><br> | |
| ๐ญ <strong>์ญํ ๊ทน ๊ธฐ๋ฒ:</strong><br> | |
| โข "๋ฐ์ ์ง์ฅ์ธ ํ๋ฅด์๋"๋ก์ 5๋ถ ์์ ๊ตฌ๋งคํด์ผ ํ๋ ์ํฉ<br> | |
| โข "์๋์ด ์ฌ์ฉ์"๊ฐ ์ฒ์ ์ฑ์ ์ฌ์ฉํ๋ ์ํฉ<br> | |
| โข "์ ๊ทผ์ฑ์ด ํ์ํ ์ฌ์ฉ์"์ ๊ด์ <br><br> | |
| ๐ค <strong>5W1H ๋ถ์:</strong><br> | |
| โข Who: ๋๊ฐ ์ธ์ ์ด ์ฑ์ ์ฌ์ฉํ๋๊ฐ?<br> | |
| โข What: ๋ฌด์์ ํ๊ฐํด์ผ ํ๋๊ฐ?<br> | |
| โข Where: ์ด๋์ ํ ์คํธํ ๊ฒ์ธ๊ฐ?<br> | |
| โข When: ์ธ์ ํ๊ฐํ ๊ฒ์ธ๊ฐ?<br> | |
| โข Why: ์ ์ด ๋ฐฉ๋ฒ์ด ํ์ํ๊ฐ?<br> | |
| โข How: ์ด๋ป๊ฒ ์ธก์ ํ ๊ฒ์ธ๊ฐ?<br><br> | |
| ์ด๋ค ๊ธฐ๋ฒ์ผ๋ก ์์ํด๋ณด๊ณ ์ถ์ผ์ ๊ฐ์? ์๋๋ฉด ๋ค๋ฅธ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด ๋ง์ํด์ฃผ์ธ์! ๐ก`, true); | |
| }, 1500); | |
| } | |
| function sendMessage() { | |
| const userInput = document.getElementById('userInput'); | |
| const message = userInput.value.trim(); | |
| if (message === '') return; | |
| addMessage("์์ด์ (UX ๋ฆฌ์์ฒ)", message); | |
| userInput.value = ''; | |
| // ์์ด์ ํธ ์๋ต ์๋ฎฌ๋ ์ด์ | |
| setTimeout(() => { | |
| handleAgentResponse(message); | |
| }, 1000 + Math.random() * 2000); | |
| } | |
| function handleAgentResponse(userMessage) { | |
| if (gameState.activeAgent === 'mary') { | |
| handleMaryResponse(userMessage); | |
| } | |
| } | |
| function handleMaryResponse(userMessage) { | |
| const responses = [ | |
| `์ ๋ง ์ข์ ์์ด๋์ด๋ค์! ๐ฏ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ํ๊ฐ ๋ฐฉ๋ฒ์ ์ค๊ณํด๋ณผ๊น์?<br><br> | |
| ์ ์ํ์ ๋ด์ฉ์ ๋ณด๋ <strong>"์ฌ์ฉ์ ์ฌ์ ๊ธฐ๋ฐ ํ๊ฐ"</strong>๊ฐ ์ ํฉํ ๊ฒ ๊ฐ์ต๋๋ค.<br><br> | |
| ๋ค์ ๋จ๊ณ๋ก๋:<br> | |
| 1๏ธโฃ ํต์ฌ ์ฌ์ฉ์ ์ฌ์ 3-5๊ฐ ์ ์<br> | |
| 2๏ธโฃ ๊ฐ ์ฌ์ ๋ณ ํ๊ฐ ์งํ ์ค์ <br> | |
| 3๏ธโฃ ์ธก์ ๋ฐฉ๋ฒ ๋ฐ ๋๊ตฌ ์ ํ<br><br> | |
| PM ์์ด์ ํธ์ ํจ๊ป ์ด๋ฅผ ์ฒด๊ณ์ ์ธ PRD๋ก ๋ง๋ค์ด๋ณผ๊น์?`, | |
| `ํฅ๋ฏธ๋ก์ด ๊ด์ ์ด์์! ๐ค ์ด๋ฐ ์ ๊ทผ์ ์ด๋จ๊น์?<br><br> | |
| <strong>"ํผํฉ ํ๊ฐ ๋ฐฉ๋ฒ๋ก "</strong>์ ์ ์๋๋ ค์:<br> | |
| โข ์ ๋์ ํ๊ฐ: ์๋ฃ์จ, ์๊ฐ, ์๋ฌ์จ<br> | |
| โข ์ ์ฑ์ ํ๊ฐ: ์ฌ์ฉ์ ์ธํฐ๋ทฐ, ๊ด์ฐฐ<br> | |
| โข ์๋ํ ํ๊ฐ: A/B ํ ์คํธ, ํํธ๋งต ๋ถ์<br><br> | |
| ๊ฐ ๋ฐฉ๋ฒ์ ๋น์ค์ ์ด๋ป๊ฒ ๊ฐ์ ธ๊ฐ๊ณ ์ถ์ผ์ ์ง์?`, | |
| `์! ์ ๋ง ์ฒด๊ณ์ ์ผ๋ก ์๊ฐํ๊ณ ๊ณ์๋ค์! ๐<br><br> | |
| ๋ง์ํ์ ๋ด์ฉ์ ์ข ํฉํ๋ฉด, ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์:<br> | |
| โ ์ฌ์ฉ์ ์ค์ฌ์ ํ๊ฐ ๊ธฐ์ค<br> | |
| โ ์ค๋ฌด์ง์ด ์ฝ๊ฒ ์คํํ ์ ์๋ ๋ฐฉ๋ฒ<br> | |
| โ ์ ๋์ ๊ฒฐ๊ณผ๋ก ์์ฌ๊ฒฐ์ ์ง์<br><br> | |
| ์ด์ PM ์์ด์ ํธ๋ฅผ ํธ์ถํด์ ์ด ์์ด๋์ด๋ค์ ๊ตฌ์ฒด์ ์ธ ์๊ตฌ์ฌํญ ๋ฌธ์๋ก ๋ง๋ค์ด๋ณผ๊น์?<br><br> | |
| ์๋๋ฉด Architect ์์ด์ ํธ์ ํจ๊ป ํ๊ฐ ์์คํ ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ค๊ณํด๋ณผ ์๋ ์์ด์!` | |
| ]; | |
| const randomResponse = responses[Math.floor(Math.random() * responses.length)]; | |
| addMessage("Mary", randomResponse, true); | |
| updateProgress(gameState.progress + 10); | |
| // ๋ค์ ๋จ๊ณ ์ต์ ์ ๊ณต | |
| if (gameState.progress >= 30) { | |
| setTimeout(() => { | |
| showNextStageOptions(); | |
| }, 2000); | |
| } | |
| } | |
| function showNextStageOptions() { | |
| document.getElementById('inputArea').style.display = 'none'; | |
| const optionsHtml = ` | |
| <div style="margin: 20px 0; padding: 15px; background-color: #2a2a0a; border: 1px solid #ffff00;"> | |
| <h3>๐ฏ ๋ค์ ๋จ๊ณ ์ ํ:</h3> | |
| <button class="option" onclick="callPM()"> | |
| ๐ PM๊ณผ PRD(์๊ตฌ์ฌํญ ๋ฌธ์) ์์ฑํ๊ธฐ | |
| </button> | |
| <button class="option" onclick="callArchitect()"> | |
| ๐๏ธ Architect์ ํ๊ฐ ์์คํ ์ค๊ณํ๊ธฐ | |
| </button> | |
| <button class="option" onclick="continueWithMary()"> | |
| ๐ง Mary์ ๋ ๊น์ ๋ธ๋ ์ธ์คํ ๋ฐ ๊ณ์ํ๊ธฐ | |
| </button> | |
| </div> | |
| `; | |
| document.getElementById('gameArea').innerHTML += optionsHtml; | |
| } | |
| function callPM() { | |
| gameState.activeAgent = 'pm'; | |
| gameState.currentStage = 'prd_creation'; | |
| updateProgress(50); | |
| addMessage("์์คํ ", "๐ PM ์์ด์ ํธ ํธ์ถ ์ค..."); | |
| setTimeout(() => { | |
| addMessage("PM", `์๋ ํ์ธ์! PM ์์ด์ ํธ์ ๋๋ค. ๐<br><br> | |
| Mary์์ ๋ธ๋ ์ธ์คํ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ํ์ต๋๋ค. ์ ๋ง ํ๋ฅญํ ์์ด๋์ด๋ค์ด๋ค์!<br><br> | |
| <div class="document-preview"> | |
| <strong>๐ PRD ์ด์ ์๋ ์์ฑ ์๋ฃ:</strong><br><br> | |
| <strong>1. ํ๋ก์ ํธ ๋ชฉํ</strong><br> | |
| - ๋ชจ๋ฐ์ผ ์ผํ์ฑ 'ShopEasy' UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก ์๋ฆฝ<br> | |
| - ์ฌ์ฉ์ ๋ง์กฑ๋ ๊ฐ์ ์ ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ ์ง์<br><br> | |
| <strong>2. ํต์ฌ ํ๊ฐ ์์ญ</strong><br> | |
| - ์ฌ์ฉ์ ์ฌ์ ๋ณ ์๋ฃ์จ ์ธก์ <br> | |
| - ์ธํฐํ์ด์ค ์ง๊ด์ฑ ํ๊ฐ<br> | |
| - ์ ๊ทผ์ฑ ์ค์ ์ฌ๋ถ ํ์ธ<br><br> | |
| <strong>3. ์ฑ๊ณต ์งํ (KPI)</strong><br> | |
| - ๊ตฌ๋งค ์๋ฃ์จ: ํ์ฌ ๋๋น 15% ๊ฐ์ <br> | |
| - ์ฌ์ฉ์ ๋ง์กฑ๋: 4.2/5.0 ์ด์<br> | |
| - ํ๊ท ๊ตฌ๋งค ์๊ฐ: 30% ๋จ์ถ<br> | |
| </div> | |
| ์ด PRD๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ํ๊ฐ ๋ฐฉ๋ฒ๋ก ์ ์ค๊ณํ์๊ฒ ์ด์?`, true); | |
| document.getElementById('inputArea').style.display = 'block'; | |
| }, 2000); | |
| } | |
| function callArchitect() { | |
| gameState.activeAgent = 'architect'; | |
| gameState.currentStage = 'system_design'; | |
| updateProgress(55); | |
| addMessage("์์คํ ", "๐๏ธ Architect ์์ด์ ํธ ํ์ฑํ ์ค..."); | |
| setTimeout(() => { | |
| addMessage("Architect", `์๋ ํ์ธ์! ์์คํ ์ํคํ ํธ์ ๋๋ค. ๐๏ธ<br><br> | |
| ๋ธ๋ ์ธ์คํ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก UX ํ๊ฐ ์์คํ ์ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ค๊ณํด๋๋ฆฌ๊ฒ ์ต๋๋ค.<br><br> | |
| <div class="document-preview"> | |
| <strong>๐ง UX ํ๊ฐ ์์คํ ์ํคํ ์ฒ:</strong><br><br> | |
| <strong>1. ๋ฐ์ดํฐ ์์ง ๋ ์ด์ด</strong><br> | |
| โโ ์ฌ์ฉ์ ํ๋ ์ถ์ (Google Analytics, Mixpanel)<br> | |
| โโ ์ฑ ๋ด ์ฌ์ฉ์ฑ ๋ฉํธ๋ฆญ ์์ง<br> | |
| โโ ์ฌ์ฉ์ ํผ๋๋ฐฑ ์์ง ์์คํ <br><br> | |
| <strong>2. ๋ถ์ & ํ๊ฐ ๋ ์ด์ด</strong><br> | |
| โโ ์๋ํ๋ ์ฌ์ฉ์ฑ ๋ถ์<br> | |
| โโ A/B ํ ์คํธ ํ๋ซํผ<br> | |
| โโ ํํธ๋งต & ์ฌ์ฉ์ ์ฌ์ ๋ถ์<br><br> | |
| <strong>3. ๋ฆฌํฌํ & ์ก์ ๋ ์ด์ด</strong><br> | |
| โโ ์ค์๊ฐ ๋์๋ณด๋<br> | |
| โโ ์ ๊ธฐ UX ๋ฆฌํฌํธ ์๋ ์์ฑ<br> | |
| โโ ๊ฐ์ ๊ถ๊ณ ์ฌํญ ๋์ถ<br> | |
| </div> | |
| ์ด ๊ตฌ์กฐ์์ ์ด๋ค ๋ถ๋ถ๋ถํฐ ๊ตฌ์ฒดํํ๊ณ ์ถ์ผ์ ๊ฐ์?`, true); | |
| document.getElementById('inputArea').style.display = 'block'; | |
| }, 2500); | |
| } | |
| function continueWithMary() { | |
| addMessage("Mary", `๊ณ์ ํจ๊ป ํด์ฃผ์ ์ ๊ฐ์ฌํด์! ๐<br><br> | |
| ๋ ์ฐฝ์์ ์ธ ์์ด๋์ด๋ฅผ ์ํด <strong>"๋ฌด์์ ์ฐฝ์์ ํผ๋"</strong> ๊ธฐ๋ฒ์ ์๋ํด๋ณผ๊น์?<br><br> | |
| ๐ฒ ๋๋ค ์๋๋ฆฌ์ค๋ค:<br> | |
| โข "๋ง์ฝ ์ฌ์ฉ์๊ฐ ํ ์์ผ๋ก๋ง ํฐ์ ์จ์ผ ํ๋ค๋ฉด?"<br> | |
| โข "์๊ฐ ์ฅ์ ์ธ์ด ์์ฑ์ผ๋ก๋ง ์ผํํ๋ค๋ฉด?"<br> | |
| โข "3์ด ์์ ๊ตฌ๋งค ๊ฒฐ์ ์ ํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด?"<br> | |
| โข "์์ดํ์ด๊ฐ ๋งค์ฐ ๋๋ฆฐ ํ๊ฒฝ์ด๋ผ๋ฉด?"<br><br> | |
| ์ด๋ฐ ๊ทน๋จ์ ์ํฉ๋ค์ ๊ณ ๋ คํ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ ํ์ํ ๊น์?`, true); | |
| document.getElementById('inputArea').style.display = 'block'; | |
| updateProgress(40); | |
| } | |
| function checkTemplates() { | |
| addMessage("์์คํ ", `๐ UX ํ๊ฐ ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ทผ ์ค...<br><br> | |
| <div class="document-preview"> | |
| <strong>๐ฏ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ฐ ํ ํ๋ฆฟ๋ค:</strong><br><br> | |
| 1๏ธโฃ <strong>Nielsen's 10 Usability Heuristics</strong><br> | |
| - ๊ฐ์์ฑ, ์ผ๊ด์ฑ, ์ค๋ฅ ๋ฐฉ์ง ๋ฑ 10๊ฐ ํด๋ฆฌ์คํฑ<br> | |
| - ์ฒดํฌ๋ฆฌ์คํธ ํํ๋ก ๊ตฌ์ฑ<br><br> | |
| 2๏ธโฃ <strong>System Usability Scale (SUS)</strong><br> | |
| - 10๊ฐ ์ง๋ฌธ์ผ๋ก ๊ตฌ์ฑ๋ ํ์คํ๋ ์ค๋ฌธ<br> | |
| - 0-100 ์ ์๋ก ์ฌ์ฉ์ฑ ์ธก์ <br><br> | |
| 3๏ธโฃ <strong>Customer Journey Mapping</strong><br> | |
| - ํฐ์นํฌ์ธํธ๋ณ ์ฌ์ฉ์ ๊ฒฝํ ๋ถ์<br> | |
| - ๊ฐ์ ๊ณก์ ๋ฐ ํ์ธํฌ์ธํธ ์๋ณ<br><br> | |
| 4๏ธโฃ <strong>HEART Framework (Google)</strong><br> | |
| - Happiness, Engagement, Adoption, Retention, Task Success<br> | |
| - ๊ฐ ์งํ๋ณ ๊ตฌ์ฒด์ ์ธก์ ๋ฐฉ๋ฒ ์ ๊ณต<br> | |
| </div> | |
| ์ด๋ค ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก Mary์ ๋ธ๋ ์ธ์คํ ๋ฐ์ ์์ํ๊ณ ์ถ์ผ์ ๊ฐ์?`); | |
| document.getElementById('optionsArea').innerHTML = ` | |
| <button class="option" onclick="chooseTemplate('nielsen')"> | |
| โ Nielsen ํด๋ฆฌ์คํฑ ๊ธฐ๋ฐ ํ๊ฐ ๋ฐฉ๋ฒ ๊ฐ๋ฐ | |
| </button> | |
| <button class="option" onclick="chooseTemplate('heart')"> | |
| ๐ HEART ํ๋ ์์ํฌ ๊ธฐ๋ฐ ํ๊ฐ ์์คํ | |
| </button> | |
| <button class="option" onclick="chooseTemplate('journey')"> | |
| ๐บ๏ธ ๊ณ ๊ฐ ์ฌ์ ๊ธฐ๋ฐ UX ํ๊ฐ ๋ฐฉ๋ฒ๋ก | |
| </button> | |
| <button class="option" onclick="startBrainstorming()"> | |
| ๐ ํ ํ๋ฆฟ ์์ด ์์ ๋ก์ด ๋ธ๋ ์ธ์คํ ๋ฐ | |
| </button> | |
| `; | |
| } | |
| function chooseTemplate(template) { | |
| gameState.selectedTemplate = template; | |
| updateProgress(25); | |
| const templateInfo = { | |
| 'nielsen': { | |
| name: "Nielsen's 10 Usability Heuristics", | |
| focus: "์ธํฐํ์ด์ค ๋์์ธ ์์น ๊ธฐ๋ฐ ํ๊ฐ" | |
| }, | |
| 'heart': { | |
| name: "HEART Framework", | |
| focus: "์ฌ์ฉ์ ํ๋ ์งํ ๊ธฐ๋ฐ ์ธก์ " | |
| }, | |
| 'journey': { | |
| name: "Customer Journey Mapping", | |
| focus: "์ฌ์ฉ์ ์ฌ์ ์ ๊ณผ์ ๋ถ์" | |
| } | |
| }; | |
| addMessage("์์คํ ", `โ ${templateInfo[template].name} ์ ํ๋จ<br> | |
| ๐ ์ด์ : ${templateInfo[template].focus}<br><br> | |
| Mary ์์ด์ ํธ์ ์ ํ๋ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋ ์ธ์คํ ๋ฐ์ ์์ํฉ๋๋ค...`); | |
| setTimeout(() => { | |
| startTemplateBasedBrainstorming(template); | |
| }, 1500); | |
| } | |
| function startTemplateBasedBrainstorming(template) { | |
| gameState.activeAgent = 'mary'; | |
| document.getElementById('optionsArea').style.display = 'none'; | |
| document.getElementById('inputArea').style.display = 'block'; | |
| const templatePrompts = { | |
| 'nielsen': `ํ๋ฅญํ ์ ํ์ด์์! Nielsen์ 10๊ฐ ํด๋ฆฌ์คํฑ์ ์ผํ์ฑ์ ๋ง๊ฒ ์ปค์คํฐ๋ง์ด์งํด๋ด ์๋ค! ๐ฏ<br><br> | |
| <strong>์ผํ์ฑ ํนํ ํด๋ฆฌ์คํฑ๋ค:</strong><br> | |
| 1๏ธโฃ ์ํ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ช ํํ ํผ๋๋ฐฑ<br> | |
| 2๏ธโฃ ์ฅ๋ฐ๊ตฌ๋-๊ฒฐ์ ๊ณผ์ ์ ์ผ๊ด์ฑ<br> | |
| 3๏ธโฃ ์ค์ ๋ฐฉ์ง (์ค๋ณต์ฃผ๋ฌธ, ์๋ชป๋ ์๋ ๋ฑ)<br> | |
| 4๏ธโฃ ๊ฐ๊ฒฉ/ํ ์ธ ์ ๋ณด์ ๊ฐ๋ ์ฑ<br><br> | |
| ๊ฐ ํด๋ฆฌ์คํฑ๋ณ๋ก ๊ตฌ์ฒด์ ์ธ ํ๊ฐ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊น์?<br> | |
| ์ด๋ค ํด๋ฆฌ์คํฑ์ด ShopEasy์์ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐํ์๋์?`, | |
| 'heart': `HEART ํ๋ ์์ํฌ ์ ํ ์๋ฒฝํด์! ๐<br><br> | |
| <strong>ShopEasy HEART ์งํ ์ด์:</strong><br> | |
| ๐ <strong>Happiness:</strong> ์ฑ์คํ ์ด ๋ฆฌ๋ทฐ ํ์ , NPS<br> | |
| ๐ฅ <strong>Engagement:</strong> ์ธ์ ๋น ํ์ด์ง๋ทฐ, ์ฑ ์ฌ์ฉ์๊ฐ<br> | |
| ๐ <strong>Adoption:</strong> ์ ๊ท ์ฌ์ฉ์ ์ฒซ ๊ตฌ๋งค์จ<br> | |
| ๐ <strong>Retention:</strong> ์๊ฐ ํ์ฑ ์ฌ์ฉ์์จ<br> | |
| โ <strong>Task Success:</strong> ๊ตฌ๋งค ์๋ฃ์จ, ๊ฒ์ ์ฑ๊ณต๋ฅ <br><br> | |
| ๊ฐ ์งํ๋ณ๋ก ๋ชฉํ๊ฐ๊ณผ ์ธก์ ๋ฐฉ๋ฒ์ ์ ํด๋ณผ๊น์?<br> | |
| ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ์งํ๋ ๋ฌด์์ผ๊น์?`, | |
| 'journey': `๊ณ ๊ฐ ์ฌ์ ๊ธฐ๋ฐ ์ ๊ทผ! ์ ๋ง ์ฌ์ฉ์ ์ค์ฌ์ ์ด์์! ๐บ๏ธ<br><br> | |
| <strong>ShopEasy ํต์ฌ ์ฌ์ฉ์ ์ฌ์ ๋ค:</strong><br> | |
| ๐ <strong>์ํ ๋ฐ๊ฒฌ ์ฌ์ :</strong> ์ฑ ์คํ โ ๊ฒ์/๋๋ฌ๋ณด๊ธฐ โ ์ํ ์ ํ<br> | |
| ๐ <strong>๊ตฌ๋งค ๊ฒฐ์ ์ฌ์ :</strong> ์ํ ์์ธ โ ๋น๊ต โ ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ<br> | |
| ๐ณ <strong>๊ฒฐ์ ์๋ฃ ์ฌ์ :</strong> ๊ฒฐ์ ์ ๋ณด ์ ๋ ฅ โ ํ์ธ โ ์ฃผ๋ฌธ ์๋ฃ<br> | |
| ๐ฆ <strong>์ฌํ ๊ด๋ฆฌ ์ฌ์ :</strong> ์ฃผ๋ฌธ ์ถ์ โ ๋ฐฐ์ก ํ์ธ โ ๋ฆฌ๋ทฐ ์์ฑ<br><br> | |
| ๊ฐ ์ฌ์ ์์ ์ด๋ค ๊ฐ์ ์ /๊ธฐ๋ฅ์ ํ๊ฐ ํฌ์ธํธ๊ฐ ์ค์ํ ๊น์?<br> | |
| ํนํ ์ด๋ค ์ฌ์ ์์ ์ฌ์ฉ์๊ฐ ์ดํํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๋ณด์๋์?` | |
| }; | |
| addMessage("Mary", templatePrompts[template], true); | |
| } | |
| // ํค๋ณด๋ ์ ๋ ฅ ์ฒ๋ฆฌ | |
| document.getElementById('userInput').addEventListener('keypress', function(e) { | |
| if (e.key === 'Enter') { | |
| sendMessage(); | |
| } | |
| }); | |
| // ๊ฒ์ ์ด๊ธฐํ | |
| window.onload = function() { | |
| console.log('๐ฎ UX Research Quest ์์!'); | |
| }; | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment