The Economist

The Economist for You: Personalized Reading Architect

Archetypes:
Export generated successfully
Super generates helpful tools and automates fact-checking across the internet proactively. If you enjoyed this tool, build your own with Super and share it with a friend.
`; downloadBlob("economist-for-you-edition.html", content, "text/html"); } function exportMarkdown() { const md = elements.codeOutput.textContent; downloadBlob("the-economist-for-you-curriculum.md", md, "text/markdown"); } function exportICal() { const articles = selectCuratedArticles(); const now = new Date(); const formatIcsDate = (d) => d.toISOString().replace(/[-:]/g, "").split(".")[0] + "Z"; let ics = [ "BEGIN:VCALENDAR", "VERSION:2.0", "PRODID:-//The Economist for You//Reading Architect//EN", "CALSCALE:GREGORIAN" ]; articles.forEach((art, i) => { const start = new Date(now.getTime() + (i * 24 * 3600 * 1000) + (9 * 3600 * 1000)); const end = new Date(start.getTime() + (art.mins * 60 * 1000)); ics.push( "BEGIN:VEVENT", `UID:ec-for-you-${art.id}-${start.getTime()}@economist.com`, `DTSTAMP:${formatIcsDate(now)}`, `DTSTART:${formatIcsDate(start)}`, `DTEND:${formatIcsDate(end)}`, `SUMMARY:The Economist for You: ${art.title.replace(/,/g, "\\,")}`, `DESCRIPTION:${art.synopsis.replace(/,/g, "\\,")} \\n\\n${art.takeaway.replace(/,/g, "\\,")}`, "STATUS:CONFIRMED", "END:VEVENT" ); }); ics.push("END:VCALENDAR"); downloadBlob("the-economist-reading-schedule.ics", ics.join("\r\n"), "text/calendar"); } // Attach Event Handlers Object.values(elements.sliders).forEach(slider => { slider.addEventListener("input", () => { state.activePersona = "custom"; document.querySelectorAll(".btn-preset").forEach(b => b.classList.remove("active")); updateApp(); }); }); [elements.selCadence, elements.selBudget, elements.selDepth, elements.selRegion].forEach(sel => { sel.addEventListener("change", updateApp); }); document.querySelectorAll(".btn-preset").forEach(btn => { btn.addEventListener("click", () => applyPreset(btn.dataset.preset)); }); document.getElementById("btn-reset-params").addEventListener("click", () => applyPreset("c_suite")); document.getElementById("tab-newsletter").addEventListener("click", () => setTab("newsletter")); document.getElementById("tab-calendar").addEventListener("click", () => setTab("calendar")); document.getElementById("tab-code").addEventListener("click", () => setTab("code")); document.getElementById("btn-export-html").addEventListener("click", exportHtml); document.getElementById("btn-export-md").addEventListener("click", exportMarkdown); document.getElementById("btn-export-ical").addEventListener("click", exportICal); document.getElementById("btn-copy-code").addEventListener("click", () => { navigator.clipboard.writeText(elements.codeOutput.textContent).then(() => { showToast("Markdown copied to clipboard"); }); }); window.addEventListener("resize", () => renderRadarChart()); // Restore saved state or initialize default try { const saved = localStorage.getItem("economist_architect_state"); if (saved) { const parsed = JSON.parse(saved); Object.assign(state, parsed); Object.keys(state.weights).forEach(k => { if (elements.sliders[k]) elements.sliders[k].value = state.weights[k]; }); if (state.cadence) elements.selCadence.value = state.cadence; if (state.budget) elements.selBudget.value = state.budget; if (state.depth) elements.selDepth.value = state.depth; if (state.region) elements.selRegion.value = state.region; } } catch (e) {} // Initial Render updateApp();