Orin is an AI companion built for conversation. You can type when you want to think quietly, or start a voice call when speaking out loud feels better. Either way, you are talking to the same Orin, in the same thread, with the same memory of what you have already said.
Start a conversation
Open New chat and type whatever is on your mind. Not sure where to begin? Pick a suggestion from one of four categories:
- Vent for things you need to get off your chest
- Celebrate for good news worth sharing
- Decide when you are weighing a choice
- Reflect when you want to think something through
You can also dictate a message with the microphone button in the composer, then send it like any other text.
You do not need an account to try Orin. Without signing in, you get a small demo allowance in your browser. Sign in with Google when you want to:
- Save your conversation history
- Start voice calls and use read-aloud
- Pick up chats on another device
If you had chats before signing in, they carry over automatically.
Text chat
Orin replies in a streaming back-and-forth thread. A few shortcuts worth knowing:
Enterto sendShift + Enterfor a new lineEscapeto stop a response midstream
Message actions appear on Orin's replies; hover your own messages for:
- Copy any message
- Retry to ask Orin for a new reply
- Edit one of your messages and send it again
- Read aloud on Orin's replies to hear them spoken
Your chats show up in the sidebar under Recent. Favorite a conversation to pin it under Favorites. The title is generated from your first message, and you can rename it anytime from the chat header or sidebar menu.
Voice calls
Voice is where Orin feels most like company. Tap the phone icon in the chat header to start a call in the conversation you already have open. You will need to be signed in.
During a call:
- What you and Orin say appears live in the chat thread below
- The transcript stays in the conversation after you hang up
- You can mute yourself, expand to fullscreen, or end the call from the overlay
Voice calls use your free allowance, measured in minutes. Read aloud on individual messages is separate and works well when you want to listen to one reply without starting a full call.
Make Orin yours
After your first sign-in, onboarding walks you through the basics: personality style, custom instructions, voice, and speaking speed. You can skip it and adjust everything later in Settings.
From Settings you can change:
- Theme, language, and chat bubble layout
- Personality style (Warm, Curious, Playful, Calm, or Direct) and custom instructions
- Voice and speaking speed
The same settings apply to both text chat and voice calls, so Orin feels consistent no matter how you reach it.
If you use Orin regularly and run through the free allowance, you can add your own API keys in Settings:
- OpenAI for text chat and voice responses
- ElevenLabs for voice calls and read-aloud
Orin uses them automatically when the platform quota runs out. Your keys are encrypted and never shown in full after you save them.
Your data
Your conversations belong to you. From Settings you can:
- Export everything as JSON
- Delete individual chats from the sidebar
- Remove your account entirely
Read the Privacy Policy for the full picture on what is stored and how it is handled.
How Orin is built
Orin is an independent project I built and maintain as a portfolio piece. The core idea is simple: one assistant, one brain, two surfaces. Text chat and voice calls share the same conversation thread, the same personality config, and the same AI logic.
The stack, in brief:
- Next.js on Vercel for the web app and API routes
- shadcn/ui for settings, forms, and general UI components
- Nexus UI for chat threads, messages, and the composer
- Supabase for auth, Postgres, and row-level security
- Vercel AI SDK for streaming text responses
- ElevenLabs Speech Engine for real-time voice, via a separate Node sidecar
Voice runs outside serverless on purpose. Real-time audio needs a persistent WebSocket connection, which is a poor fit for short-lived functions. The sidecar calls the same shared AI layer as /api/chat, so Orin never gets two different personalities depending on how you talk to it.
Every message, whether typed or spoken, lands in the same messages table. Voice turns are marked as spoken so you can tell them apart in the thread. Quotas and API key resolution happen on the server, not in the browser.
The source is open on GitHub, including architecture decision records in docs/adr/ if you want the deeper technical write-up. Bugs, ideas, and contributions are welcome through GitHub Issues.
Try it
Start a conversation or sign in with Google to unlock voice and save your history.
Follow @orin__chat for updates, or reach out through victorwilliams.me.