Skip to content

Instantly share code, notes, and snippets.

@ghostflare76
Created September 4, 2025 03:57
Show Gist options
  • Select an option

  • Save ghostflare76/6d5aad198bfe23ccaeac4b1004ec6fcf to your computer and use it in GitHub Desktop.

Select an option

Save ghostflare76/6d5aad198bfe23ccaeac4b1004ec6fcf to your computer and use it in GitHub Desktop.
bmad
<!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