Scanner redesign, SH/HH notebooks, search fixes, and UI cleanup#435
Merged
Movm merged 12 commits intotest-branchfrom Feb 1, 2026
Merged
Scanner redesign, SH/HH notebooks, search fixes, and UI cleanup#435Movm merged 12 commits intotest-branchfrom
Movm merged 12 commits intotest-branchfrom
Conversation
Replace static upstream blocks with resolver + variable pattern so nginx re-resolves container IPs via Docker's embedded DNS (127.0.0.11) every 10s instead of caching them forever at startup.
Increase --sidebar-expanded-width from 240px to 280px so the "Early Access" status badge fits within the sidebar bounds without truncating menu item titles.
Normalize property access in CitationSourcesDisplay to handle both ExpandedChunkResult (title, snippet, similarity, source_url) and Source (document_title, chunk_text, similarity_score, url) shapes from the backend. Also hide the section when only 1 source is present.
Remove dead CSS for .citation-view-document, .ask-document-link, .clickable-link, and the associated navigation logic from CitationModal. These were remnants of a document-link feature that is no longer used.
Add reusable KebabMenu component for context actions and refactor NotebookList to use the existing IndexCard component with gallery-grid layout, replacing the bespoke profile-card markup.
Add system collection config, notebook page config, and routes for Schleswig-Holstein. Un-comment Hamburg notebook and move it along with SH to a dev-only list so they only appear in development mode.
In Qdrant, should clauses combined with must require at least one should to match, turning soft content_type/lang preferences into hard filters. This caused 0 results on collections with different content_type values (e.g. Hamburg's "beschluss" docs). Simplify QueryIntentService to return empty filters and let vectorSearch strip intent-only should clauses defensively.
Mistral sometimes returns a structured JSON object instead of plain text for full_replace suggestions. Add structuredObjectToMarkdown() to recursively convert these objects into readable markdown before the validation step discards them.
User-created collections don't have system filter config. Return an empty filters response instead of a 404 to avoid noisy errors in the frontend when loading user notebook filter panels.
Overhaul the scanner UI: replace marching-ants upload zone with a minimal card design, add DotGrid animated background, introduce CameraScanner component with OpenCV.js document detection, remove ProtokollTab in favour of inline results, and simplify animations. Adds jscanify and react-webcam dependencies.
Add one-off scraper scripts for Hamburg and Schleswig-Holstein Landesverband data. Reduce LandesverbandScraper crawl delay from 2000ms to 500ms for faster ingestion.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
jscanifyandreact-webcamdependencies.shouldclauses (content_type, lang) from Qdrant filters — these turned soft preferences into hard filters when combined withmust, causing 0 results on collections with different content_type values (e.g. Hamburg "beschluss" docs). SimplifiedQueryIntentService.generateSearchFilters()to return an empty filter.full_replacesuggestions. AddedstructuredObjectToMarkdown()to coerce these into readable markdown.useApplyAiEditfor applying AI-suggested edits.Test plan