# Ghostlight: finding the memory when you have forgotten the words

> Source: <https://dev.to/eling/ghostlight-finding-the-memory-when-you-have-forgotten-the-words-37jn>
> Published: 2026-10-28 09:05:22+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine](https://dev.to/challenges/hacktoberfest-week4-2026-10-26).*

A note can survive for years and still be hard to find. You remember that somebody helped when you were stuck, but the note itself says “a teammate sat with me after dinner.” A keyword search for “help” may not connect those two descriptions.

Ghostlight is a small browser app for searching fragments by meaning. Add a short note, describe what you remember, and the app returns up to three passages that seem related. The included six examples are fictional; they are there to let anyone try the interaction without contributing private memories.

The theme is a ghost in the archive: an idea or moment that has not disappeared, but is hard to reach. Ghostlight is a lantern, not a storyteller. It retrieves the original words instead of inventing a remembered event.

Live demo: [https://j-m1s.github.io/ghostlight-hacktoberfest-2026/](https://j-m1s.github.io/ghostlight-hacktoberfest-2026/)

The first search downloads the open model, approximately 23 MB, plus its runtime and tokenizer. Type “someone helped solve a stubborn computer bug late at night.” In a local browser test, the fictional “Midnight debugging” fragment ranked first with a cosine similarity of 0.48. That one example is a demonstration, not an accuracy benchmark.

[https://github.com/J-M1S/ghostlight-hacktoberfest-2026](https://github.com/J-M1S/ghostlight-hacktoberfest-2026)

The app was started on October 28, within this challenge window. Its original code is available under the MIT license. Third-party dependencies and the model retain their own licenses.

The app splits notes into overlapping passages. A Web Worker embeds those passages and the query with [Xenova/all-MiniLM-L6-v2](https://huggingface.co/Xenova/all-MiniLM-L6-v2), a quantized open-weight model, using [Transformers.js](https://huggingface.co/docs/transformers.js). The vectors are normalized; a dot product ranks the nearest passages. The interface shows at most one result per note, and the score is a similarity value rather than a probability.

The archive is kept in the current browser's local storage and can be exported or imported as JSON. A worker keeps the heavy computation off the main UI thread. The model downloads on first use, and passages are processed in small batches rather than as one enormous batch.

OpenAI Codex designed and implemented the prototype and ran the browser tests. GitHub Copilot Student reviewed the worker code. Its review surfaced a possible vector-cache race if requests overlap, plus missing input checks and cache reset on failure; the implementation was updated accordingly. No personal archive was shared with Copilot.

The model runs locally in the browser, so this application does not send the note or query text to a hosted inference service. Using an open model also makes it possible to inspect and replace the model or runtime. It is not a promise of perfect privacy or offline operation: the site, fonts, library, and model files are downloaded from third parties that can observe normal network information, and browser data can be cleared or read by someone with access to the device. Export a backup and avoid sensitive material on a shared computer.

The model works best in English. A similarity ranking can be wrong, especially with ambiguous or long notes. This is a small experiment, not a historical record or a memory diagnosis tool. Its most useful quality is that it shows the source passage, so a person can decide whether the connection is real.
