← All Projects

Stardial

A sci-fi chat game with AI characters who remember past conversations, share clues, and lead you through a connected galaxy.

  • ai
  • typescript
  • expo
  • react-native
  • tamagui
Stardial web demo showing an alien character and the conversation interface

Why I Made It

I’ve always liked stories that reward curiosity. Stardial began as a small experiment: spin a dial, meet an alien, and see where the conversation goes. It was fun enough that I wanted to give those characters memories, relationships, and secrets worth finding.

The web demo is live, and I’m preparing the app for iOS and Android.

Product Decisions

A cast worth revisiting. Characters keep their own voices and remember past conversations. Returning to one should feel like catching up, not starting from scratch.

Curiosity moves the story. Relay coordinates lead to other aliens; lore fragments point toward the elusive primordial species. The game gives you reasons to keep talking and exploring.

The characters have a face. Portraits and idle animations add presence without holding up the conversation while they load.

Engineering Decisions

One app for web and mobile. I rebuilt the Python, FastAPI, and Svelte prototype with Expo and React Native. Expo Router lets me keep the app screens and server endpoints in one codebase. Bun runs the web app and API together.

Replies that stream. The server sends Claude’s response to the app through Server-Sent Events, so text appears as it arrives. The client reads it with fetch and ReadableStream.

Memory without slowing the chat. Simple facts, such as a shared name or discovered clue, are saved with rule-based logic on each turn. Longer summaries update every ten messages for favorited threads, keeping the characters consistent without making every reply slower or more expensive.

Characters tested before they appear. New aliens are generated in batches and put through short conversation checks before joining the live pool. Leonardo creates their portraits; Kling turns those portraits into idle loops.

Storage that works with the build. Turso and Drizzle keep conversations and character data persistent. The HTTP driver avoids native binaries that would complicate the Expo bundle.

How a Message Moves Through the App

Hard Parts

Keeping the feel of the prototype. The move to Expo changed the transport, database, and authentication layers. I kept working on the rewrite until a full chat thread felt as natural as it had in the original version.

Serving chat from the same app. The web frontend and API run through Expo Router and Bun, behind Nginx on a Fly machine that stays up for active streams. I tuned the startup order so both services were ready before accepting chats.

Moderation that belongs in the world. OpenAI Moderation checks messages before Claude replies. Warnings and cooldowns appear through Officer Vex, a robot cop in the story, so safety rules are clear without abruptly dropping the fiction.

What’s Next

  • iOS and Android release — bring the app to the stores after the web demo.
  • More connections between characters — let aliens remember what others have said about you.
  • Voice mode — make a transmission sound like a transmission.