Skip to content

Changelog

Newest first.

Saved-link replies now carry tap buttons (Star / Share / Reading / Read) handled via Telegram callback_query updates — organize a link without typing its id.

  • /organize clusters links by embedding similarity, names each group with the model (e.g. password-vaults, dev-interviews), and assigns the name to uncollected members.
  • /dupes lists near-duplicate / overlapping links for review.

Enrichment now reads the link’s full content — the article body (via HTMLRewriter) and the GitHub README — not just metadata. The model also produces a multi-sentence details synopsis, and summaries/tags/key-points are grounded in real content.

Ask a question and get a short answer synthesized from your most relevant saved links, with citations ([#5]).

A Workers AI embedding model (@cf/baai/bge-base-en-v1.5) + a Vectorize index make /find hybrid: semantic matches (by meaning) ranked first, keyword FTS filling in. A query-instruction prefix and a score threshold keep results precise.

A private web dashboard at links.<domain>/dashboard behind Cloudflare Access — browse and manage every link by clicking (status, star, share, collection, reminder, and delete), with a second Worker-side JWT check as defense in depth.

  • /export md|csv|json sends your whole library to the chat as a file.
  • /share <id> publishes a link to List, a public page at /list.

Three tiers of new columns: auto-captured (domain, image, site_name, author, published_at, GitHub stars/language/license), AI-extracted (category, key_points), and user-set workflow state (status, favorite, collection, remind_at) with commands to set them and filter lists.

Replaced the original local Python bot with a single Cloudflare Worker.

  • Telegram webhook entry (no more long-polling); a Worker that wakes per request and validates a secret header.
  • Cloudflare D1 (SQLite + FTS5) for storage, via checked-in migrations. Existing links seeded across from the old local database.
  • Workers AI (@cf/google/gemma-4-26b-a4b-it, JSON mode) for summaries and tags, replacing local Ollama — with graceful degradation when the model is unavailable.
  • HTMLRewriter for OpenGraph/HTML scraping, replacing BeautifulSoup.
  • Single-user lock via ALLOWED_CHAT_ID in addition to the webhook secret.
  • Fixes: multi-word tags normalized to single tokens; reliable insert detection via INSERT OR IGNORE … RETURNING id; Workers AI output read from the chat-completions shape.