Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
4cb9112
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 20, 2026
b5603ea
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 20, 2026
fc7f8a2
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 20, 2026
94a4380
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 20, 2026
aca4199
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 21, 2026
70d68f6
fix(web): preserve unique transcript filter optimizations from #917
groupthinking Jul 22, 2026
21fee91
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
a419671
fix: preserve transcript text fallback in search
groupthinking Jul 24, 2026
47f5977
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
36c6cce
fix: retain transcript text guard after agent churn
groupthinking Jul 24, 2026
7e7c519
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
97a6a2e
fix: make transcript text fallback explicit
groupthinking Jul 24, 2026
fafb5a2
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
43aa725
fix: restore transcript nullish guard
groupthinking Jul 24, 2026
8c2d7ae
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
afdc2a9
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
c911cd4
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
17f3476
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
f40d36b
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
d828079
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
f083286
⚡ Bolt: optimize transcript search performance
google-labs-jules[bot] Jul 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@
## 2026-07-28 - Memoize text processing in React
**Learning:** Performing expensive string manipulations like splitting long texts (`transcript.split('\n')`) or generating dynamic Regex expressions inside a component body causes significant CPU overhead on every re-render (like keystroke updates in a search box).
**Action:** Extract pure transformation logic on static/infrequent data into `useMemo` hooks (e.g., memoizing the paragraph split on `transcript` and precomputing search `RegExp` based on `searchQuery`).
## 2026-07-28 - Safely hoist string methods in React memo hooks
**Learning:** Hoisting string methods like `.toLowerCase()` outside of `.filter` loops inside `useMemo` correctly prevents N+1 string operations. However, if the hoisted string was originally evaluated lazily inside a `!string || string.toLowerCase()` guard, lifting it without a guard will cause a runtime crash if the string is undefined or null.
**Action:** Always include a safety check (e.g. `val ? val.toLowerCase() : ''`) when hoisting operations out of conditional evaluation loops to preserve the previous fallback safety.
5 changes: 3 additions & 2 deletions apps/web/src/components/InteractiveTranscript.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -166,11 +166,12 @@ export default function InteractiveTranscript({
);

const filteredSegments = useMemo(() => {
const searchLower = searchQuery ? searchQuery.toLowerCase() : '';
return segments.filter((seg) => {
const matchesSpeaker = !filterSpeaker || seg.speaker === filterSpeaker;
const matchesSearch =
!searchQuery ||
seg.text.toLowerCase().includes(searchQuery.toLowerCase());
!searchLower ||
(seg.text?.toLowerCase().includes(searchLower) ?? false);
return matchesSpeaker && matchesSearch;
});
}, [segments, filterSpeaker, searchQuery]);
Expand Down
Loading