Skip to content
Sift
Back to the overview

Every screen, and the claim it supports.

All of these are captured from the running app against the bundled demo corpus — nothing here is a mockup or a composite. Regenerate them yourself with pnpm screenshots.

0

native dependencies

SQLite is Node 24’s built-in node:sqlite

<10s

clean-clone install

measured, no compile step to fail

52

tests passing

behaviour, not snapshot values

<15ms

hybrid search

exact retrieval, not approximate

168KB

web bundle, gzipped

no component library

10.5KB

content script

type-only imports from core

01 · First run

The hardest state to design for: a tool whose entire value is a corpus, and there is no corpus yet.

1 screen
127.0.0.1:4471 — Sift
Three real choices, no tour

Three real choices, no tour

No modal carousel, no "let us show you around". Connect 13 curated public feeds, load a demo corpus to judge it before configuring anything, or install the extension. All three are reversible.

02 · Read and triage

Two hundred items should be a few minutes, not an afternoon.

4 screens
127.0.0.1:4471 — Sift
The inbox, ranked by signal

The inbox, ranked by signal

Virtualised list on the left, reader on the right. J/K moves, S saves, E archives, X multi-selects. Every triage action is optimistic with six seconds of undo, so the row moves the instant you press the key.

127.0.0.1:4471 — Sift
What a row actually tells you

What a row actually tells you

Score with a fill bar, source dot, author, age, the two most meaningful engagement counters for that platform, derived topics, and an echo count when other sources reported the same story. It degrades cleanly at narrow widths — topics drop first.

127.0.0.1:4471 — Sift
Press W: why is this a 61?

Press W: why is this a 61?

All six components with their live values and weights, plus ranked prose reasons. The breakdown is stored with the item, so this needs no recomputation. A ranking you cannot interrogate is a ranking you cannot trust.

127.0.0.1:4471 — Sift
Light theme, same system

Light theme, same system

One set of OKLCH tokens inverted, not a second stylesheet. Dark mode carries elevation with hairlines and an inner top highlight; light mode uses real shadows, because a drop shadow on near-black is invisible.

03 · Find anything

Four retrievers, fused by reciprocal rank. Chinese is a first-class citizen, not an afterthought.

2 screens
127.0.0.1:4471 — Sift
⌘K searches your library while you type

⌘K searches your library while you type

Live hybrid results inside the palette, so "I remember reading something about inference" is two keystrokes from being open. Semantic-only matches are badged, so you always know why something surfaced.

127.0.0.1:4471 — Sift
中文搜索 that actually returns results

中文搜索 that actually returns results

SQLite’s default tokeniser treats a whole Chinese sentence as one token, so most tools silently return nothing. Sift indexes character bigrams and turns queries into ordered bigram phrases — exact substring matching. 「怎么降低推理成本」 finds 「大模型推理成本优化实战」.

04 · Understand and synthesise

The part every aggregator skips: turning a pile of captures into something you can act on.

3 screens
127.0.0.1:4471 — Sift
Topic momentum, not topic volume

Topic momentum, not topic volume

"Which topics are big" is always the same few. This shows which are accelerating against the previous window, with smoothing so a fresh install does not claim 17× growth on three items. Plus source mix, the voices whose work you keep, and an entity cloud.

127.0.0.1:4471 — Sift
Ask, grounded strictly in your own corpus

Ask, grounded strictly in your own corpus

Citations arrive before the first token and link back to the item, so every claim is checkable against the passage the model was actually shown. If the answer is not in your library, it says so rather than filling the gap from memory.

127.0.0.1:4471 — Sift
Briefings with every claim traceable

Briefings with every claim traceable

Themed sections, bracketed citations resolving to real items, generated daily or on demand. Works with no API key at all — the template path clusters and assembles locally.

05 · Collect and share

Sources that need no key, plus an extension for the ones that need your own session.

4 screens
127.0.0.1:4471 — Sift
13 keyless connectors out of the box

13 keyless connectors out of the box

Hacker News, arXiv, GitHub, Hugging Face papers, Reddit and seven curated feeds — every one a public endpoint needing no signup. Per-source trust multiplies the final score, and each can be polled on demand.

The extension reads what your browser already fetched

A MAIN-world script observes the page’s own fetch and XHR responses. Nothing is re-requested, no credentials are touched, no scraping traffic is generated. Three host permissions, no <all_urls>, no tabs, no cookies.

127.0.0.1:4471 — Sift
Share cards rendered locally

Share cards rendered locally

SVG generated server-side with no headless browser and no canvas binding, rasterised to PNG in-page. Export also does Markdown with your highlights, JSON, CSV (BOM-prefixed so Excel opens Chinese correctly) and OPML.

