- Add loading spinner with 'Thinking...' text during streaming when
content is not yet available
- Fix :key binding to use message.id instead of message.content
- Remove unnecessary TypeScript cast in file reader handler
- Move test image into testdata/ directory for proper test organization
- Remove t.Skip and simplify TestSummarizeChat test message
Add vision/multimodal support to chat, allowing users to send images
alongside or instead of text prompts. Images are transmitted and persisted
as base64 data URLs.
Backend:
- Add Images []string to Message struct for persistence
- Add Images []string to GenerateTextRequest with relaxed validation
- Build multimodal user messages using OpenAI SDK content parts
- Pass images through from handlers to client
- Deep-copy Images slice in message cloning
Frontend:
- Add images?: string[] to Message and GenerateTextRequest types
- Add image selection state and file input handler
- Add camera icon button, hidden file input, and image preview strip
- Render images in user message bubbles
- Pass images through to GenerateTextRequest
Tests:
- Add TestSendMessageWithImage for vision model testing
Add cache-busting query parameter to the stream fetch URL so each
tab gets a unique request and the browser cannot reuse an in-flight
response. Remove redundant Transfer-Encoding header that Go sets
automatically.
Change build script to output to public/dist instead of ../backend/web/static/dist.
The Dockerfile copies from frontend/public/, so the previous path caused builds
to output to a non-existent directory, resulting in stale files being deployed.
Also add mkdir -p to dev script for robustness.
Embed frontend build output directly into Go binary using //go:embed.
This removes runtime dependency on ../frontend/public/ path and
simplifies Docker builds by serving assets from embedded filesystem.
- Add backend/web/embed.go with embed.FS directive
- Update server to serve from embedded static assets
- Update Makefile to copy frontend build to web/static/
- Update Dockerfile for simplified multi-stage build
- Update frontend package.json output paths
- Remove custom 'oc' command from flake.nix dev shell
- Upgrade to Tailwind CSS v4.2.0 with explicit CLI dependency
- Add @tailwindcss/cli and tailwindcss as devDependencies
- Update build scripts to use bunx @tailwindcss/cli
- Include new transitive dependencies for enhanced CSS processing