38 Commits

Author SHA1 Message Date
1565c8db38 Security: disable debug mode, sanitize query input, validate Qdrant filters, add size/offset bounds 2026-01-08 14:41:42 -05:00
d26edda029 Add graph traversal endpoints and sort metrics by channel name 2026-01-08 14:22:01 -05:00
9dd74111e7 Change default sort to newer first 2026-01-08 14:12:15 -05:00
93774c025f Respect external filter in metrics and graph
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-20 09:54:41 -05:00
b0c9d319ef Remove full graph node cap
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-20 09:42:14 -05:00
82c334b131 Add full reference graph mode
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-19 15:23:21 -05:00
7f74aaced8 Persist search settings locally
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-19 10:20:00 -05:00
c88d1886c9 Fix backlink badge query to target referencing videos
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-18 23:47:07 -05:00
c6b46edacc Default external off and filter channels/backlink queries
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-18 23:42:49 -05:00
4c20329f36 Add external reference toggle and badges
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-18 23:07:13 -05:00
b267a0ecc6 Add Gitea workflow for Docker image builds
Some checks failed
docker-build / build (push) Has been cancelled
2025-11-18 19:14:20 -05:00
f299126ab2 Point compose to remote Elasticsearch and Qdrant 2025-11-18 13:25:41 -05:00
86fd017f3c Add Docker and compose setup 2025-11-18 13:21:14 -05:00
40d4f41f6e Add graph and vector search features 2025-11-09 14:24:50 -05:00
14d37f23e4 Add clickable reference badges and improve UI layout
- Add clickable badges for backlinks and references that trigger query string searches
- Improve toggle checkbox layout with better styling
- Add description block styling with scrollable container
- Update results styling with bordered cards and shadows
- Add favicon support across pages
- Enhance .env loading with logging for debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 14:56:43 -05:00
d8d2c5e34c Fix results overflow and add debug logging for reference badges
CSS Changes:
- Added max-width and overflow handling to .badge-row
- Added word-wrap and overflow protection to .item
- Added overflow-x: hidden to .window-body
- Badges now use white-space: nowrap to prevent text wrapping
- Item titles now break words properly with word-break

JavaScript Changes:
- Added console.log debugging for reference counts
- Logs show whether fields are present and their values
- Helps diagnose why badges aren't appearing

This should fix the overflow issue and help debug badge visibility.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 11:18:17 -05:00
595b19f7c7 Fix sorting by referenced_by_count with unmapped_type handling
- Added unmapped_type parameter to referenced_by_count sort
- This handles documents that don't have the field yet
- Updated ingest.py to include reference fields when indexing:
  * internal_references
  * internal_references_count
  * referenced_by
  * referenced_by_count
- Updated index mapping to include reference fields
- Documents without the field will sort as 0 (appear last)

Fixes BadRequestError: No mapping found for [referenced_by_count]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 11:10:56 -05:00
d616b87701 Add python-dotenv support for automatic .env loading
- Added python-dotenv to requirements.txt
- Config now automatically loads .env file if present
- Allows local development without manually exporting env vars
- Gracefully falls back if python-dotenv not installed

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 11:03:42 -05:00
7988e2751a Add video reference tracking and display
- Add "Most referenced" sort option to sort by backlink count
- Backend now supports sorting by referenced_by_count field
- Search results now display reference counts as badges:
  - Shows number of backlinks (videos linking to this one)
  - Shows number of internal references (outbound links)
- Reference badges appear alongside transcript source badges

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 10:52:00 -05:00
2846e13a81 Fix timestamp parsing for string format timestamps
Both primary and secondary transcripts use 'timestamp' field
with string format "HH:MM:SS.mmm" instead of numeric seconds.

Changes:
- Add parseTimestampToSeconds() to handle string timestamps
- Parse "HH:MM:SS.mmm" format (e.g., "00:00:39.480")
- Also handle "MM:SS" format
- Still support numeric timestamps (seconds or milliseconds)
- Check 'timestamp' field first (primary format in data)

This fixes the NaN issue and displays correct timestamps
for both primary and secondary transcripts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 01:16:26 -05:00
e241d206c5 Fix NaN timestamps with proper type checking
Previous || chain could pass through invalid values causing NaN.
Now explicitly checks each possible timestamp field with:
- null check (field != null)
- NaN check (!isNaN(parseFloat(field)))
- Takes first valid numeric value found

This ensures timestamps always have a valid number, defaulting
to 0 if no valid timestamp field is found.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 01:09:21 -05:00
1a4a1bd095 Make frontend handle multiple transcript timestamp formats
Secondary transcripts may use different field names than primary
transcripts. Updated renderTranscriptSegment to check for:
- start_seconds (primary format)
- start (alternate format)
- offset (common in media APIs)
- time, timestamp, startTime (other variations)

