No description
| e2e | ||
| src | ||
| static | ||
| .env.example | ||
| .gitignore | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| convex.json | ||
| eslint.config.js | ||
| jsrepo.json | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| README.md | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest-setup-client.ts | ||
thom-chat
Clone of T3 Chat
🚀 Features
- Cached query for fast chat loading
- Openrouter provider for access to 400+ models
- File uploads
- Web search
- Full-text search over your chat history
- Cursor-like rules
- Privacy mode for streams and screen-sharing
- Markdown rendered messages with syntax highlighting
- Chat sharing
🛠️ Tech Stack
- Framework: SvelteKit
- Language: TypeScript
- Styling: Tailwind
- Backend: Convex
- Auth: BetterAuth + Convex
- Components: Melt UI (next-gen)
- Testing: Humans
- Package Manager: pnpm
- Linting: ESLint
- Formatting: Prettier
📦 Running locally
- Clone the repo
- Install dependencies with
pnpm install - Copy
.env.exampleto.envand fill in the values - Run
pnpm dev - Open http://localhost:5173
TODO
- Login & Auth
- useCachedQuery
- Convex schemas for chats
- Actual fucking UI for chat
- Providers (BYOK)
- Openrouter
[ ] HuggingFace[ ] OpenAI
- File upload
- Ensure responsiveness
- Streams on the server (Resumable streams)
- Syntax highlighting with Shiki/markdown renderer
- Eliminate FOUC
- Cascade deletes
- Google Auth
- Fix light mode (urgh)
- Privacy mode
Chat
- loading state
- deal with error states, both on creation attempt and message generation failure
- delete conversations option
- conversation title generation
- kbd powered popover model picker
- autosize
- AbortController for message generation
- Per route msg persistance
Extra
- Web Search
- Chat branching
- Regenerate message
[ ] Image generation- Chat sharing
- 404 page/redirect
[ ] Test link with free credits- Cursor-like Rules (@ieedan's idea!)
- Full-text search