All projects

Kiyub

Self-hostable AI chat app that runs on one API key

Personal projectOpen sourceSoonCurrently developing it to be open source friendly since this was originally an app I planned to close source only

Overview

A full-stack AI chat app that runs on one API key. Web client, native mobile client, and a real-time backend, all built around a single LLM gateway so a self-hoster can clone, set one env var, and have their own ChatGPT-alternative running in minutes.

Kiyub is an open-source chat product with productivity surfaces beyond plain conversation: Projects (scoped workspaces with their own files and system prompts), Canvas (a drag-and-drop card graph for non-linear thinking), and Tests (auto-generated quizzes from uploaded documents). No accounts, no analytics vendor, just the app.

Features

  • Streaming chat with multi-step reasoning display and inline citations.
  • Native web search via OpenRouter's :online suffix, no separate search key.
  • Multimodal attachments (images, PDFs, Word docs, audio) processed through OpenRouter.
  • Projects: system-prompt-scoped workspaces with per-project files and instructions.
  • Canvas: drag-and-drop card graph with typed connections for spatial conversations.
  • Test generation: upload a document, get a graded quiz with score tracking.
  • Highlight-to-chat: select any text to open a contextual quick-question popup.
  • Usage dashboard: token spend, cost, and breakdown by model and usage type.
  • Native mobile app (iOS and Android) sharing types and chat pipeline with the web.

Highlights

  • One API key, every feature: consolidated five external services into a single OpenRouter gateway, with routing decisions handled server-side in one provider abstraction.
  • Refactored from multi-tenant SaaS to single-tenant OSS in a single coordinated pass: ~90 files touched, schema migrated, build kept green throughout.
  • Real-time-reactive by default: Convex subscriptions keep conversations, canvas cards, usage metrics, and test progress live without websocket plumbing.
  • Shared types across web, mobile, and server, so a schema change triggers compile errors everywhere instead of silent drift.

Built with

WebNext.js 16, React 19, TypeScript, Tailwind CSS, shadcn/ui, Framer Motion, dnd-kit
MobileExpo SDK 54, React Native 0.81, Expo Router, Reanimated
BackendConvex
AI / LLMVercel AI SDK v5, OpenRouter
Infra & Toolingnpm workspaces, Vercel, EAS Build, Convex Cloud

Contact

This will be sent to my email. A confirmation email will be sent to the email you inputted.