commit dfae3f4f7c34999dedc1e7259bb508b1b673a33f
Author: root <root@hub.scroll.pub> Date: 2024-12-27 05:26:49 +0000 Subject: Initial commit diff --git a/body.html b/body.html new file mode 100644 index 0000000..76a7811 --- /dev/null +++ b/body.html @@ -0,0 +1,35 @@ +<header> + <nav> + <h1>Call Transcript Annotator</h1> + <button id="themeToggle" aria-label="Toggle dark mode">🌓</button> + </nav> +</header> + +<main> + <section class="workspace"> + <div class="transcript-container"> + <h2>Transcript</h2> + <textarea id="transcriptInput" placeholder="Paste your call transcript here..."></textarea> + </div> + + <div class="annotation-container"> + <h2>Annotations</h2> + <div id="annotationList"></div> + + <div class="annotation-form"> + <input type="text" id="annotationText" placeholder="Add annotation..."> + <select id="annotationType"> + <option value="important">Important</option> + <option value="action">Action Item</option> + <option value="question">Question</option> + <option value="follow-up">Follow-up</option> + </select> + <button id="addAnnotation">Add</button> + </div> + </div> + </section> +</main> + +<footer> + <p>Made with ❤️ for better call analysis</p> +</footer> diff --git a/index.scroll b/index.scroll new file mode 100644 index 0000000..06b82ca --- /dev/null +++ b/index.scroll @@ -0,0 +1,8 @@ +buildHtml +baseUrl https://annotate.scroll.pub +metaTags +editButton /edit.html +title Call Transcript Annotator +style.css +body.html +script.js diff --git a/readme.scroll b/readme.scroll new file mode 100644 index 0000000..af17712 --- /dev/null +++ b/readme.scroll @@ -0,0 +1,2 @@ +# annotate.scroll.pub +Website generated by Claude from prompt: Call transcript annotated tool \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..c3be102 --- /dev/null +++ b/script.js @@ -0,0 +1,53 @@ +document.addEventListener('DOMContentLoaded', () => { + const themeToggle = document.getElementById('themeToggle'); + const transcriptInput = document.getElementById('transcriptInput'); + const annotationText = document.getElementById('annotationText'); + const annotationType = document.getElementById('annotationType'); + const addAnnotationBtn = document.getElementById('addAnnotation'); + const annotationList = document.getElementById('annotationList'); + + // Theme toggling + themeToggle.addEventListener('click', () => { + document.documentElement.setAttribute( + 'data-theme', + document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark' + ); + }); + + // Add annotation + addAnnotationBtn.addEventListener('click', () => { + const text = annotationText.value.trim(); + if (!text) return; + + const annotation = document.createElement('div'); + annotation.className = `annotation ${annotationType.value}`; + annotation.innerHTML = ` + <p>${text}</p> + <small>${new Date().toLocaleTimeString()}</small> + `; + + annotationList.appendChild(annotation); + annotationText.value = ''; + + // Scroll to bottom of annotation list + annotationList.scrollTop = annotationList.scrollHeight; + }); + + // Handle enter key in annotation input + annotationText.addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + addAnnotationBtn.click(); + } + }); + + // Auto-save transcript to localStorage + transcriptInput.addEventListener('input', () => { + localStorage.setItem('savedTranscript', transcriptInput.value); + }); + + // Load saved transcript + const savedTranscript = localStorage.getItem('savedTranscript'); + if (savedTranscript) { + transcriptInput.value = savedTranscript; + } +}); diff --git a/style.css b/style.css new file mode 100644 index 0000000..260dc5f --- /dev/null +++ b/style.css @@ -0,0 +1,155 @@ +:root { + --primary: #2563eb; + --bg: #ffffff; + --text: #1f2937; + --surface: #f3f4f6; + --border: #e5e7eb; +} + +[data-theme="dark"] { + --primary: #60a5fa; + --bg: #111827; + --text: #f9fafb; + --surface: #1f2937; + --border: #374151; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: system-ui, -apple-system, sans-serif; + line-height: 1.5; + color: var(--text); + background: var(--bg); + transition: background-color 0.3s, color 0.3s; +} + +header { + padding: 1rem; + background: var(--surface); + border-bottom: 1px solid var(--border); +} + +nav { + max-width: 1200px; + margin: 0 auto; + display: flex; + justify-content: space-between; + align-items: center; +} + +h1 { + font-size: 1.5rem; + font-weight: 600; +} + +#themeToggle { + background: none; + border: none; + font-size: 1.5rem; + cursor: pointer; + padding: 0.5rem; + border-radius: 50%; + transition: background-color 0.2s; +} + +#themeToggle:hover { + background: var(--border); +} + +main { + max-width: 1200px; + margin: 2rem auto; + padding: 0 1rem; +} + +.workspace { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; +} + +@media (max-width: 768px) { + .workspace { + grid-template-columns: 1fr; + } +} + +.transcript-container, .annotation-container { + background: var(--surface); + border-radius: 0.5rem; + padding: 1.5rem; + border: 1px solid var(--border); +} + +h2 { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +textarea { + width: 100%; + height: 400px; + padding: 1rem; + border: 1px solid var(--border); + border-radius: 0.375rem; + background: var(--bg); + color: var(--text); + resize: vertical; +} + +.annotation-form { + display: grid; + grid-template-columns: 1fr auto auto; + gap: 0.5rem; + margin-top: 1rem; +} + +input, select, button { + padding: 0.5rem 1rem; + border: 1px solid var(--border); + border-radius: 0.375rem; + background: var(--bg); + color: var(--text); +} + +button { + background: var(--primary); + color: white; + border: none; + cursor: pointer; + transition: opacity 0.2s; +} + +button:hover { + opacity: 0.9; +} + +#annotationList { + min-height: 200px; + margin-bottom: 1rem; +} + +.annotation { + padding: 0.75rem; + margin-bottom: 0.5rem; + border-radius: 0.375rem; + border-left: 4px solid; + background: var(--bg); +} + +.annotation.important { border-color: #ef4444; } +.annotation.action { border-color: #10b981; } +.annotation.question { border-color: #f59e0b; } +.annotation.follow-up { border-color: #8b5cf6; } + +footer { + text-align: center; + padding: 2rem; + background: var(--surface); + border-top: 1px solid var(--border); +}