diff --git a/public/app.js b/public/app.js index e566407..dd1329e 100644 --- a/public/app.js +++ b/public/app.js @@ -145,6 +145,10 @@ async function loadSettings() { if (modelSel && data.nanoBananaModel) { modelSel.value = data.nanoBananaModel; } + const bgEl = document.getElementById("settings-user-background"); + if (bgEl && data.userBackground !== undefined) { + bgEl.value = data.userBackground; + } } catch (err) { console.warn("Failed to load settings:", err); } @@ -2141,7 +2145,11 @@ function bindGlobalEvents() { e.preventDefault(); const keyInput = document.getElementById("settings-api-key"); const modelSel = document.getElementById("settings-model-select"); - const payload = { nanoBananaModel: modelSel.value }; + const bgInput = document.getElementById("settings-user-background"); + const payload = { + nanoBananaModel: modelSel.value, + userBackground: bgInput ? bgInput.value.trim() : undefined + }; if (keyInput.value.trim()) { payload.geminiApiKey = keyInput.value.trim(); } @@ -2151,10 +2159,38 @@ function bindGlobalEvents() { }); keyInput.value = ""; document.getElementById("settings-modal")?.classList.add("hidden"); - showToast("🍌 Saved Nano Banana 2.1 settings!"); + showToast("✓ Saved SparkVault & AI Generator settings!"); await loadSettings(); }); + // Personalized Random Idea Button + document.getElementById("btn-generate-random-idea")?.addEventListener("click", async () => { + const btn = document.getElementById("btn-generate-random-idea"); + if (!btn) return; + const origText = btn.innerHTML; + btn.disabled = true; + btn.innerHTML = "🎲 Generating..."; + showToast("🎲 Drawing a Whack Pack card & inventing an idea from your background..."); + + try { + const catSel = document.getElementById("quick-capture-category")?.value || "any"; + const res = await apiFetch("/api/ideas/generate-random", { + method: "POST", + body: JSON.stringify({ + category: catSel === "spark" ? "any" : catSel + }) + }); + await Promise.all([loadIdeas(), loadWhackCatalog()]); + showToast(`✨ Created "${res.idea.title}" (via Card #${res.card.number} • ${res.generatorUsed})!`); + openIdeaDrawer(res.idea.id, "details"); + } catch (err) { + showToast(`⚠️ ${err.message}`); + } finally { + btn.disabled = false; + btn.innerHTML = origText; + } + }); + // Lightbox Close document.getElementById("btn-close-lightbox")?.addEventListener("click", () => { document.getElementById("lightbox-modal")?.classList.add("hidden"); diff --git a/public/index.html b/public/index.html index 8bab07d..232283d 100644 --- a/public/index.html +++ b/public/index.html @@ -39,8 +39,16 @@ Capture + 🎲 Random Idea + + 📎 Clip / Attach @@ -750,6 +758,16 @@ gemini-3.1-flash-lite-image — Nano Banana 2 Lite (Ultra-Fast) + + 🎲 Personal Background & Tastes (Used by '🎲 Random Idea') + + When you click 🎲 Random Idea, SparkVault combines this profile with a random Creative Whack Pack card to invent a tailored idea. +