Spaces:
Runtime error
Runtime error
Commit History
-
chat: bottom input matches hero — floating card, text-xl, Send label
webmuppet +1: Claude Sonnet 4.6Replaces the compact dark footer bar with a floating rounded card (same rgba glass style as the hero input) centred at max-w-3xl. Textarea grows to rows=2, text-xl with transparent background. Stop/Send buttons gain a text label to match the hero variant. A gradient fade from #0F0027 to transparent behind the card prevents content bleeding through. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>ac3c645 -
chat: cycle loading messages through pipeline phases
webmuppet +1: Claude Sonnet 4.6Pre-token (retrieval phase): cycles through 5 messages every 2.5s — 'Looking at the legislation', 'Reviewing relevant regulations', 'Assessing requirements', 'Scanning specific guidelines', 'Understanding policy recommendations'. Post-first-token (generation phase): shows 'Generating tailored response' + small dots above the streaming markdown, disappears when the response completes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>c812b81 -
sidebar: show full question text for conversations and saved responses
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>741c3dc -
chat: constrain thread to max-w-3xl centred column
webmuppet +1: Claude Sonnet 4.6Wraps the message list in a max-w-3xl mx-auto container matching the bottom input bar width — same breakpoint Claude.ai uses (~768px). Assistant bubbles now go full width within that column rather than being additionally constrained to 80%. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>2befd58
-
chat-ui: profession-specific starter pills
webmuppet +1: Claude Sonnet 4.6Generic questions shown by default; selecting a profession from the sidebar immediately swaps the pills to four questions relevant to that practitioner type and their specific council/board rules. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>22bd5ae -
chat-ui: stop button replaces send while streaming
webmuppet +1: Claude Sonnet 4.6useStream exposes abort() which cancels the in-flight fetch via AbortController. ChatInput bottom variant swaps the send icon for a filled stop square while isStreaming is true. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>e4e4267 -
chat-ui: profession select default option → '-- please select --'
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>f4e0810 -
chat-ui: move new conversation button above saved responses in bottom block
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>a7e286b -
chat-ui: group saved responses + past conversations at sidebar bottom
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0583b1f -
chat-ui: move download saved responses below saved responses section
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>50485d1 -
chat-ui: pin past conversations to bottom of sidebar
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>30ef437 -
chat-ui: reduce starter pills to four
webmuppet +1: Claude Sonnet 4.6Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>4c03494 -
chat-ui: hero input — larger textarea (4 rows, text-xl) matching Claude.ai scale
webmuppet +1: Claude Sonnet 4.6Split the shared formContent abstraction: the hero textarea now uses rows=4, text-xl (20px), leading-relaxed, and transparent background so it reads as a prominent focal point. The bottom variant retains rows=1 / text-sm compact bar. Hero submit button moves to a right-aligned row beneath the textarea with a text label ("Send") rather than icon-only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0ab00bc -
chat-ui: centred hero layout with input as focal point, input moves to bottom on chat
webmuppet +1: Claude Sonnet 4.6Empty state: title + ChatInput (hero variant, floating card) + starter pills are stacked in a centred flex column occupying the full viewport height — matching the Claude.ai / ChatGPT pattern where the input is the primary call to action rather than a footer bar. Chat state: ChatThread takes flex-1 above, ChatInput (bottom variant, sticky footer) anchored below — same as before but now only rendered in this state. ChatInput gains a variant prop ("hero" | "bottom", default "bottom") so the two structural contexts can share all form logic (submit, keyboard, streaming disabled state) while rendering different container styles. All 66 tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>c80e301 -
Refactor: replace Streamlit with React+Vite SPA + FastAPI server
webmuppet +1: Claude Sonnet 4.6Replaces app.py (Streamlit) with a React+Vite single-page application served as compiled static assets by a new FastAPI server (server.py). The Python backend (src/pipeline.py, retriever, generator, router) is untouched. All user-visible features are preserved: chat with streaming LLM responses, conversation history, saved responses, profession and language selectors, password gate, citation chips, Markdown export, and starter pill questions. Key changes: - server.py: FastAPI entry point — JWT auth, POST /api/query/stream SSE, static file serving of frontend/dist/ - frontend/: React+Vite+Tailwind SPA with full TypeScript, 66 passing tests including property-based tests (fast-check) for storage, export, citations, streaming, and fork isolation - Dockerfile: multi-stage build adding Node frontend compilation step; CMD switched from streamlit to uvicorn - pyproject.toml: streamlit/streamlit-js-eval removed; fastapi/uvicorn/ pyjwt added - CORS only enabled when ALLOWED_ORIGIN en…b5c0df4