Snapshot
Stash turns the Instagram posts I save into notes that my AI assistant finds on its own. I share a reel from my phone, and a few minutes later it is a searchable Markdown note: what was said, what was on each slide, why I saved it. When I start work on something related, Claude brings it up without being asked.
I built it for myself and use it every day. It is open source and runs on free tiers.
Problem
Saving a post is one tap, and that part already works. What fails is everything after.
- A save keeps a link, not the content. You cannot search what a reel said, so you never sort it.
- Collections do not help. They are folders for things you still cannot search.
- Nothing brings it back. The post that would help today is buried under three hundred others, and you have forgotten it exists.
So this was never a bookmarking problem. The job was to turn every save into text, and then make recall automatic.
Approach
Capture stays one tap. An iOS Shortcut in the share sheet sends the post to a Cloudflare Worker that holds a queue in D1. The phone only talks to Cloudflare, so capture works on mobile data, in a café, or with the laptop shut.
The Mac drains the queue. A small daemon picks up new posts, downloads them, and turns them into notes:
- Reels are transcribed with Whisper, and a few selected frames are read for on-screen text.
- Carousels are read slide by slide, in order. Mixed carousels also transcribe each video slide.
- A vision model writes a short structured note: title, summary, topics, and the reason I saved it.
Markdown is the source of truth. Every note is a plain file with YAML frontmatter. The search index (SQLite full-text search plus vectors) is derived from those files and can be rebuilt from disk at any time, so nothing important lives only inside a database.
Recall is the point. An MCP server gives Claude tools to search notes, open one, list topics and see recent saves. A Claude Code skill makes it check Stash when I start related work, not only when I remember to ask.
Decisions that made it trustworthy
- "Queued", not "Saved". The Shortcut only knows the post reached the queue, so that is what it says. Confirmation that a note exists comes separately, once it is actually filed.
- No Instagram login by default. Public posts download fine without a session. Handing an always-running worker your browser cookies is a much bigger risk than this job needs, so cookies are opt-in, cheapest scope first.
- A doctor command.
stash doctornames anything missing in the setup and the exact command to fix it, because a personal tool that silently breaks gets abandoned. - $0 a month, no card on file. Workers and D1 free tiers cover it. The one product that would need a payment method is left out on purpose.
What it shows about client work
The same pattern runs through my automation work: capture has to be effortless, everything has to become structured text, and the system should bring the right thing back at the right moment instead of waiting to be searched.
Tech
- Python daemon and CLI, Whisper transcription, a vision model for posts and frames
- Cloudflare Workers + D1 for the capture queue
- iOS Shortcut built with Cherri
- SQLite FTS5 + vector search over a Markdown vault
- MCP server and a Claude Code skill for recall