REVULATE.DEV

A town built down a hillside above the water, with an observatory on the ridge above it: the dome stands open along a slit and the telescope inside tracks slowly across the sky. Windows warm and dim on their own rhythms behind the rooflines, smoke drifts from the chimneys, two figures walk the road above the water, and fireflies wander over it. On the hilltop beside the observatory a wolf-eared girl in a red scarf stands watching the moon. At night the roofs are plum-dark under a low moon and a field of stars; by day the hills are green, the roofs are red tile, and the moon has faded to a pale disc in a hazy blue sky.

The observatory — meet Luna

LUNA

A Twitch chatbot written in TypeScript on Bun — a clever, mischievous wolf girl who listens to a room full of voices and answers as part of the room, not above it.

  • Gemini, Claude or GPT: the owner picks one model for every channel and can switch it while Luna is running.
  • Stream frames can be pulled on demand and included in the reply she writes.
  • Chat history can be recalled by meaning through Postgres, a local embedding model and pgvector.
  • TYPESCRIPT
  • BUN
  • GEMINI
  • CLAUDE
  • GPT
  • POSTGRES
  • PGVECTOR
  • EVENTSUB

Private repo — source code is in a private repository

Inside the observatory

HOW LUNA LISTENS

Luna is built around context: what the room is saying, what it has said before, and what is happening on the stream right now. The machinery stays behind the personality.

Three voices, one switch

Gemini, Claude and GPT sit behind one gateway. The owner chooses the model every channel uses, and can switch it without taking Luna offline.

Eyes on the stream

When the conversation needs visual context, Luna can pull a stream frame and carry it into the answer.

Memory by meaning

Chat history lives in Postgres and is recalled through local embeddings and pgvector, blended with recency.

A room-sized pace

Autonomous messages are paced like one reasonably active chatter instead of a timer trying to fill silence.

Commands for the room

Trivia, reminders, a timeout game, stocks and 7TV emote search are spread across eight command categories.

A channel of her own

Each streamer can give Luna their own instructions from the dashboard, so she can fit the room she has joined.

Browse all commands

A signal crosses the room

LISTEN. RECALL. ANSWER.

The path is deliberately small. Each step adds context without turning a chat reply into a dashboard workflow.

  1. 01

    Listen

    Twitch events and chat messages arrive as one stream of room context.

  2. 02

    Recall

    Relevant memories and, when requested, a current stream frame join the prompt.

  3. 03

    Answer

    The model the owner chose writes one reply in Luna’s voice and sends it back to chat.

Open the observatory

BRING LUNA TO CHAT

Sign in with Twitch, choose the channel settings in the dashboard, and connect Luna when the room is ready for her.

Solstice
MUSIC — OFF