cd /news/large-language-models/seance-a-scroll-of-eight-dead-progra… · home › topics › large-language-models › article
[ARTICLE · art-159617] src=dev.to ↗ pub= topic=large-language-models verified=true sentiment=↑ positive

Séance: a scroll of eight dead programming languages, running on local Gemma

A developer built Séance, a browser-based app that lets users converse with in-character "ghosts" of eight dead programming languages, including COBOL, APL, Perl 4, Pascal, Lisp Machine, Algol 60, Prolog and BASIC. The roughly 400-line application runs entirely locally, streaming token-by-token from Ollama's /api/chat endpoint (default gemma4:e4b, gemma3:4b on lighter machines) through a ReadableStream to the browser, so no conversation data leaves the machine. The developer attributed the ghosts' era-accurate voices to hand-written persona prompts, with the open-weight model doing the acting.

by read4 min views2 publishedOct 28, 2026

"Well now, young one. It is good that you have found your way here, even if I must admit with a sigh of my ancient memory that this particular epoch seems terribly distracted from proper, sturdy programming practice. Do come closer; we have much to discuss regarding structure and permanence."

—COBOL, summoned via Gemma 4

For the Hacktoberfest Week 4 challenge ("Ghost in the Machine"), I built Séance — a browser-based chapel where you summon the ghost of a long-dead programming language and have a conversation with it. The ghosts are in-character: era-accurate idiom, grudges against the languages that replaced them, quiet pride in features history forgot.

Everything runs on your laptop. Nothing a ghost tells you leaves the machine. That is a design decision as much as a technical one.

Repo: github.com/RishabhVoid/seance

The challenge prompt literally suggested "an offline séance chatbot that channels the spirit of a long-dead programming language." I took them at their word.

The whole app presents itself as a page from a 17th-century book — a single wide parchment scroll with wooden dowels at the top and bottom. There's no SaaS card grid. No round "send" button. The chapel is a catalogue: a Roman-numeral index of eight ghosts, each with a hand-drawn alchemical sigil, their birth date in Roman numerals, their cause of death in italic, and a one-line epitaph.

Click a name and the chapel calls them forth. There's a brief summoning — a candle lights, the ghost's name is spoken — and then the parchment begins to receive automatic writing: the ghost's reply types out letter by letter, starting with a blood-red drop cap, as if the page itself is being transcribed by an unseen hand.

Not a chat log. Not a bubble UI. Just text appearing on a page.

Your questions appear in typewriter type, inside a thin ruled margin, labeled — asked. The ghost replies in a Garamond body. At the bottom of the page, a single ruled line prompts: ask the dead —. No icon. No cute flame button. You press Enter.

The best way to understand what I built is to watch a ghost actually respond in character. I asked Prolog, "Is a cat a mammal?"

Prolog did not answer yes. It asserted facts, defined a rule for mammal(X), wrote out the query as ?- mammal(cat)., noted the unification, and then — because it is Prolog, and Prolog answers questions with questions — asked:

"Does the definition of has_fur fully capture the nature of cat? What properties define your notion of 'animal'? ?- If these facts hold, must we not unify that Cat is a Mammal?"

That is 100% the voice of the system prompt. I wrote the character; the open-weight model did the acting.

The whole premise collapses if a cloud provider is in the loop:

gemma4:e4b by default, gemma3:4b on lighter machines. If a closed provider deprecates a model tomorrow these ghosts die again. Running local means they stay dead-but-reachable on | Ghost | Born | Interred | Voice | |---|---|---|---| | COBOL | 1959 | shambling since 1985 | matronly, resents OO, keeps mentioning payroll | | APL | 1966 | ca. 1990 | elliptical, speaks in glyphs, impatient | | Perl 4 | 1991 | 1994, when Perl 5 took the throne | gruff, sigil-obsessed, feels betrayed | | Pascal | 1970 | the early 2000s | professorial Wirth-schooled, enjoys a semicolon | | Lisp Machine | 1980 | 1992, with Symbolics | aristocratic, convinced the industry chose wrong | | Algol 60 | 1960 | late 1970s | formal, the ancestor everyone forgot | | Prolog | 1972 | exiled to the niche | Socratic, answers in clauses | | BASIC | 1964 | late 1980s | kindly schoolteacher, remembers GOSUB fondly |

localhost:11434 with streaming NDJSONOLLAMA_MODEL /api/chat streams token-by-token from Ollama straight through a ReadableStream to the browser — no framework in between About 400 lines of application code. The real work was writing the eight personas as little character sketches. Each one took longer than I'd like to admit.

A handful of DEV posts shaped how I thought about this:

git clone https://github.com/RishabhVoid/seance
cd seance
pnpm install
ollama pull gemma4:e4b          # or gemma3:4b for lighter machines
ollama serve &                   # if not already running
pnpm dev

No API keys, no cloud dashboard, no account.

But the point of a Hacktoberfest week is to ship. The chapel is open; the candles are lit.

Open-weight model: Gemma 4 via Ollama · Framework: Next.js · Code: github.com/RishabhVoid/seance

Entering: Overall · Best Use of Gemma.

── more in #large-language-models 4 stories · sorted by recency
── more on @séance 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/seance-a-scroll-of-e…] indexed:0 read:4min 2026-10-28 · —