A native macOS reader for NYT, Substack and whatever blogs you follow — grouped by topic rather than by source, with one keystroke to file an article into Notion.
Seventeen feeds produce one list of sources, which tells you nothing about what you actually want to read. Quill folds each publisher's own category tags into a canonical topic set — AI, Books, Politics, Health — and groups by that instead. Sources are still there, just demoted to a collapsible section.
One NYT feed alone ships over 150 distinct category strings, down to "Death Row Records". Those are matched with word boundaries against a rule set and ranked, with the headline used only as a fallback when a feed publishes no categories at all. Your own hand-applied tags always win.
When a feed carries only a stub, Quill loads the publisher's page in an off-screen WebKit view and runs a compact Readability pass over the live DOM — real parsing, not regular expressions over raw HTML. Lazy-loaded images are promoted, relative URLs resolved, and the feed body kept as a fallback.
No required schema. Quill reads your database's own properties and matches them by name and type — title, url, author, date, summary, tags, status — filling what exists and ignoring the rest. It writes to exactly one summary field and never touches one you've reserved for AI-generated text.
git clone git@github.com:antass/quill.git cd quill ./build.sh
Command Line Tools are enough — no Xcode. build.sh compiles with
swiftc, assembles the .app bundle by hand, ad-hoc signs it
and installs to /Applications.
./add-notion-token.sh
Prompts for your integration token with the input hidden, hands it to Quill, which stores it in the macOS Keychain and deletes the temporary file. The token never sits on disk in plain text.
⋯ →
Connections → add your integration. Without that, Notion hides every database
from the token and Quill will show an empty list.
| Refresh all feeds | ⌘R |
| Add a feed | ⌘N |
| Save to Notion | ⇧⌘S |
| Add a tag | ⌘T |
| Open in browser | ⇧⌘O |
| Star / unstar | ⌘L |
| Toggle read | ⌘U |
| Mark all read | ⇧⌘U |
NYT returns an empty bot-challenge page to an embedded browser, so full text can't be pulled even with a subscription. Quill ships a sign-in window that shares its cookie jar, which may clear the challenge — but this is unverified. NYT articles otherwise keep their RSS summary and open in your own browser.
Personal essays genuinely resist classification, and older articles stored before category parsing existed have none to work from. That share shrinks on its own as feeds refresh and backfill. Everything else goes in an Untagged bucket to tag by hand.