This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 4.
What I Built
Dead Letter Office is a local reading room for twelve fictional letters from Morrow Quay, October 1924.
A train did not leave. A voice keeps repeating in an empty room. One witness says the lighthouse was lit; another says it was dark. A repair order might explain something—or might not.
You can ask about these loose ends. The app finds related passages and quotes them with links to the full letters. It does not write a reply in a missing person's voice. It does not invent the letter that would finish the story.
That is my take on Ghost in the Machine: the machine helps us read what remains, without pretending the gaps have spoken.
Demo
The prepared 78-second demo shows actual browser interactions: searching, opening a citation, inspecting conflicting accounts, and reading the letters. The repository README includes an overview GIF and four short workflow clips.
Try these questions:
- Why did the night train never leave?
- Was the lighthouse burning that night?
- Where was the little tin bird hidden?
- Who owned the mitten on the lighthouse stairs?
The last question matters. A strong match can be a paragraph that says nobody knows.
Code
Source code, setup, and test results
The app and original fictional archive are MIT-licensed. Setup needs Python, one pinned model download, and a browser. No account, API key, paid inference service, or GPU.
How I Built It
The model is the Apache-2.0 all-MiniLM-L6-v2, running through ONNX Runtime on the CPU. It turns the question and each passage—with its title and byline—into 384-dimensional vectors. Ranking combines semantic similarity with TF-IDF. The output is assembled from exact quotations, not generated prose.
The most useful bug was a false abstention. The model ranked a relevant paraphrase near the top, then my cosine cutoff threw it away. Comparing the ranked list with the passages actually shown exposed the problem. The final version selects using the hybrid rank instead.
On a fresh, independently authored smoke set, all twelve answerable questions returned their required evidence. That is a small fictional test, not general accuracy. Three of four difficult out-of-domain questions still received related but inapplicable historical excerpts. The interface cautions that related text does not prove an answer exists; these were not useful answers. The full results, earlier failures, and comparison against lexical search are in the repository.
Contradictory accounts use explicit editorial links. The model does not claim to discover or resolve them. Similarity is displayed as similarity, never as a probability that a witness is right.
Why Does Open Innovation Matter?
After setup, the letters and model work without an internet connection. Searching does not send the archive to another service, and a provider disappearing does not take the reading room with it.
The model, source text, ranking weights, selection rules, and failed tests are inspectable. Someone else can replace the model and run the same questions—including the ones this version misses.
For an archive, that matters more than making the machine sound convincing.
Built and written with AI assistance under my review.

Top comments (0)