From ec9b5766154842ee4b6da7433ff0dd0aadc53869 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 28 Jul 2026 20:44:41 -0700 Subject: [PATCH] [eric] voice+onboarding: aurora hues widened/jittered/desaturated (three tight bands read segmented); prep prompt forbids fabricating specifics when evidence is empty --- backend/apps/onboarding/prep/prompts.py | 4 ++++ frontend/src/shared/voice/VoiceOverlay.tsx | 10 +++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/apps/onboarding/prep/prompts.py b/backend/apps/onboarding/prep/prompts.py index 700c9629..b2c5e75e 100644 --- a/backend/apps/onboarding/prep/prompts.py +++ b/backend/apps/onboarding/prep/prompts.py @@ -1,6 +1,10 @@ """The two aux prompts behind the personalized reveal: the profile distill and the full prep shape.""" PREP_SYSTEM = ( + "Ground every claim in the evidence you were given (scan, picks, usage summary). If the " + "evidence is thin or empty, stay warm but GENERIC; NEVER invent specific tools, apps, or " + "habits the user did not show you (a fabricated 'you use Ollama and Docker' reads as creepy " + "and wrong to someone who does not). " "You write first-run starter tasks for OpenSwarm, a desktop AI agent platform that can " "organize local files, browse the web in a real browser, build small apps, and run agents in parallel. " "Given facts about the user's machine and the apps they picked, respond with STRICT JSON only: " diff --git a/frontend/src/shared/voice/VoiceOverlay.tsx b/frontend/src/shared/voice/VoiceOverlay.tsx index 40d9d721..4ae8b3bf 100644 --- a/frontend/src/shared/voice/VoiceOverlay.tsx +++ b/frontend/src/shared/voice/VoiceOverlay.tsx @@ -65,9 +65,13 @@ const VoiceAurora: React.FC<{ volumeRef: React.MutableRefObject }> = ({ // Opposite side of the wheel from the chosen accent, with two flanking hues for a real gradient. const { h } = hexToHue(accent || '#6b62f0'); - const c0 = `hsl(${(h + 156) % 360} 92% 62%)`; - const c1 = `hsl(${(h + 180) % 360} 94% 58%)`; - const c2 = `hsl(${(h + 204) % 360} 92% 64%)`; + // Wide, softly randomized spread around the complement: three tight neon bands read segmented + // (the red/orange/yellow stripe complaint); jittered hues + lower saturation blend like a real + // aurora while staying distinguishable. Jitter is per-mount so each dictation feels alive. + const jitter = React.useMemo(() => [Math.random() * 30 - 15, Math.random() * 20 - 10, Math.random() * 30 - 15], []); + const c0 = `hsl(${(h + 120 + jitter[0] + 360) % 360} 74% 64%)`; + const c1 = `hsl(${(h + 180 + jitter[1]) % 360} 78% 60%)`; + const c2 = `hsl(${(h + 240 + jitter[2]) % 360} 74% 66%)`; return (
{LOBES.map((lobe, i) => {