A modern multi‑model AI chat application built with Next.js (App Router), Supabase, and the Vercel AI SDK. Seemless Chat provides real‑time streaming, authentication, and persistent chat history.
- Multi‑AI model support: Gemini 2.0 Flash, Gemini 1.5 Flash, Gemini 1.5 Pro, and GPT‑4.1 Nano
- Real‑time streaming: Natural, low‑latency responses
- Authentication: Supabase Auth with OAuth and email OTP
- Chat persistence: Profiles, chats, and messages with RLS
- Chat search: Full‑text search across your chats with highlighting
- Auto titles: First message can auto‑generate a concise chat title
- Responsive UI: Mobile‑first design with dark/light theme
- Markdown + math: Rich markdown, syntax highlighting, and LaTeX rendering
- Attachments UI: File attachment UI is present; uploads are not persisted yet
- Frontend: Next.js (App Router), React 19, TypeScript
- Styling: Tailwind CSS, shadcn/ui
- Backend: Supabase (PostgreSQL, Auth)
- AI: Vercel AI SDK with Google and OpenAI providers
- Deployment: Vercel
seemless.chat/
├── src/
│ ├── app/ # App Router pages and API routes
│ ├── components/ # React components and UI
│ ├── contexts/ # React context providers
│ ├── hooks/ # Custom hooks
│ ├── lib/ # DB utils, Supabase clients, helpers
│ └── types/ # Type definitions (including Supabase)
├── supabase/ # Schemas and migrations (incl. FTS + search functions)
├── public/ # Static assets
└── README.md
- Node.js 18+
- npm (or pnpm/yarn)
- Supabase CLI
- Google Generative AI API key
- OpenAI API key
-
Clone the repository
git clone https://github.com/your-username/seemless.chat.git cd seemless.chat -
Install dependencies
npm install
-
Set up environment variables Create a
.env.localfile and set:# Supabase NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key # AI Providers OPENAI_API_KEY=your_openai_key GOOGLE_GENERATIVE_AI_API_KEY=your_google_generative_ai_key
-
Set up Supabase
# Install Supabase CLI npm install -g supabase # Start local Supabase supabase start # Run migrations (drops and recreates local DB) supabase db reset
-
Start the development server
npm run dev
Helpful overviews in this repo:
src/app/README.md— App Router and pagessrc/components/README.md— UI componentssrc/lib/README.md— DB utilities and Supabase clients- Pin-aware cache priority: pinned chats are prioritized for warming and eviction. See
src/lib/cache/.
- Pin-aware cache priority: pinned chats are prioritized for warming and eviction. See
src/contexts/README.md— Global chat statesrc/hooks/README.md— Custom hookssrc/types/README.md— Type definitionssupabase/README.md— Schemas, migrations, and FTS search
npm run dev— Start the dev server (Turbopack)npm run build— Build for productionnpm run start— Start production servernpm run format— Format with Prettier
Supabase CLI (installed globally):
supabase db reset— Reset local database and apply migrationssupabase db push— Push schema changes to remote
- Connect the repo
- Add environment variables in the project settings
- Deploy on push to
main
- Create a Supabase project
- Apply schema:
supabase db push - Configure
NEXT_PUBLIC_SUPABASE_URLandNEXT_PUBLIC_SUPABASE_ANON_KEY
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'feat: add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
License to be determined.