$ cd ~/projects && ls

Badland AI Chat

Full-stack AI chat platform with multi-model support, voice, image generation, and council mode.

React 19 Vite TypeScript Express 5 tRPC MongoDB Vercel AI SDK Tailwind CSS v4 Radix UI Bun

Overview

Badland AI Chat is a production AI chat platform that supports multiple LLM providers (Anthropic Claude, OpenAI GPT, Google Gemini, xAI Grok) with real-time streaming, voice interaction, image generation, and a unique "council mode" that queries multiple models simultaneously for consensus answers.

Badland AI Chat homepage with sidebar, provider toggles, and starfield background

Architecture

The frontend is a React 19 SPA built with Vite and served via Vercel. The backend is an Express 5 API server using tRPC for type-safe client-server communication, deployed to Hetzner via GitHub Actions CI/CD. MongoDB Atlas handles persistence.

Key Features

Multi-Model Chat

Switch between Claude, GPT-4, Gemini, and Grok mid-conversation. Each model's response streams in real-time via Server-Sent Events. The model selector shows available providers with their latest models, and conversations preserve the model used for each message so you can trace which AI generated what.

Settings modal showing model selection — GPT-5.2, Grok, Gemini 3, Claude Sonnet 4.5

Council Mode

Query multiple models simultaneously and compare responses side-by-side. Models can "vote" on the best answer. Useful for complex questions where consensus improves reliability. Each model responds independently, and the interface displays all responses in a comparative layout with token counts and latency metrics.

Multi-column council mode — GPT-5.2, Grok, and Gemini responding to a database schema question

Voice Mode

Real-time voice interaction with AI models. Push-to-talk or continuous listening with automatic speech-to-text transcription. The voice interface includes a waveform visualizer and supports hands-free conversation flow.

Voice mode — waveform visualizer with 'Responding...' state and conversation transcript below

Image Generation

Generate images using AI models directly in the chat interface. Supports DALL-E and other image generation providers. Generated images appear inline in the conversation with a gallery view for browsing and managing all generated images across conversations.

Image portfolio gallery — grid of AI-generated cars, portraits, turtles, and landscapes with search

Component Library

A custom component library with recipe-based theming — button variants, sizes, icon support, loading/disabled states, form inputs, and toggles. Global recipes cascade to all controls unless overridden per-section.

Notes

A built-in notes app (admin-only for now) with folders, tags, templates, markdown editing with split/preview modes, backlink tracking, and word counts. Notes are searchable and exportable as markdown bundles.

Notes app — folder sidebar, note list, split editor with markdown and preview, backlinks panel

Todo Lists

Task management with multiple lists, drag-to-reorder, filters, and completion tracking. Admin-only for now.

Todo lists — sidebar with Personal, Badland lists, drag-reorder items, filters and completion toggle

Admin Dashboard

Platform management with user stats, thread counts, storage usage, and a user table with role management, ban/unban controls, and chat inspection. Admin-only.

Admin dashboard — 15 users, 361 threads, 25 MB storage, user table with roles, status, and actions

Model Info

A pricing comparison dashboard that pulls live data from OpenRouter, LiteLLM, and provider APIs. Shows input/output costs per model across all sources with the active pricing highlighted. Exportable and refreshable. Admin-only.

Model info — xAI and OpenAI pricing tables comparing Provider API, OpenRouter, LiteLLM, and active rates

Reading List

A personal reading list integrated with Open Library for auto-populating titles, authors, and cover art. Search by title, rate books, mark as read or want-to-read. Admin-only.

Add Book modal — searching 'East of' with results from Open Library showing East of Eden, The Spy Who Came in from the Cold, and The Travels of Marco Polo

Help Guide

An in-app guide covering provider toggles, council mode, response modes (dumb/smart/image), brief mode, web search, and other input features.

How to Use Badland — provider toggles, council mode, dumb/smart/image modes, brief mode, web search

Additional Features

Badland installed as a desktop PWA on macOS — native app window with tab view and Claude Code alongside