Also handles millisecond timestamps automatically by detecting
values > 10000 and converting to seconds.

Added console logging of secondary segment structure for debugging.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 00:58:30 -05:00
e998eadd79 Revert "Fix secondary transcript timestamps by indexing parts"
This reverts commit 2efe5e0c799d2a177a520506a22b7fcb037ffe47.
2025-11-05 00:57:29 -05:00
2efe5e0c79 Fix secondary transcript timestamps by indexing parts
Previously, secondary transcript parts were not being indexed
into Elasticsearch, causing the frontend to receive empty arrays
and display zero timestamps.

Changes:
- Add transcript_secondary_parts to Elasticsearch mapping
- Include secondary parts in bulk indexing actions
- Build secondary_full text from parts if not provided
- Match primary transcript structure (nested with start/duration/text)

Note: Existing data needs to be re-indexed for this fix to apply
to videos that already have secondary transcripts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 00:54:50 -05:00
b096e2aeeb Add dimmed viewing mode via minimize button
- Minimize button now toggles a comfortable viewing filter
- Applies brightness(0.5) contrast(1.25) sepia(0.6)
- Smooth 0.3s transition between modes
- Persists choice in localStorage
- Creates warm, dimmed aesthetic while keeping XP theme

Click minimize to toggle between bright and dimmed modes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 00:43:08 -05:00
261a77935f Add mobile responsiveness to fix query box overflow
- Make window full width on mobile (<=768px)
- Stack form controls vertically on small screens
- Fix query input overflow by making it full width
- Stack labels above inputs on mobile
- Make summary sections full width and stack vertically
- Remove side margins on mobile for full screen usage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 00:14:33 -05:00
a03af7a4d2 Revert "Dim bright white backgrounds for easier viewing"
This reverts commit 678bdf3a70e31119e3811b95ed7abc994743f360.
2025-11-05 00:04:10 -05:00
678bdf3a70 Dim bright white backgrounds for easier viewing
- Change input fields to soft gray (#f5f5f5)
- Dim window body background to #f0f0f0
- Soften transcript backgrounds
- Maintains XP aesthetic while reducing eye strain

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:53:55 -05:00
32c260621b Revert "Add pseudo-dark mode while maintaining XP aesthetic"
This reverts commit c4e9e952a5bcc1b04b56afaf4a7348897642176e.
2025-11-04 23:52:21 -05:00
c4e9e952a5 Add pseudo-dark mode while maintaining XP aesthetic
- Create CSS variables for theme customization
- Define light and dark XP color schemes
- Dark mode uses darker backgrounds, lighter text
- Maintain classic XP beveled borders and shadows
- Add moon/sun toggle button in title bar
- Implement theme switching with localStorage
- Support system color scheme preference
- Smooth transitions between themes

The dark mode keeps the Windows XP look with:
- Dark teal/navy desktop background
- Dark gray window and button faces
- Lighter text colors
- Darker gradient title bars
- All original XP styling preserved

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:49:38 -05:00
60e2c49811 Fix inconsistent blurry text across Chrome and Firefox
- Disable font smoothing completely with 'none'
- Use optimizeSpeed text rendering for crispness
- Force Tahoma font (classic Windows XP UI font)
- Remove all transforms and 3D perspective
- Use integer pixel font sizes

This should make all buttons, especially dynamically created
ones like transcript toggles, render consistently crisp
across all browsers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:36:50 -05:00
06c830607f Fix blurry button text rendering across browsers
- Add subpixel antialiasing for form controls
- Remove CSS filters that cause text blur
- Use native browser font smoothing
- Disable font ligatures for consistency

This fixes the issue where some button text appears blurry
in certain browsers (especially transcript toggle buttons).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:29:52 -05:00
bada8bdcea Integrate XP.css for Windows XP aesthetic
- Add XP.css framework via CDN
- Restructure HTML with XP window components
- Use fieldsets for grouped controls
- Add classic window with title bar and status bar
- Replace dark mode with XP theme
- Update custom CSS to complement XP.css styling
- Use system colors (ButtonFace, Window, etc.)
- Add classic teal background
- Maintain all existing functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:10:43 -05:00
178f6fa5e5 Add dark mode support to Python app
- Implement CSS custom properties for theming
- Add comprehensive light and dark color schemes
- Create theme toggle button in header
- Add theme persistence with localStorage
- Support system color scheme preference
- Smooth transitions between themes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 23:07:59 -05:00
3e939a4beb Improve highlight-to-transcript matching with multi-strategy algorithm 2025-11-02 01:26:53 -04:00
69bff7549c Make highlights clickable to jump to transcript location 2025-11-02 01:20:30 -04:00
a3c9377ef7 Add full transcript viewer with clickable timestamps 2025-11-02 01:17:47 -04:00
fcdc6ecb9b Initial commit 2025-11-02 01:14:36 -04:00