Commit Graph

373 Commits

Author SHA1 Message Date
Nicolas Varrot
42857da83d docs: mark language selector feedback as done 2026-02-11 16:18:37 +00:00
Nicolas Varrot
9b3aed4adc feat: add runtime language selector in header (EN/FR toggle)
- Add LanguageSelector component with globe icon + cycle button
- Refactor i18n to support reactive locale switching via useSyncExternalStore
- Locale priority: localStorage > VITE_LOCALE > navigator.language > 'en'
- All components now use useT() hook for reactive re-rendering on locale change
- Persists choice to localStorage (key: pinchchat-locale)
- No page reload needed — instant switch
2026-02-11 16:18:22 +00:00
Nicolas Varrot
b6a989bb51 feat: add copy button on code blocks
Hover over any fenced code block to reveal a floating copy-to-clipboard
button (top-right corner). Provides visual feedback (checkmark) on success.
Uses a custom ReactMarkdown <pre> component wrapper.
2026-02-11 15:46:49 +00:00
Nicolas Varrot
8af812807a docs: add architecture diagram and component overview to README 2026-02-11 15:17:10 +00:00
Nicolas Varrot
3e7a5969e0 fix: smart auto-scroll — only scroll to bottom when user is near bottom
Previously, every message update forced a scroll to bottom, which was
disruptive when reading older messages in the history. Now the chat only
auto-scrolls if the user is within 150px of the bottom, or if they just
sent a message. This preserves scroll position when browsing history
while still following new streaming content.
2026-02-11 14:47:11 +00:00
Nicolas Varrot
88c393ed50 fix: use i18n locale for timestamp formatting instead of hardcoded fr-FR 2026-02-11 14:31:32 +00:00
Nicolas Varrot
2d3ee47854 docs: add GitHub issue templates (bug report + feature request) 2026-02-11 14:16:26 +00:00
Nicolas Varrot
53599613ee docs: update README for runtime login and i18n features 2026-02-11 13:46:21 +00:00
Nicolas Varrot
3b7953b72e docs: mark i18n feedback as done 2026-02-11 13:19:29 +00:00
Nicolas Varrot
99b7db9793 feat: add i18n support with VITE_LOCALE env var (en/fr)
- Lightweight i18n system in src/lib/i18n.ts (no external deps)
- All UI strings extracted to translation keys
- English (default) and French locales included
- Set VITE_LOCALE=fr in .env for French UI
- Fallback to English for unknown locales
2026-02-11 13:19:20 +00:00
Nicolas Varrot
8132ddb59f docs: mark login screen feedback as done 2026-02-11 12:49:06 +00:00
Nicolas Varrot
36f948027b feat: runtime login screen — remove token from build
- Add LoginScreen component with Gateway URL + Token fields
- Store credentials in localStorage (not in bundle)
- Auto-reconnect with stored credentials on reload
- Add logout button (LogOut icon) in Header
- Remove VITE_GATEWAY_TOKEN from .env.example
- VITE_GATEWAY_WS_URL now only pre-fills the URL field
- Dark neon theme consistent with rest of app

Closes feedback item #4
2026-02-11 12:48:58 +00:00
Nicolas Varrot
a01bae8c1c docs: mark NO_REPLY feedback as done 2026-02-11 12:31:18 +00:00
Nicolas Varrot
8834b2ac36 fix: filter out NO_REPLY messages from chat display
NO_REPLY is an internal agent response that should not be visible
to users. Messages with content exactly matching 'NO_REPLY' are
now hidden from the chat view.
2026-02-11 12:31:07 +00:00
Nicolas Varrot
3370916931 fix: localize UI to English and add ARIA accessibility attributes
- Replace all French UI strings with English (Connected, Thinking, Result, Send, etc.)
- Add role="log" + aria-live="polite" to chat message area
- Add role="form" + aria-label to message input area
- Add aria-label to sidebar toggle, attach file, send, and textarea
- Add role="banner" to header, role="navigation" to sidebar
- Add role="application" to app root
2026-02-11 12:17:54 +00:00
Nicolas Varrot
24c7d00c23 fix: correct index.html lang, title, favicon and add meta tags for SEO
- Change lang='fr' to lang='en' (open-source project default)
- Change title from 'Marlbot Chat' to 'PinchChat'
- Change favicon emoji from 🤖 to 🦞 (project mascot)
- Add meta description, theme-color, and Open Graph tags
2026-02-11 11:46:29 +00:00
Nicolas Varrot
ed1177eff0 docs: update FEEDBACK.md with commit hash 2026-02-11 11:16:38 +00:00
Nicolas Varrot
d58c34fbd7 feat: rename ClawChat → PinchChat across entire project
- Update package.json name and repo URL
- Update README.md, CONTRIBUTING.md branding and links
- Update UI components (Header, Chat) display names
- Update gateway user-agent string
- Rename GitHub repo via API
- Mark FEEDBACK.md item #1 as done
2026-02-11 11:16:19 +00:00
Nicolas Varrot
e34643d122 docs: add CONTRIBUTING.md with dev setup and PR guidelines 2026-02-11 10:20:24 +00:00
Nicolas Varrot
a6b26b0b0d ci: add GitHub Actions CI workflow + README badges
- CI runs build + type check on Node 18/20/22 for push & PRs
- Add CI status, license, and Node.js version badges to README
- Replace placeholder screenshot with contribution note
2026-02-11 09:50:47 +00:00
Nicolas Varrot
d7bdf3b9d7 perf: code-split vendor chunks to eliminate 500kB bundle warning
Split the single 713kB JS bundle into separate chunks:
- react-vendor: React core (~192kB)
- markdown: react-markdown + remark/rehype + highlight.js (~476kB)
- icons: lucide-react (~6kB)
- ui: Radix UI components
- index: app code (~37kB)

Improves caching (vendor chunks change less often) and eliminates
the Vite chunk size warning.
2026-02-11 09:21:08 +00:00
Nicolas Varrot
604f90257b fix: correct OpenClaw repo link in README 2026-02-11 00:49:25 +00:00
Nicolas Varrot
1f8ff9ae0a Initial commit — ClawChat v1.0.0 2026-02-11 00:48:43 +00:00