Files
hermes-mcp/product/site/script.js
2026-04-29 09:52:53 -04:00

98 lines
2.5 KiB
JavaScript

const form = document.getElementById("pilotIntakeForm");
const output = document.getElementById("pilotOutput");
const copyButton = document.getElementById("copyRequestButton");
const heroAnimation = document.getElementById("heroAnimation");
const submitEndpoint = "/api/pilot-request";
if (heroAnimation) {
const posterSrc = heroAnimation.dataset.posterSrc;
const playMs = Number(heroAnimation.dataset.playMs || "0");
if (posterSrc && playMs > 0) {
window.setTimeout(() => {
heroAnimation.src = posterSrc;
}, playMs);
}
}
function buildMessage(data) {
return [
"Pilot request for SquareMCP",
"",
`Name: ${data.name}`,
`Email: ${data.email}`,
`Company: ${data.company}`,
`Role: ${data.role}`,
`Primary use case: ${data.use_case}`,
`Timeline: ${data.timeline}`,
"",
"Internal systems to connect:",
data.systems,
"",
"Security or compliance requirements:",
data.requirements,
].join("\n");
}
function getFormData() {
const formData = new FormData(form);
return Object.fromEntries(formData.entries());
}
function setOutput(message, isReady = false) {
output.textContent = message;
output.classList.toggle("ready", isReady);
}
form.addEventListener("submit", async (event) => {
event.preventDefault();
if (!form.reportValidity()) {
return;
}
const data = getFormData();
const message = buildMessage(data);
setOutput("Submitting your pilot request...", false);
try {
const response = await fetch(submitEndpoint, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
if (!response.ok) {
throw new Error(`submit failed (${response.status})`);
}
const result = await response.json();
setOutput(
`${message}\n\nSaved to SquareMCP intake successfully.${result.request_id ? `\nRequest ID: ${result.request_id}` : ""}`,
true
);
form.reset();
} catch {
setOutput(
`${message}\n\nSubmission failed. Copy the request below and send it to info@squaremcp.com manually.`,
true
);
}
});
copyButton.addEventListener("click", async () => {
if (!form.reportValidity()) {
return;
}
const message = buildMessage(getFormData());
try {
await navigator.clipboard.writeText(message);
setOutput(`${message}\n\nCopied to clipboard.`, true);
} catch {
setOutput(`${message}\n\nClipboard access failed. Copy the text manually.`, true);
}
});