File size: 11,465 Bytes
15e766f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | document.addEventListener('DOMContentLoaded', () => {
const questions = [
"Given the choice of anyone in the world, whom would your character want as a dinner guest?",
"Would your character like to be famous? In what way?",
"Before making a phone call, does your character ever rehearse what they're going to say? Why?",
"What would constitute a perfect day for your character?",
"When did your character last sing to themself? To someone else?",
"If your character were able to live to the age of 90 and retain either the mind or body of a 30-year-old for the last 60 years of their life, which would they choose?",
"Does your character have a secret hunch about how they will die?",
"Name three things your character and their current partner (or future partner) appear to have in common.",
"For what in their life does your character feel most grateful?",
"If your character could change anything about the way they were raised, what would it be?",
"Take four minutes and tell your character's life story in as much detail as possible.",
"If your character could wake up tomorrow having gained any one quality or ability, what would it be?",
"If a crystal ball could tell your character the truth about themself, their life, the future, or anything else, what would they want to know?",
"Is there something that your character has dreamed of doing for a long time? Why haven't they done it?",
"What is the greatest accomplishment of your character's life?",
"What does your character most value in a friendship?",
"What is your character's most treasured memory?",
"What is your character's most terrible memory?",
"If your character knew that in one year they would die suddenly, would they change anything about the way they are now living? Why?",
"What does friendship mean to your character?",
"What roles do love and affection play in your character's life?",
"Alternate sharing something your character considers a positive characteristic of themselves. Share a total of five items.",
"How close and warm is your character's family? Do they feel their childhood was happier than most other people's?",
"How does your character feel about their relationship with their mother?",
"Make three true 'we' statements each about your character. For instance, 'We are both in this room feeling...'",
"Complete this sentence for your character: 'I wish I had someone with whom I could share...'",
"If your character were going to become a close friend with someone, what is important for that person to know?",
"Tell what your character likes about the other; be honest this time, saying things that they might not say to someone they've just met.",
"Share with the other an embarrassing moment in your character's life.",
"When did your character last cry in front of another person? By themself?",
"Tell what your character already likes about the other.",
"What, if anything, is too serious to be joked about for your character?",
"If your character were to die this evening with no opportunity to communicate with anyone, what would they most regret not having told someone? Why haven't they told them yet?",
"Your character's house, containing everything they own, catches fire. After saving their loved ones and pets, they have time to safely make a final dash to save any one item. What would it be? Why?",
"Of all the people in your character's family, whose death would they find most disturbing? Why?",
"Share a personal problem your character has and ask the other's advice on how they might handle it."
];
const homeScreen = document.getElementById('home-screen');
const questionScreen = document.getElementById('question-screen');
const resultScreen = document.getElementById('result-screen');
const questionText = document.getElementById('question-text');
const answerInput = document.getElementById('answer-input');
const progressText = document.getElementById('progress');
const progressBar = document.getElementById('progress-bar');
const profileSummary = document.getElementById('profile-summary');
const startBtn = document.getElementById('start-btn');
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const homeBtn = document.getElementById('home-btn');
const resetBtn = document.getElementById('reset-btn');
const restartBtn = document.getElementById('restart-btn');
let currentQuestion = 0;
const answers = Array(questions.length).fill('');
function showHomeScreen() {
homeScreen.classList.remove('hidden');
questionScreen.classList.add('hidden');
resultScreen.classList.add('hidden');
currentQuestion = 0;
}
function showQuestionScreen() {
homeScreen.classList.add('hidden');
questionScreen.classList.remove('hidden');
resultScreen.classList.add('hidden');
updateQuestion();
}
function showResultScreen() {
homeScreen.classList.add('hidden');
questionScreen.classList.add('hidden');
resultScreen.classList.remove('hidden');
generateProfile();
}
function updateQuestion() {
questionText.textContent = questions[currentQuestion];
answerInput.value = answers[currentQuestion];
progressText.textContent = `Question ${currentQuestion + 1}/${questions.length}`;
progressBar.style.width = `${((currentQuestion + 1) / questions.length) * 100}%`;
prevBtn.disabled = currentQuestion === 0;
}
function saveAnswer() {
answers[currentQuestion] = answerInput.value;
}
async function generateProfile() {
let profileHTML = `
<h3 class="text-xl font-semibold text-gray-800 mb-4">Character Insights</h3>
<div id="ai-loading" class="text-center py-8">
<div class="inline-flex items-center space-x-2 text-indigo-600">
<i data-feather="loader" class="animate-spin"></i>
<span>Analyzing character profile with AI...</span>
</div>
</div>
`;
profileSummary.innerHTML = profileHTML;
feather.replace();
try {
// Get all answered questions and answers
const qaPairs = questions.map((q, i) => ({
question: q,
answer: answers[i] || "Not answered"
})).filter(item => item.answer.trim() !== "");
// Call AI API to enhance the profile
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer YOUR_OPENAI_API_KEY`
},
body: JSON.stringify({
model: "gpt-4",
messages: [{
role: "system",
content: "You are a creative writing assistant that helps develop rich fictional character profiles. Analyze the provided Q&A pairs and generate a comprehensive character profile with personality traits, background story, motivations, and relationships. Make it detailed and interesting."
}, {
role: "user",
content: `Create a detailed character profile based on these responses to Arthur Aron's 36 questions:\n\n${
qaPairs.map(qa => `Q: ${qa.question}\nA: ${qa.answer}`).join('\n\n')
}`
}],
temperature: 0.7,
max_tokens: 1500
})
});
const data = await response.json();
const aiProfile = data.choices[0].message.content;
profileHTML = `
<div class="space-y-6">
<h3 class="text-xl font-semibold text-gray-800">AI-Generated Character Profile</h3>
<div class="bg-indigo-50 p-6 rounded-lg">
<div class="prose max-w-none">${aiProfile.replace(/\n/g, '<br>')}</div>
</div>
<h4 class="text-lg font-medium text-gray-800 mt-8">Original Responses</h4>
<ul class="space-y-4">
`;
qaPairs.forEach(qa => {
profileHTML += `
<li class="border-l-4 border-indigo-500 pl-4 py-2">
<h4 class="font-medium text-gray-800">${qa.question}</h4>
<p class="text-gray-600 mt-1">${qa.answer}</p>
</li>
`;
});
profileHTML += `</ul></div>`;
profileSummary.innerHTML = profileHTML;
} catch (error) {
console.error("AI Error:", error);
profileSummary.innerHTML = `
<div class="bg-red-50 border-l-4 border-red-500 p-4">
<div class="flex">
<div class="flex-shrink-0">
<i data-feather="alert-triangle" class="h-5 w-5 text-red-500"></i>
</div>
<div class="ml-3">
<p class="text-sm text-red-700">
Failed to generate AI-enhanced profile. Showing basic responses instead.
</p>
</div>
</div>
</div>
${profileHTML}
`;
feather.replace();
}
}
startBtn.addEventListener('click', () => {
currentQuestion = 0;
showQuestionScreen();
});
prevBtn.addEventListener('click', () => {
saveAnswer();
currentQuestion--;
updateQuestion();
});
nextBtn.addEventListener('click', () => {
saveAnswer();
if (currentQuestion < questions.length - 1) {
currentQuestion++;
updateQuestion();
} else {
showResultScreen();
}
});
homeBtn.addEventListener('click', showHomeScreen);
resetBtn.addEventListener('click', () => {
if (confirm('Are you sure you want to reset all answers?')) {
answers.fill('');
answerInput.value = '';
currentQuestion = 0;
updateQuestion();
}
});
restartBtn.addEventListener('click', () => {
answers.fill('');
showHomeScreen();
});
document.getElementById('download-btn')?.addEventListener('click', () => {
const element = document.createElement('a');
const text = document.getElementById('profile-summary').innerText;
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', 'character-profile.txt');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
});
// Initialize
showHomeScreen();
}); |