Spaces:
Sleeping
Sleeping
Commit History
-
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
-
Complete the password reset flow; fix feedback email sender
AuthView gains an "update-password" mode (new password + confirm, calls supabase.auth.updateUser) and App.jsx now catches Supabase's PASSWORD_RECOVERY auth event to route there before the normal app/onboarding. The reset email's redirectTo now points at the extension's own fullpage URL (built dynamically via chrome.runtime.getURL, not hardcoded), since there's no hosted copy of the app to redirect to otherwise. manifest.json declares index.html as a web_accessible_resource — without it, Chrome silently blocks external navigation into the extension with ERR_BLOCKED_BY_CLIENT, which is what an actual end-to-end test surfaced. Also switches the feedback-notification email's sender to Resend's shared sandbox address (onboarding@resend.dev) so it works with any API key immediately, rather than requiring mirrorai.live's domain to be verified in Resend first. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>454186b -
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
-
Replace password toggle emoji with SVG eye icons
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>dd61d52 -
Hide Google OAuth button in extension context
Continue with Google is hidden in the Chrome extension side panel since it requires a separate Chrome Extension OAuth client setup. Email/password auth works for all users in extension context. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>fb84c92 -
Fix Google OAuth callback: check query params and hash, show real error
Supabase can return tokens in query params or hash depending on version. Also surface the actual OAuth error string instead of generic message. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>15fae7a -
Fix Google OAuth in Chrome extension: implicit flow + PKCE fallback
- Set flowType:'implicit' in Supabase client so tokens come in the URL hash, which is what launchWebAuthFlow captures (PKCE sends a code that requires a server-side exchange, not usable in an extension callback) - Handle both implicit (hash access_token) and PKCE (query code) in callback so it works regardless of Supabase project settings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>254e7f6
-
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