← All Projects

The Ravensfield Collection

An AI-powered museum of original weird fiction and artwork, with a daily TypeScript pipeline built around Claude and Leonardo.

  • ai
  • typescript
  • expo
  • tamagui
The Ravensfield Collection homepage with a featured fictional artifact and recent exhibits

Why I Made It

I spent years as a designer, artist, and writer, and I’ve always loved cabinets of curiosities and weird fiction. Ravensfield started with a question: could I make a museum that comes up with a new exhibit every day and still feels like one place?

The Ravensfield Collection publishes a fictional artifact, image, and story each day. I designed the creative rules and built the AI pipeline behind every exhibit.

Creative Direction

I wanted the exhibits to feel like discoveries from one eccentric institution. Each has a backstory and quotes from imaginary experts. The prompts set the tone and structure, while leaving room for surprises.

Engineering Decisions

One description for the image and story. Claude turns a generated brief into an artwork description. Leonardo uses it to create the image while Claude writes the story and metadata, so both start from the same object.

Check the output before saving it. Valibot validates the structure of Claude’s responses. A Turso transaction stores the story, artwork, and quotes together, rather than leaving a partial exhibit in the database.

Compare the finished pieces. A final vision check gives Claude the image and story together and asks it to correct details in the writing that don’t match the artwork.

Serve the museum from one app. Expo Router handles server-rendered web pages and API routes. Tamagui provides the interface and themes; Drizzle handles database queries.

How an Exhibit Comes Together

Hard Parts

Keeping the stories varied. Without a changing premise, the model returned to familiar objects and narrative beats. I built a Madlibs-style generator from curated lists to give each run a fresh starting point without losing the museum’s voice.

Making server rendering and dark mode agree. Tamagui’s theme has to match the server’s first render before the browser takes over. I held that first render to a consistent theme, then applied the visitor’s preference after the page loaded.

What’s Next

  • Native release — bring the collection to iOS and Android.
  • Search and filtering — let visitors browse by medium, era, or keyword.