Dear Bubbe Nextjs

repo: ~/Projects/dear-bubbe-nextjs · 21 commits · 0 in last 24h, 2 in last 7d ·

Search the build

21 commits indexed

  1. e629a02 2026-07-21 fix(auth): route NextAuth errors to /auth/signin + Secure session cookie on prod
  2. 2aee9f0 2026-07-21 fix(auth): surface NextAuth ?error= on signin page + pin turbopack root
  3. 7b8743d 2026-07-17 auto-save: 2026-07-17T08:45:54 (1 files) — package-lock.json
  4. 35d9212 2026-07-17 chore: v0.2.0 (session close) — lint clean, refactor done + contrarian-gated in-session
  5. 557b99d 2026-07-17 fix(bubbe/mobile): create SpeechRecognition once + latest-ref for onresult
  6. 3899565 2026-07-17 refactor(bubbe): delete dead ExpandableChat + VoiceManager
  7. f3aff35 2026-07-16 refactor(bubbe): typed SpeechRecognition shim + drop dead window flag
  8. 6ac4af5 2026-07-16 debug+refactor(bubbe): fix social-post ENOENT, extract shared chat/voice lib, drop dead components
  9. 0dbdfa0 2026-07-16 auto-save: 2026-07-16T17:43:55 (3 files) — app/api/social-post/route.ts components/SimpleConversation.tsx components/SimplifiedChat.tsx
  10. 84b91bc 2026-07-16 fix(csp): allow Cloudflare Insights beacon (+ GA4 regional) — clears console CSP refusal
  11. f7be260 2026-07-16 fix(voice): Bubbe never speaks over herself + slightly faster speech
  12. bffe4c6 2026-07-16 auto-save: 2026-07-16T17:13:50 (2 files) — components/DesktopBubbe.tsx components/MobileBubbe.tsx
  13. c7ca51c 2026-07-16 feat(bubbe.ai): free chat — 3 messages before Google sign-in (mobile-first)
  14. 242ce89 2026-07-16 deploy(bubbe.ai): OpenAI-primary chat, drop standalone for next start, strip em-dash key override from ecosystem
  15. 9778c1c 2026-05-31 security: redact/env-ify remaining ELEVENLABS_API_KEY copies in docs + voice-monitor.sh
  16. b794837 2026-05-31 security: env-ify ELEVENLABS_API_KEY (was hardcoded in pm2 ecosystem env)
  17. c7a098c 2026-05-31 security: remove malware launcher (/var/tmp/.font/n0de) from dev/start scripts + built artifact; gitignore .next
  18. d88e7a9 2026-05-30 gitignore: add backup/source-leak patterns (*.bak, *.orig, etc.)
  19. b54eb99 2026-05-29 Update Claude model IDs to claude-opus-4-8 (Opus 4.8 upgrade)
  20. e5ab1dd 2026-05-07 tighten .gitignore: add missing standing-rule patterns (tmp/ *.log dist/)
  21. d6aa0de 2026-05-06 initial snapshot — gitify all builds (CLAUDE.md rule 2026-05-06)

Authors

Agents used

  • none detected

Skills used

  • /auth4
  • /signin3
  • /social-post2
  • /error1
  • /warning1
  • /mobile1
  • /mode1
  • /retry-storm1
  • /speech1
  • /voice1
  • /route1
  • /static1
  • /cloudflareinsights1
  • /www1
  • /providers1
  • /env-ify1
  • /n0de1
  • /start1
  • /source-leak1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

