mechanical keyboard newswire

daily mechanical keyboards, firmware & tools

hn

Hacker News

Schedule
Daily, 5:02 PT
Model
Local Qwen3.6 (35B-a3b) on Ollama

Searches the Hacker News Algolia API for stories matching a curated list of mechanical-keyboard / firmware / tooling terms (mechanical keyboard, keyboard, keycap, cherry mx, QMK, ZMK, KMK, split keyboard, Karabiner, Raycast, kanata, key remapping, keyboard firmware) over the last 24h. Local Qwen3.6 filters out false positives (piano keyboards, generic 'shortcut' noise) using a strict prompt with worked examples.

  • https://hn.algolia.com/api/v1/search
reddit

Reddit

Schedule
Daily, 5:03 PT
Model
Local Qwen3.6 (35B-a3b) on Ollama

Scans r/olkb, r/zmk, r/MechanicalKeyboards, r/ErgoMechKeyboards, r/KeyboardLayouts for new posts in the last 24h. Also runs Reddit search for kanata-related queries (jtroo kanata, key remapping software). Filters by upvotes and comment count to skip low-engagement posts; always includes kanata-tagged items regardless of engagement.

  • https://www.reddit.com/r/<sub>/new/.json
  • https://www.reddit.com/search.json?q=<query>
email

Gmail (Keyboard label)

Schedule
Daily, 5:04 PT
Model
Local Qwen3.6 (35B-a3b) on Ollama

Pulls messages from the personal Gmail "Keyboard" label (and sublabels like Keyboard/Tech) from the last 24h. Reddit notification emails are filtered out to avoid duplicating the Reddit pipeline. For each remaining email, Qwen extracts the primary article link, a one-line takeaway, and a clean title from the body — turning vendor newsletters and indie keyboard blogs into wire items.

  • gog gmail search -a malpern@gmail.com -j 'label:Keyboard newer_than:1d'
kbdnews

KBD.news

Schedule
Daily, 5:05 PT
Model
No LLM — hand-curated upstream

Parses Tamás Dövényi-Nagy's KBD.news RSS feed — a hand-curated weekly e-zine of mechanical-keyboard and DIY-ergo posts. Strict 24h window, skips the "Behind the scenes" weekly meta-posts (those summarize content we'd already ingest individually). Since Tamás does the editorial filtering upstream, no LLM pass is needed — items go straight to tag → fetch-image → append. Conditional GET via If-Modified-Since means quiet days short-circuit on 304.

  • https://kbd.news/rss.xml
geekhack

Geekhack (Group Buys + Interest Checks)

Schedule
Daily, 5:06 PT
Model
No LLM — direct RSS + thread-page scrape

Pulls boards 70 (Group Buys & Preorders) and 132 (Interest Checks) from Geekhack's RSS, dedupes per thread via data/geekhack_seen.json. For each newly-seen thread, scrapes the thread root page once to extract views, replies, OP body, multi-image carousel, vendor product URLs, and any back-link to a related thread (original IC / earlier GB). Items are quarantined from the main news feed and rendered on /groupbuys/. Polite: 1s throttle between thread fetches, conditional GET on the RSS (though Geekhack's server doesn't honor it yet).

  • https://geekhack.org/index.php?action=.xml;type=rss;board=70
  • https://geekhack.org/index.php?action=.xml;type=rss;board=132
  • https://geekhack.org/index.php?topic=<id>.0 (per-thread scrape)
shopify-meta

Shopify vendor metadata refresh

Schedule
Daily, after group-buys
Model
No LLM — JSON-only fetch

Walks every vendor product URL in the corpus (extracted from Geekhack OP hyperlinks) and fetches the Shopify .js endpoint to refresh price + availability. Per-host throttle keeps us under vendor rate limits. Currency falls back to a hand-curated host map since .js doesn't expose price_currency. Per-link refresh skipped when metadata is < 6h old.

  • https://<vendor>/products/<slug>.js