diff --git a/src/App.jsx b/src/App.jsx index e790a5b..e1ae4aa 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -198,6 +198,69 @@ export function renderVerseContent(content) { return ''; } +export function buildClaudePrompt(project) { + const header = `I've prepared a Bible study on ${project.book} ${project.chapter} (${project.translation}) and need your help turning my notes into a polished study guide. + +Below is my work organised by passage chunk, including my study notes and Greek word research. Please create a clear, structured study guide that: +- Synthesises my notes into coherent teaching points +- Naturally integrates the Greek word insights +- Includes 2–3 reflection questions per chunk +- Preserves the passage-by-passage structure + +--- + +PROJECT: ${project.title} +TRANSLATION: ${project.translation} +PASSAGE: ${project.book} ${project.chapter} + +`; + + const chunks = project.chunks.map((chunk, index) => { + const ref = chunk.startVerse === chunk.endVerse + ? `${project.book} ${project.chapter}:${chunk.startVerse}` + : `${project.book} ${project.chapter}:${chunk.startVerse}–${chunk.endVerse}`; + + const verses = project.verses + .filter((v) => v.number >= chunk.startVerse && v.number <= chunk.endVerse) + .map((v) => `${v.number} ${v.text}`) + .join('\n'); + + const notes = chunk.notes.trim() || 'No notes.'; + + const greekWords = chunk.greekWords.length === 0 + ? 'None.' + : chunk.greekWords.map((word) => { + const summary = [ + word.strongNumber, + word.lexeme, + word.transliteration && `(${word.transliteration})`, + word.partOfSpeech, + word.shortDefinition, + ].filter(Boolean).join(' | '); + const definition = word.definitionHtml + ? `\n ${htmlToPlainText(word.definitionHtml)}` + : ''; + return `• ${summary}${definition}`; + }).join('\n'); + + return `=== + +CHUNK ${index + 1} — ${ref} + +Scripture: +${verses} + +My Notes: +${notes} + +Greek Words: +${greekWords} +`; + }).join('\n'); + + return header + chunks; +} + export function parseBibleChapter(data) { if (data?.verses && Array.isArray(data.verses)) { return data.verses.map((verse) => ({ @@ -671,6 +734,15 @@ const App = () => { URL.revokeObjectURL(url); }; + const copyForClaude = () => { + if (!project) return; + const prompt = buildClaudePrompt(project); + navigator.clipboard.writeText(prompt).then(() => { + setSaveStatus('Copied for Claude!'); + window.setTimeout(() => setSaveStatus(''), 2000); + }); + }; + const verseLabel = (start, end) => (start === end ? `${start}` : `${start}-${end}`); return ( @@ -710,6 +782,14 @@ const App = () => { )} {project && (
+