e629a02 · 2026-07-21 · fix(auth): route NextAuth errors to /auth/signin + Secure session cookie on prod
pages.signIn/error both pointed at '/', which silently swallowed every
auth error code — the new ?error= banner could never fire. Session cookie
was explicitly secure:false on an HTTPS-only prod; now NODE_ENV-keyed.
(Contrarian-gate findings, both verified in source.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2aee9f0 · 2026-07-21 · fix(auth): surface NextAuth ?error= on signin page + pin turbopack root
Failed Google OAuth previously bounced back to /auth/signin silently (the
page ignored the error query param), making sign-in failures undiagnosable.
Now maps AccessDenied/OAuthCallback/OAuthSignin/Configuration to friendly
banners. turbopack.root + outputFileTracingRoot pinned so stray $HOME
lockfiles stop breaking/warning builds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
557b99d · 2026-07-17 · fix(bubbe/mobile): create SpeechRecognition once + latest-ref for onresult
The mic useEffect recreated a SpeechRecognition instance on every isSpeaking/
isLoading change (pre-existing since d6aa0de). Now created once; the once-bound
onresult calls handleSendRef.current so it always uses the freshest
handleSendMessage (session/mode closure) instead of the initial render's.
Desktop left as-is (its recreate is load-bearing for auto-restart).

Text chat + build verified green (WebKit); voice needs a real-device test.
3899565 · 2026-07-17 · refactor(bubbe): delete dead ExpandableChat + VoiceManager
Both unreachable from the live page→BubbeResponsive→Mobile/Desktop chain
(ExpandableChat had 0 importers; VoiceManager only imported by ExpandableChat).
Removes the Finding-C overlap/retry-storm landmine the contrarian flagged.
Build clean, homepage 200.
f3aff35 · 2026-07-16 · refactor(bubbe): typed SpeechRecognition shim + drop dead window flag
- new types/speech.d.ts: WebSpeechRecognition interface + Window augmentation
  (distinct name to avoid clobbering lib.dom); kills the (window as any) casts
  and the untyped recognitionRef in both components
- removed MobileBubbe's vestigial __bubbeAutoStarted window flag (gated nothing;
  mobile uses the welcome-screen buttons, not auto-start)
- kept DesktopBubbe's __bubbeDesktopAutoStarted (legit StrictMode remount guard)
- DTD verdict B (incremental-safe); deferred the speech-setup extraction — mic
  lifecycle can't be verified headless, needs a real-device test

Verified: build clean, homepage 200, chat + console clean (WebKit).
6ac4af5 · 2026-07-16 · debug+refactor(bubbe): fix social-post ENOENT, extract shared chat/voice lib, drop dead components
DEBUG:
- api/social-post: logs/ dir didn't exist -> writeFile ENOENT on every trigger.
  Now mkdir -p the dir + use process.cwd() instead of a hardcoded mac path.

REFACTOR:
- new lib/bubbeChat.ts: guestGateBlocks (free-chat gate), fetchBubbeReply (AI call),
  makeVoicePlayer (stop-before-play + synchronous overlap lock) — the exact logic
  that was triplicated and got edited twice in one session, now in ONE place.
- MobileBubbe + DesktopBubbe consume the lib; playBubbeVoice/handleSendMessage
  collapse to thin wrappers (mobile: mode==='voice'; desktop: voiceEnabled + auto-listen).
- removed dead components SimpleConversation.tsx + SimplifiedChat.tsx (0 imports).

Verified: build clean, homepage 200, chat + free-chat gate work (WebKit), console 0 errors,
voice-overlap logic preserved verbatim.
84b91bc · 2026-07-16 · fix(csp): allow Cloudflare Insights beacon (+ GA4 regional) — clears console CSP refusal
- script-src: + https://static.cloudflareinsights.com
- connect-src: + https://cloudflareinsights.com https://*.google-analytics.com https://www.google.com
- verified on WebKit: console now 0 errors, chat unaffected; /api/auth/providers stays 200 (that '404' was a false reading, no fix needed)
f7be260 · 2026-07-16 · fix(voice): Bubbe never speaks over herself + slightly faster speech
- synchronous isSpeakingRef lock (React state updated too late to block a rapid 2nd call)
- create the ONE Audio element once, not on every state change (was orphaning mid-play clips → overlap)
- hard pause+reset before each new clip (stop-before-play)
- ElevenLabs voice_settings speed 1.08 (a little faster, still natural)
- verified PASS by click-through agent: max concurrent audio == 1 across Chrome/Safari/Browserbase
c7ca51c · 2026-07-16 · feat(bubbe.ai): free chat — 3 messages before Google sign-in (mobile-first)
- page.tsx: render chat for guests instead of hard-redirecting to /auth/signin
- MobileBubbe/DesktopBubbe: gate send after 3 free messages (localStorage), then trigger Google sign-in
- restores the intended '3 free messages' onboarding so mobile users can chat immediately
242ce89 · 2026-07-16 · deploy(bubbe.ai): OpenAI-primary chat, drop standalone for next start, strip em-dash key override from ecosystem
- chat: OpenAI gpt-3.5-turbo primary (fast, funded), Ollama last-resort (Anthropic out of credits)
- next.config: disable output:standalone so `next start` serves + loads .env.local
- ecosystem: remove hardcoded ANTHROPIC_API_KEY placeholder (em-dash crashed every request); keys come from .env.local; USE_ANTHROPIC=0

File tree

1278 files tracked. Click any to browse the source at HEAD.

Other build journals

← Dear Bubbe Next  ·  all 4 projects  ·  Debate Ring Viewer →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 0ms