{"slug": "seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma", "title": "Séance: a scroll of eight dead programming languages, running on local Gemma", "summary": "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.", "body_md": "*\"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\nparticular epoch seems terribly distracted from proper, sturdy\nprogramming practice. Do come closer; we have much to discuss\nregarding structure and permanence.\"*\n\n—**COBOL**, summoned via Gemma 4\n\nFor 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.\n\nEverything runs on your laptop. Nothing a ghost tells you leaves the machine. That is a design decision as much as a technical one.\n\n**Repo:** [github.com/RishabhVoid/seance](https://github.com/RishabhVoid/seance)\n\nThe 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.\n\nThe 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.\n\nClick 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.\n\nNot a chat log. Not a bubble UI. Just text appearing on a page.\n\nYour 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.\n\nThe best way to understand what I built is to watch a ghost actually respond in character. I asked Prolog, *\"Is a cat a mammal?\"*\n\nProlog 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:\n\n*\"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?\"*\n\nThat is 100% the voice of the system prompt. I wrote the character; the open-weight model did the acting.\n\nThe whole premise collapses if a cloud provider is in the loop:\n\n`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 | \n|---|---|---|---|\n| COBOL | 1959 | shambling since 1985 | matronly, resents OO, keeps mentioning payroll | \n| APL | 1966 | ca. 1990 | elliptical, speaks in glyphs, impatient | \n| Perl 4 | 1991 | 1994, when Perl 5 took the throne | gruff, sigil-obsessed, feels betrayed | \n| Pascal | 1970 | the early 2000s | professorial Wirth-schooled, enjoys a semicolon | \n| Lisp Machine | 1980 | 1992, with Symbolics | aristocratic, convinced the industry chose wrong | \n| Algol 60 | 1960 | late 1970s | formal, the ancestor everyone forgot | \n| Prolog | 1972 | exiled to the niche | Socratic, answers in clauses | \n| BASIC | 1964 | late 1980s | kindly schoolteacher, remembers GOSUB fondly | \n\n`localhost:11434` with streaming NDJSON`OLLAMA_MODEL`\n`/api/chat` streams token-by-token from Ollama straight through a `ReadableStream` to the browser — no framework in between\nAbout 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.\n\nA handful of DEV posts shaped how I thought about this:\n\n```\ngit clone https://github.com/RishabhVoid/seance\ncd seance\npnpm install\nollama pull gemma4:e4b          # or gemma3:4b for lighter machines\nollama serve &                   # if not already running\npnpm dev\n# → http://localhost:3000\n```\n\nNo API keys, no cloud dashboard, no account.\n\nBut the point of a Hacktoberfest week is to ship. The chapel is open; the candles are lit.\n\n**Open-weight model:** [Gemma 4](https://ai.google.dev/gemma) via [Ollama](https://ollama.com) · **Framework:** Next.js · **Code:** [github.com/RishabhVoid/seance](https://github.com/RishabhVoid/seance)\n\nEntering: Overall · Best Use of Gemma.", "url": "https://wpnews.pro/news/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma", "canonical_source": "https://dev.to/rishabhvoid/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma-dja", "published_at": "2026-10-28 15:08:09+00:00", "updated_at": "2026-10-28 15:11:27.921286+00:00", "lang": "en", "topics": ["large-language-models", "ai-tools", "generative-ai", "developer-tools"], "entities": ["Séance", "Ollama", "Gemma", "COBOL", "Prolog", "Pascal", "Lisp Machine", "Hacktoberfest"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma", "markdown": "https://wpnews.pro/news/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma.md", "text": "https://wpnews.pro/news/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma.txt", "jsonld": "https://wpnews.pro/news/seance-a-scroll-of-eight-dead-programming-languages-running-on-local-gemma.jsonld"}}