diff --git a/README.md b/README.md
index d14a96e..c407afe 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Theme Song Booth
-**Version:** `v0.3.0`
+**Version:** `v0.4.0`
A Flask web app for a convention booth where visitors request a custom AI-generated theme song, the operator manages the queue, and the final MP3(s) are delivered by email after payment.
diff --git a/VERSION b/VERSION
index 0d91a54..1d0ba9e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.3.0
+0.4.0
diff --git a/templates/admin/request.html b/templates/admin/request.html
index 63fe269..eb89ab3 100644
--- a/templates/admin/request.html
+++ b/templates/admin/request.html
@@ -202,6 +202,7 @@
📝 Revisions Requested{% if req.revision_count %}Revision #{{ req.revision_count }} {% endif %}
{{ req.revision_note }}
+
📋 Copy revision prompt for Hermes
{% endif %}
@@ -426,6 +427,27 @@
el.setSelectionRange(0, 99999);
navigator.clipboard.writeText(el.value).then(() => alert(label + " copied!"));
}
+
+ function copyRevisionPromptForHermes() {
+ const callbackUrl = {{ callback_url | tojson }};
+ const currentTitle = {{ req.suno_title | tojson }};
+ const currentStyle = {{ req.suno_style | tojson }};
+ const currentLyrics = {{ req.suno_lyrics | tojson }};
+ const revisionNote = {{ req.revision_note | tojson }};
+ const revisionCount = {{ req.revision_count | tojson }};
+ const data = {
+ request_id: {{ req.id | tojson }},
+ email: {{ req.email | tojson }},
+ name: {{ req.name | tojson }},
+ hobbies: {{ req.hobbies | tojson }},
+ notable_facts: {{ req.notable_facts | tojson }},
+ style_genre: {{ req.style_genre | tojson }},
+ vocal_gender: {{ req.vocal_gender | tojson }},
+ extra_requests: {{ req.extra_requests | tojson }}
+ };
+ const text = `Booth request: ${data.request_id}\\nCustomer email: ${data.email}\\nCallback URL: ${callbackUrl}\\n\\nThis is REVISION #${revisionCount || 1} for this customer.\\n\\nGenerate a NEW Suno Custom Mode prompt that addresses the following revision request, while keeping the same overall theme/persona and matching the customer's original brief as closely as possible.\\n\\nOriginal brief:\\nName: ${data.name}\\nHobbies: ${data.hobbies || '-'}\\nNotable facts: ${data.notable_facts || '-'}\\nStyle / genre: ${data.style_genre || '-'}\\nPreferred singer voice / gender: ${data.vocal_gender || 'No preference'}\\nExtra requests: ${data.extra_requests || '-'}\\n\\nPreviously generated prompt (do not copy verbatim; adapt and improve):\\nTitle: ${currentTitle || '-'}\\nStyle: ${currentStyle || '-'}\\nLyrics:\\n${currentLyrics || '-'}\\n\\nRevision request from customer:\\n${revisionNote || '-'}\\n\\nPOST the new prompt back to the Callback URL as JSON with this shape:\\n{\\n \\"request_id\\": ${data.request_id},\\n \\"email\\": \\"${data.email}\\",\\n \\"suno_title\\": \\"...\\",\\n \\"suno_style\\": \\"...\\",\\n \\"suno_lyrics\\": \\"...\\"\\n}`;
+ navigator.clipboard.writeText(text).then(() => alert("Revision prompt copied! Paste into Hermes. Hermes will POST the revised prompt back to the Callback URL."));
+ }