Hanaz Writers

Book Sales Prediction

United Kingdom United States Canada
(function () { if (window.salesPredictorLoaded) return; window.salesPredictorLoaded = true; const SALES_API_URL = "https://ai.hanazwriters.org/sales-predictor"; document.getElementById("analyseBtn").addEventListener("click", analyseSales); function escapeHtml(str) { return String(str || "") .replace(/&/g, "&") .replace(//g, ">"); } function list(arr) { if (!arr || !arr.length) return ""; return `
    ${arr.map(x => `
  • ${escapeHtml(x)}
  • `).join("")}
`; } function renderAnalysis(a) { const improv = (a.improvementSuggestions || []).map((s, i) => `
${i + 1}. ${escapeHtml(s.title)}
Why it helps: ${escapeHtml(s.whyItHelps)}
How to apply:${list(s.howToApply)}
`).join(""); const channels = (a.marketingStrategy?.channels || []).map(c => `
${escapeHtml(c.name)}
Why: ${escapeHtml(c.why)}
First steps:${list(c.firstSteps)}
`).join(""); return `

Results for: ${escapeHtml(a.country)}


1) Specialised improvement suggestions

${improv}

2) Sales potential analysis

Verdict: ${escapeHtml(a.salesPotential?.verdict)}
Reasoning:${list(a.salesPotential?.reasoning)}
Likely audience:${list(a.salesPotential?.likelyAudience)}
Positioning
Genre fit: ${escapeHtml(a.salesPotential?.positioning?.genreFit)}
Unique hook: ${escapeHtml(a.salesPotential?.positioning?.uniqueHook)}
Comparables:${list(a.salesPotential?.positioning?.comparables)}
Pricing notes:${list(a.salesPotential?.pricingNotes)}

3) Marketing strategy

Core message: ${escapeHtml(a.marketingStrategy?.coreMessage)}
Channels
${channels}
Launch plan
Pre-launch:${list(a.marketingStrategy?.launchPlan?.preLaunch)}
Launch week:${list(a.marketingStrategy?.launchPlan?.launchWeek)}
Post-launch:${list(a.marketingStrategy?.launchPlan?.postLaunch)}
Ad ideas:${list(a.marketingStrategy?.adIdeas)}
Email sequence:
    ${(a.marketingStrategy?.emailSequence || []).map(e => `
  • Day ${e.day} — ${escapeHtml(e.subject)} (${escapeHtml(e.goal)})
  • ` ).join("")}
`; } async function analyseSales() { const summary = document.getElementById("bookSummaryInput").value.trim(); const country = document.getElementById("countrySelect").value; const box = document.getElementById("salesResultBox"); if (!summary) { box.innerHTML = "

Enter summary

"; return; } box.innerHTML = "

Analysing...

"; try { const res = await fetch(SALES_API_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ summary, country }) }); if (!res.ok) throw new Error("Server error"); const data = await res.json(); box.innerHTML = renderAnalysis(data.analysis); } catch (err) { box.innerHTML = `

${err.message}

`; } } })();