iss_pc
inFAMOUS Second Son의 리눅스·윈도우용 네이티브 PC 포트
포의 ‘Annabel Lee’에서 영감받은 플래시식 기억 게임, 시를 기억하면 돌아오고 잊으면 사라짐
A Flash-style memory game inspired by Poe's "Annabel Lee." Call her back by remembering the poem; forget, and she fades. Her words by Gemma, voices by ElevenLabs, traced with Sentry. No Flash, no game
게임JavaScript · CSSGitHub @Rei0322온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A Flash-style memory game inspired by Poe's "Annabel Lee." Call her back by remembering the poem; forget, and she fades. Her words by Gemma, voices by ElevenLabs, traced with Sentry. No Flash, no game engine. 🌙
README 전체를 불러오는 중입니다.
README 전문 보기 ↗· Play it at kingdombythesea.tech
Code name: Project Chamomile.
A Flash-style gothic memory game inspired by Edgar Allan Poe's "Annabel Lee" (1849, public domain), built for the DEV Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine.
Annabel Lee has slept in her sepulchre by the sea for a very long time. You are the one who loved her, standing on the shore, calling her back by remembering the poem. He reads each stanza aloud and stops before its last line; you pick the line that comes next. Remember it and she comes further out of the dark, the marigold path to her tomb unrolls a little further, and she answers him: a whisper you hear, and words written by Gemma, an open-weight model, that you read. Forget, and her light runs out: she fades back into the sea, the way the dead fade when no one remembers them.
When the whole poem is remembered, she stands on the shore again, if only for tonight. Other visitors' candles already burn at her tomb, and you can light one or two for someone you remember before the credits roll.
Play it: kingdombythesea.tech (headphones on).
The ending asks for the name of someone you loved. Run it at home and that name goes only to Gemma on your computer: it is never saved, logged or sent anywhere else. That promise is only possible because Gemma's weights are open. (The hosted demo calls the same family of model through Google's Gemma API for convenience, and says so on screen.) A small open model plus a carefully grounded prompt keeps her honest too: she may only quote real lines from the poem, and her words always begin with what she just whispered aloud.
gemma3:1b and runs npm install for you. The first build takes a few minutes.npm start.winget install Ollama.Ollama).ollama pull gemma3:4bnpm install$env:CHAMOMILE_MODEL="gemma3:4b"; npm startCHAMOMILE_MODEL=gemma3:4b npm startSet GEMMA_API_KEY (from Google AI Studio) and optionally GEMMA_API_MODEL (default gemma-4-26b-a4b-it; Google no longer serves Gemma 3 on its API). The server then calls Gemma through Google instead of Ollama. If no model answers at all, the ghost speaks prepared lines (marked ✦) so the game still works.
The live site runs on DigitalOcean App Platform (Basic, Node, npm start, port 8080), deploying from this repo's main branch, with GEMMA_API_KEY, SENTRY_DSN and SENTRY_ENVIRONMENT=production set as encrypted environment variables. The domain uses DigitalOcean's nameservers.
Set SENTRY_DSN before starting:
export SENTRY_DSN="your-dsn" then npm start$env:SENTRY_DSN="your-dsn"; npm startserver.js Express server; the only thing that talks to Gemma (Ollama or Google's API)
instrument.js Sentry setup, loaded first; strips IPs and request headers
data/poem.js The poem, her mood for each stanza, her spoken lines and backup lines
public/index.html The scene, light meter, poem panel, candle and credits
public/style.css 2000s-web bevels + moonlight
public/app.js Game loop, canvas scene (12 fps), audio player, ghost and ending
public/audio/ Two-voice recordings, sea loop, music, line timings
public/art/ Flash-style shore and Annabel Lee
docs/ The ElevenLabs voice script
NOTES.md Build diary
Everything this project uses, so it's all traceable.
| What | Used for |
|---|---|
| Gemma (Google DeepMind, open-weight) | Annabel Lee's words. Runs locally through Ollama (gemma3:4b at home, gemma3:1b in Codespaces), and through Google's Gemma API (gemma-4-26b-a4b-it) on the hosted site. |
| Ollama | Serving Gemma on your own machine, so the candle name never leaves it. |
| ElevenLabs | Both voices, designed in Studio: Poe Narrator (the lover, reading the poem) and Annabel Narrator (her whispers). The sea loop (Sound Effects) and the music (Music): "Tide Memory," "Mourning Light" and "Warm Return." Voice by ElevenLabs. |
| DigitalOcean | App Platform hosting for the live game. |
| kingdombythesea.tech | The project's home, a .tech domain claimed through Hacktoberfest. |
| Kittl (Nano Banana Pro) | Generating the Flash-style shore and ghost art. |
| The Met, fashion plate | Annabel's gown is based on Le Follet, April 1849 (the year the poem was published), from The Metropolitan Museum of Art's fashion plate collection. |
| Sentry | Tracing every call to Gemma: which model answered, how long it took, tokens in and out, and every time the ghost had to fall back to a prepared line. No prompts, replies or candle names are sent. |
| GitHub Codespaces | Building and testing in the cloud during the week. |
| Claude Code (Anthropic) | Coding assistant for the build. |
| Node.js + Express, HTML canvas | The game itself: no Flash, no game engine. |
The poem: "Annabel Lee" by Edgar Allan Poe (1849), public domain. Inspired by Día de los Muertos and the idea, as in Coco, that the dead stay with us while we remember them; and by Annabel Blackthorn in Cassandra Clare's Lady Midnight, which first led me to the poem.
Built by Samira Ray.
Archived on Zenodo: 10.5281/zenodo.23822351. GitHub's "Cite this repository" button gives the citation in APA or BibTeX.
MIT