Spaces:
Sleeping
Sleeping
Commit History
-
Reflected Back cards: match left-border color to the signal's own dot
Border pulled from framing type (Observation/Strength/Growth area — 3 colors) while the bullet dot pulled from the signal's own fixed color (14 colors, same ones used for that signal on the Home feed and spectrum chart) — same card, two unrelated color systems, looked broken. Border now follows the dot's color; the framing badge pill keeps its own color since it conveys separate information. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>3a2b5d9
-
Richer empty states for new users on Home and You
Bare "your mirror is waiting" text gave no sense of what's coming and no next action. Home now shows a real example card (faded "Example" badge) so a new user sees the feed instead of just reading about it; You lists what the standing portrait will contain. Both add an "Open Google Meet" CTA since recording can only start from an actual call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>0338292 -
Recording segment cap, 4-step onboarding, Google OAuth fix, upgrade card, Home feed polish
- offscreen.js/background.js: recording now hard-caps at MAX_CHUNKS=2 (40 min total) instead of continuing indefinitely. The final segment routes through background.js's normal handleStop() (WebRTC-timeline flush before stopping) instead of a plain boundary cut, so the last chunk's speaker timeline is complete. The 30s pre-boundary warning now distinguishes "continuing automatically" from "recording will end." - AuthView.jsx: fixed the Google sign-in button being hidden specifically inside the extension (display:none leftover from before the chrome.identity.launchWebAuthFlow path existed) — handleGoogle() already supported both contexts, only the button visibility was wrong. Added diagnostic logging for the OAuth callback failure path. - OnboardingView.jsx: rebuilt to 4 steps (Concept/How/Preview/Trust) — Preview is new, showing an example portrait card (real quote+tags format, not numeric scores) plus a compact "Already reflected back" hint and an honest "what …401c4a8
-
Revert to the bar-graph logo
The Dome/Clarity mark didn't land well in practice — reverting App.jsx, AuthView, OnboardingView, HowItWorksView, ProfileView's empty state, favicon.svg, generate-icons.html, and the extension icon PNGs to their pre-dome-mark state, and removing the now-unused Logo.jsx. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>7dd0d81 -
Replace the bar-graph logo with the Dome/Clarity mark
Introduces a single shared Logo.jsx component (DomeMark + LogoLockup) and retires 5 independently hand-duplicated copies of the old equalizer-bar SVG across App.jsx, AuthView, OnboardingView, HowItWorksView, and ProfileView's empty state. The new mark matches docs/Mirror_Canonical_Vision.md's "Clarity" mark: a faint dashed dome above the mirror line, a solid dome below rendered with a radial gradient (bright center, deepening toward the edges). Also rewrites favicon.svg and generate-icons.html to match, and regenerates the extension's icon16/48/128.png against a dark background rather than the old near-black canvas default. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>f9393f8
-
Rebuild the You page: fix stale 9-signal bug, add paragraph/tags/indicators/coaching
Rewrites Shape/Reflected Back/How You Shift By Context's shared signal-key maps against the current 15-dimension set (they were still keyed on the old 9-signal names, silently clamping ~10 dimensions to the chart's max), adds categorical axis support, and adds a per-signal color palette. Adds three new You-page sections built on the existing evidence-gated portrait system: a self-referential narrative paragraph + behavior-phrase tags, a plain-fact indicators strip (session count, time recorded, avg talk-share/pace, contexts covered), and coaching synthesis ("Where You Might Grow") that distills recurring coaching_suggestions grouped by a new dimension_key field. Recadences the existing signals/context-shift synthesis call from every-session to every-3- sessions, adds Shape's established-vs-recent overlay, curates Signal History down to 7 signals, and renames "What We've Noticed" to "Reflected Back". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>22395e0
-
Fix still-forming cards mislabeling stable-but-noisy signals; add audio diagnostics
still_forming (Home + You page) was including signals that already had enough samples but were still too variable (high CV) to call steady — these showed as "6 of 5 sessions" and would never resolve since more sessions alone don't fix variance. Now omitted entirely once the sample floor is met but steadiness still isn't reached (say nothing rather than mislabel), confirmed against the exact real-account scenario that surfaced this. Also clamps both progress-bar widths defensively. Adds non-invasive diagnostic logging (track mute/unmute, AudioContext state, RTCPeerConnection connection state) to the WebRTC injector and offscreen recorder, investigating intermittent audio dropout reports during live testing — pure logging, no behavior change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>c1392fe
-
Phase B3 second slice: replace Mirror Feed with evidence-gated Home feed
Retires the LLM free-form mirror_feed/recurring_coaching system (no dismissal awareness, session-count-gated patterns) in favor of five card types built from already-computed evidence and portrait data: strength, observation, how-it-may-land, progress, and still-forming. Cards are self-relative, carry their evidence, and are dismissable via a new dismissed_cards table — dismissing a growth_area/observation framing of a signal shares one key so it holds even if the portrait LLM later reclassifies it. Home is now the app's default landing tab. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>7d68132
-
Phase B3, You page: evidence-based standing portrait replaces trait scoring
Retires the numeric dimension-scoring "personality" system from the You page (pentagon chart, 0-100 dimension scores, personality-trait badges — the clearest CLAUDE.md rule #2 violation in the app) and replaces it with a standing portrait built entirely on the 9 relational signals' evidence-gating system from Phase B2. Scoped to the You page only, per earlier decision: dimension_scorer.py keeps running unchanged, still feeding HistoryView and ResultsView's dimension displays — untouched this slice. - New backend/pipeline/portrait_synthesizer.py: replaces PersonalitySynthesizer's role. Only phrases signals that are already evidence-steady, classifies each qualitatively (strength / growth_area / observation, never a number), and phrases cross-context comparisons for signals steady in 2+ of the user's own contexts. Reuses the existing Groq call pattern (Claude migration stays deferred per earlier decision). - main.py: new _compute_profile_evidence() computes evidence for all 9…ed3866e
-
Phase B1: quarantine pyannote/voiceprint off the live path, remove Upload UI
Per CLAUDE.md rule #1 (no diarization/voiceprint guessing on the live path), now that the mic-capture keystone means the user is identified by construction. Changes: - backend/main.py: removed the pyannote diarize() + voiceprint-matching fallback branch from _run_prepare_job entirely. When no WebRTC speaker timeline is available, the job now fails cleanly with a clear error instead of silently guessing the speaker. Also removed _update_voiceprint() (was unconditionally running pyannote embeddings on every session, including WebRTC-mode ones — a live-path violation this audit surfaced). diarizer.merge_transcript_with_speakers() stays; it's a transcript/timeline merge utility, not diarization itself, and the WebRTC path depends on it. pipeline/diarizer.py and pipeline/voiceprint.py are left in place (quarantined, not deleted) for a possible future upload-a-file feature. - Frontend: removed the Upload nav tab + UploadView, and the "Train your voice" account-menu entr…0507574
-
LLM-generated portrait tags (max 4, behavior-specific)
PersonalitySynthesizer now outputs 3-4 keyword tags grounded in fingerprint observations (e.g. "Reframes Questions", "Topic Driver") rather than fixed score-bucket labels. ProfileView uses personality.tags from the API instead of the old deriveKeywords() mapping. Bump _SYNTHESIS_VERSION to 7 to invalidate cached portraits. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>2e7ca87 -
Portrait layout, clean background, richer Recurring Themes
- Portrait: text justified full-width, keyword tags in a row below (not side-by-side) - index.css: remove dot-grid overlay so panel background is clean dark (not grey) - main.py: normalize coaching area synonyms (Active Listening → Listening, etc.) and capture the latest suggestion text per area - ProfileView: Recurring Themes shows "{N} of {total} sessions" count + tip text so each card explains what to work on, not just a label with a flagged count Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>dbd59f3 -
Mirror feed: gradient fade on 3rd item with Show more overlay
Replace the separate button with a gradient that fades the bottom of the 3rd card from transparent to the page background (#0f1117), with a "Show more" pill overlaid on it. Clicking anywhere on the gradient expands the feed. "Show less" appears as a plain text link below when expanded. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>a88c856 -
Richer portrait + collapsible mirror feed
PersonalitySynthesizer: - Paragraph rules now direct the LLM across 7 behavioral vocabulary dimensions: thinking style, argument framing, conversation navigation, handling challenge, clarity/precision, listening quality, warmth/relational style - Session log now passes fingerprint[:350] (was [:200]) as the PRIMARY source rather than raw dimension scores — the qualitative text matters more - Explicit rule: do NOT make dominance/talk ratio the portrait centrepiece if fingerprints reveal more interesting things - Bump _SYNTHESIS_VERSION 5 → 6 to force portrait regeneration ProfileView: - MirrorFeed is now collapsible — shows 3 items by default - "Show N more" button expands to full list - "Show less" collapses back to 3 - Extracted MirrorFeedItem component for cleaner rendering Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>6744cd1 -
Major feature update: Google Meet recording, cumulative mirror feed, UX overhaul
Backend: - Fix talk ratio inflation for multi-speaker Google Meet calls (use all_other_segs) - Add user_perspective field to InsightGenerator — user now feels personally seen - Mirror feed is now cumulative: items persist, evolve, and grow across sessions (v4) - Expose per-speaker WPM timeline in /api/sessions for history chart - Bump _MF_VERSION to 4 to force feed regeneration with new cumulative logic Frontend: - Google Meet WebRTC recording: content-meet.js + meet-webrtc-injector.js + offscreen audio pipeline - Speaker timeline chart in History tab (who spoke when, WPM per participant) - ProfileView: Portrait section moved above Mirror Feed (it's the centrepiece) - ProfileView: Recurring Themes section added (coaching areas flagged across sessions) - ResultsView: Summary tab removed, summary_sentence block removed - ResultsView: "Your Perspective" section added (user_perspective from InsightGenerator) - ResultsView: Visual 3-segment talk split bar (You / Others / Silence) - Results…5748a9d
-
Rename to mirror., scroll reveal animations, waveform logo, deployment config
- Renamed app from Behavioral Mirror to mirror. throughout - Added waveform SVG logo (option 2A) to all pages replacing emoji placeholders - Added scroll reveal animations (Reveal/RevealItem) to all pages - Cleaned requirements.txt: removed unused anthropic, openai-whisper, whisperx, sqlalchemy - Added Dockerfile with CPU-only torch and ffmpeg for Railway deployment - Updated CORS to allow chrome-extension:// origins via regex + FRONTEND_URL env var - Added .env.example template Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d1cde70
-
Profile intelligence, context-aware baselines, and Mirror Feed
Core additions: - Personality synthesis with paragraph + 5 scored dimensions (PersonalitySynthesizer) - Context-specific baselines: population norms per context type → personal context average once 3+ same-context sessions exist. Eliminates false-positive coaching (e.g. high talk ratio in evaluative contexts no longer flagged as domination) - Mirror Feed: per-session highlight feed on profile page, collapsed with peek effect - Reflect tab: pre-computed session Q&A (generate_reflection_questions) - Transcript quotes extracted and passed to profile synthesis for grounded narratives - Onboarding flow (3-step, localStorage gated) - Session delta: flags dimension score changes ≥8pts after each new session - Blind spots: top 3 context gaps the mirror hasn't seen - Profile completeness bar with depth label - Context detector pipeline stage (ContextDetector via Groq) - Voice enrollment UI (EnrollView) with 1–3 round recording - Auth UI (AuthView), Supabase client, API client - SSE-based pr…d4c6e81