Projects

Backscroll

Agent that scrolls your feeds

Links
AuthorSurya Dantuluri
Published
Views2

Backscroll is an LLM-powered feed compiler. It scrapes ~2,600 tweets per day from your timeline, compresses them into a 250k token prompt alongside your likes and bookmarks as taste signal, and uses a model to rank and surface what actually matters.

The core idea: your feed algorithm should be a function you own, not a black box optimizing for engagement. Backscroll treats feed curation as a compilation step — ingest raw candidates, apply a rubric (what to value) and a strategy (how to rank), evaluate the result, then publish a durable feed session you can scroll through.

How it works

The system runs on Cloudflare Workers with Durable Objects for real-time state. A `RoamBrowser` Durable Object acts as the single-writer coordinator — it owns the scraper, the feed compiler, and the serving layer.

The feed compiler loop: 1. **Scrape** — pull tweets from timeline, following, bookmarks, and discovery tabs via browser automation 2. **Rank** — build a candidate pool, score by features (recency, engagement, author affinity), compile a session 3. **Evaluate** — run diagnostics on the compiled feed before publishing 4. **Publish** — persist the feed session as a serving artifact so the UI never waits on a model call 5. **Iterate** — "I didn't like this feed" creates a child session that excludes visible tweets and re-ranks

Two feed modes: **For You** is feature-only and fast (no tweet text in the ranking prompt). **Curated** is prompt-driven — you can say "make a feed about RL environments" and it inspects content to select.

![Backscroll Twitter frontend](/projects/backscroll-twitter.png)

Frontends

Backscroll has three frontends, each a different lens on the same underlying feed sessions:

**Twitter-style** — the default. Looks and feels like X with For You / Following tabs, a composer bar for feed directives ("more from @kohjingyu"), infinite scroll, and inline media. The directive bar lets you steer the feed mid-session.

![Feed directive](/projects/backscroll-directive.png)

**Hacker News-style** — a ranked list view. Same feed data, presented as a classic link aggregator. Has a "past" page where you can browse any historical day and see the raw stats: 2,660 tweets that day, 254,497 tokens, reasoning mode high.

![Backscroll News](/projects/backscroll-hn.png)

![Past day view showing token budget](/projects/backscroll-past.png)

**Telegram bot** — push-based delivery. Backscroll sends curated thread summaries to a Telegram channel with "More like this" / "Less of this" buttons for inline feedback that updates the rubric.

![Telegram feedback loop](/projects/backscroll-telegram.png)

Architecture

Built with the Cloudflare Agents SDK. Key pieces:

- **Feed Compiler** (`feed-compiler.ts`) — domain API for the entire feed lifecycle: `feedStats → feedStartRun → feedCandidates → feedEval → feedPublish` - **Feed Ranker** (`feed-ranker.ts`) — deterministic scoring and composition. `buildCandidatePool`, `compileForYouFeed`, `evaluateFeed`, `diagnoseBadFeed` - **Rubric + Strategy** — rubric defines *what* to value (quality signals, topic preferences). Strategy defines *how* to rank (LLM-generated SQL queries against the candidate pool) - **Durable Sessions** — every feed compilation produces a persistent session with items, scores, and metadata. The UI serves from the latest session, never from a live model call

The design principle is borrowed from Cursor's harness pattern: durable state lives outside the prompt, tools are narrow and typed, every run produces an artifact, and you evaluate before you publish.

![Backscroll News alternate view](/projects/backscroll-hn2.png)