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. "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 https://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 NDJSON OLLAMA 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 → http://localhost:3000 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 https://ai.google.dev/gemma via Ollama https://ollama.com · Framework: Next.js · Code: github.com/RishabhVoid/seance https://github.com/RishabhVoid/seance Entering: Overall · Best Use of Gemma.