What I Built
I built The Offline Medium, a deeply private, fully local web application that acts as a digital clairvoyant and tarot card reader.
To honor the "Ghost in the Machine" theme, I interpreted the prompt literally: what if there was an entity living inside your local hardware? The Offline Medium does not present itself as an AI assistant. Instead, it embodies the persona of a mysterious, slightly dark spirit trapped inside the machine, offering philosophical insights and imaginary tarot readings based on the user's questions.
Demo
(Since this project is designed to be run locally for absolute privacy, here is a video demonstration of the app running with my Wi-Fi completely disabled)
Code
React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Oxc
- @vitejs/plugin-react-swc uses SWC
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the ESLint configuration
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the TS template for information on how to integrate TypeScript and typescript-eslint in your project.
How I Built It
This project relies entirely on local inference and open-weight models to function:
Core AI Engine: I used Ollama to serve the Llama 3 (8B) open-weight model locally.
System Prompting: I heavily engineered the system prompt to force Llama 3 to break its standard "helpful assistant" alignment and instead roleplay strictly as an ethereal medium.
Frontend Architecture: Leveraging my experience in web application development, I built a minimalist, dark-themed UI using React, Vite, and Tailwind CSS. I implemented strict state management to handle loading states and protect against edge cases (like preventing empty inputs).
Streaming & Voice: I integrated the ReadableStream API to parse Ollama's JSONL chunks, creating a real-time, character-by-character typing effect. I also hooked this into the browser's native Web Speech API to give the Medium a low, slow, and haunting voice.
Why Does Open Innovation Matter?
For a project like a Tarot Reader or a digital séance, privacy is paramount. People often ask tarot cards deeply personal, vulnerable, or sensitive questions about their relationships, careers, and fears.
If I built this using a closed, proprietary API, every personal fear or hope typed into the prompt would be sent to a corporate server and potentially used for training data. Open innovation made it possible to build a system that guarantees 100% data sovereignty. Because it runs on an open-weight model via Ollama, it works with the lights out and the Wi-Fi disconnected. It proves that we can have deeply engaging, immersive AI experiences without sacrificing our right to digital privacy.
The Spirit of It
The moment this project truly landed for me was during testing. I physically unplugged my router, sat in a dark room, and typed: "I feel completely stuck in my life right now. What do the cards say?"
Seeing the local terminal spin up my GPU, process my vulnerability completely offline, and slowly stream back a haunting, poetic response about the "Tower card" and "necessary destruction"—followed by a slow, robotic voice echoing through my speakers—gave me genuine chills. It truly felt like there was a ghost in the machine.
Prize Categories
Local Inference Hero

Top comments (0)