127.0.0.1:4471 — Sift
The scoring weights are yours

The scoring weights are yours

Six sliders. Move one and the whole library rescores in the background, streaming progress. API keys are write-only — stored locally and never returned by any endpoint.

06 · The site itself

Same design tokens as the app, so the product and its page read as one thing.

Landing — above the fold
Landing — the scoring model explained

Ready to post

Copy, paste, ship.

Written to each platform's length rather than truncated to fit, in English and Chinese. Every number in them is measured and checkable from the repository.

X / Twitter EN ~270 chars
Built Sift — a local-first AI intelligence workstation.

Harvests from X, 小红书, HN, arXiv, GitHub. Scores every item on 6 explainable axes. Folds duplicates. Searches in English and Chinese.

Zero native deps. No account. No telemetry. One SQLite file.

github.com/micaho26/sift
X / Twitter 中文 ~250 字
做了个 Sift —— 本地优先的 AI 情报工作台。

从推特、小红书、HN、arXiv、GitHub 采集,六个可解释维度打分,自动折叠重复,中英文都能搜。

零原生依赖,不用注册,无遥测,全部数据就一个 SQLite 文件。

github.com/micaho26/sift
Hacker News EN title + first comment
Show HN: Sift – a local-first AI intelligence workstation

I got tired of following AI across six timelines in three languages, seeing the same launch reported twenty times, and having bookmarks I could never search again.

Sift collects from X, 小红书, Hacker News, arXiv, GitHub and RSS, then scores every item on six components — relevance, velocity, depth, novelty, authority, recency — and shows the full breakdown for any score. Press W and you see exactly why something is a 61.

Two things I think are genuinely interesting:

Deduplication is two-tier. SimHash with LSH banding catches verbatim reposts. But measured on my own corpus, a real repost sits at Hamming 22 while unrelated items sit at 27–31 — far too narrow to threshold. Cosine separates the same pair 0.60 vs 0.29, so tier two uses embeddings, gated on a shared named entity and a 72-hour window.

Chinese search works. SQLite's unicode61 tokeniser treats a whole Chinese sentence as one token, so most tools silently return nothing for Chinese queries. Sift indexes a parallel column of character bigrams and turns queries into ordered bigram phrases, which is exact substring matching.

Zero native dependencies — SQLite is Node 24's built-in node:sqlite, so install cannot fail on node-gyp. The vector index is a hand-written flat Float32Array scan doing exact KNN; at personal-corpus scale that beats an ANN index on every axis that matters.

No account, no telemetry, no API key required. MIT.
Reddit — r/selfhosted, r/LocalLLaMA EN post
Sift — local-first AI news workstation, zero native deps, works offline

Everything lives in one SQLite file on your machine. No account, no telemetry, and no API key required — semantic search runs on a built-in hashing embedder, and summaries fall back to local extractive summarisation. Add Anthropic/OpenAI/Ollama only if you want written prose.

Collects from Hacker News, arXiv, GitHub, Hugging Face papers, Reddit and RSS with no keys, plus a browser extension for X and 小红书 that reads the JSON your browser already received rather than re-requesting anything.

Scores every item on six explainable axes and shows the full breakdown. Deduplicates the twenty accounts that all reported one launch. Searches in English and Chinese.

git clone, pnpm install, pnpm dev. Install takes under 10 seconds because there is nothing to compile.

github.com/micaho26/sift
小红书 / 即刻 中文 短文
每天追 AI 太累了:六个时间线、三种语言、同一个发布被转二十遍,收藏夹存了就再也搜不到。

所以做了 Sift,一个本地跑的 AI 情报工作台:

· 从推特、小红书、HN、arXiv、GitHub 自动采集
· 每条内容六个维度打分(相关度/传播速度/信息密度/新颖度/作者权重/时效),按 W 能看到每个维度的具体数值和原因
· 自动折叠重复报道,保留一条 + 回声数
· 中英文都能搜(大多数工具中文搜索直接返回空,因为 SQLite 默认分词把整句中文当一个词)
· 全部数据一个 SQLite 文件,不用注册,无遥测,不填 API key 也能用

零原生依赖,clone 下来 install 不到 10 秒,一条命令启动。MIT 开源。

github.com/micaho26/sift

Brand assets

Take what you need.

The palette is OKLCH: accent oklch(64% 0.18 285), background oklch(11% 0.012 285). Type is Inter with JetBrains Mono for anything numeric. All screenshots are 2× retina, captured at 1600×1000 from the running app. Everything here is MIT — reuse it freely.