{"slug": "rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault", "title": "Rest in Notes: A Local AI That Haunts You Back Into Your Own Vault", "summary": "A developer built Haunted Vault, an open-source tool that scans a folder of Markdown notes (including Obsidian vaults), maps each note as a node and each [[wiki link]] as an edge, and marks notes untouched for 14 or more days as \"ghosts.\" A local Ollama model (gemma3:1b) generates epitaphs and a \"haunting report\" for neglected notes, while open `- [ ]` todos age from Recent to Old to Abandoned. The stack is Flask, Ollama, D3.js and vanilla JS/CSS, with MongoDB Atlas as an optional store; the developer chose local inference so private notes never leave the machine.", "body_md": "*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)*\n\nEvery note-taker has a graveyard. Mine is a folder of Markdown files I swore I'd come back to: half-finished lecture notes, a \"project ideas\" list from August, a todo that has said `- [ ] revise` since July.\n\n**Haunted Vault** points at a folder of Markdown notes (an Obsidian vault works) and draws that graveyard. Each note is a node, each `[[wiki link]]` is an edge, and any note untouched for 14+ days becomes a **ghost**.\n\nClick a ghost and a local model gives it a tombstone:\n\nThere's also a **haunting report**, a short, spooky-but-kind summary of your most neglected notes. Your open `- [ ]` tasks age from Recent to Old to Abandoned, so forgotten todos turn into ghosts too.\n\nFor the theme, I read \"ghost in the machine\" literally and emotionally. The ghosts are the parts of your own thinking that your tools quietly keep and never surface. The AI's job isn't to scare you. It's to make you feel a little guilty, then show you the way back in.\n\nNotes you stop touching turn into ghosts. A local AI writes their epitaphs and tells you how to bring them back.\n\nLive demo: [https://hiyalukka.github.io/Haunted-Vault/](https://hiyalukka.github.io/Haunted-Vault/)\n\nBuilt for the **DEV x Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine**.\n\nPoint it at a folder of Markdown notes (an Obsidian vault works). It scans them and draws a graveyard map:\n\n`[[wiki links]]`. Notes untouched for 14+ days become ghosts.`- [ ]` todos from your notes. Tasks also age from Recent to Old to Abandoned, so forgotten ones turn into ghosts too.\n**Stack:** Flask, Ollama running `gemma3:1b` (open-weight), D3.js, vanilla JS/CSS, and MongoDB Atlas as an *optional* store.\n\nThe pipeline is deliberately small:\n\n`scanner.py``[[links]]` and `ghost.py`` app.py``static/`\nTwo design choices mattered most:\n\n`tasks.json`.` GHOST_MODEL` to any model Ollama can run.\n\n```\nollama pull gemma3:1b\npython make_demo.py   # generates a demo vault with old and new notes\npython app.py\n```\n\nA notes vault is about the most private thing you own: half-formed ideas, personal reflections, unfinished plans. A tool that asks an AI to comment on your abandoned notes is only usable if the notes never leave your machine.\n\nThat's what a closed API wouldn't give me. With an open-weight model on local inference there's no API key, no per-call cost, no rate limit, and it works offline. I can scan a whole vault without worrying what each call costs or who sees the text. And because the model is just a setting, anyone can swap in a bigger or smaller one that fits their hardware.\n\nA 1B model is small, and I'd rather be honest about that. Its epitaphs can be cheesy, which suits a graveyard. For a short, structured, creative output like this, a small local model is enough, and the privacy is worth more than a bigger model's polish.\n\nMost productivity tools are cheerful about your unfinished work. They show a progress bar, a streak, a gentle \"you have 47 unread items.\" Nobody tells you the truth, which is that some of those notes were once the most exciting thing you'd thought of all week.\n\nThat's the feeling I built this around. A note isn't clutter. It's a version of you who cared about something enough to write it down. When you stop opening it, it doesn't disappear. It just goes quiet, and the machine keeps holding it.\n\nSo I made the machine speak for the dead, kindly. The epitaph gives the note back its dignity: *this was an idea about something you wanted to understand.* The cause of death is honest without being cruel: most notes don't die because the idea was bad, they die because life got busy. And the resurrection ritual is deliberately small, fifteen minutes and one step, because the only way to bring a ghost back is to walk into the room.\n\nIf someone opens the graveyard, sees a cluster of grey nodes, and thinks *oh, I forgot about that one*, and then actually opens it, the project did its job. It's a ghost story where the ghost isn't there to haunt you. It's there to be remembered.\n\nBest use of Gemma\n\nBest use of MongoDB", "url": "https://wpnews.pro/news/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault", "canonical_source": "https://dev.to/hiya_24477/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault-1nlj", "published_at": "2026-10-31 09:14:38+00:00", "updated_at": "2026-10-31 09:19:45.335008+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-tools", "large-language-models", "generative-ai"], "entities": ["Haunted Vault", "Ollama", "gemma3:1b", "Flask", "D3.js", "MongoDB Atlas", "Obsidian", "DEV x Hacktoberfest Open-Source AI Challenge"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault", "markdown": "https://wpnews.pro/news/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault.md", "text": "https://wpnews.pro/news/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault.txt", "jsonld": "https://wpnews.pro/news/rest-in-notes-a-local-ai-that-haunts-you-back-into-your-own-vault.jsonld"}}