Feed algorithm

How Mutle decides
what reaches your
feed.

Mutle's feed is graph-aware, privacy-aware, and now telemetry-backed. It starts with trust and visibility, builds a richer candidate set, reranks it with explicit signals, and keeps sponsored delivery additive instead of letting ads distort the core graph.

Current posture

1

Heuristic feed is the live production fallback.

2

Feed telemetry writes to Firestore and syncs into BigQuery.

3

Daily cloud training compares ML against the heuristic baseline.

4

ML only becomes eligible if the registry approves it and the gate is enabled.

Candidate mix

Network recent32%
Graph recent18%
Author affinity16%
Topic affinity12%
Intent affinity9%
Exploration7%
Graph trending6%

Signal buckets

Telemetry loop

1. Eligibility and privacy first

Posts are filtered through visibility, block status, moderation state, and trust-distance rules before they ever enter ranking.

2. Multi-pool candidate recall

For You pulls from network recent, graph recent, author affinity, topic affinity, intent affinity, graph trending, and exploration pools instead of relying on one blunt list.

3. Weighted reranking

Candidates are scored with graph trust, personalization, engagement velocity, freshness, quality, and boost signals. Diversity is applied after ranking, not by corrupting raw score order.

4. Sponsored insertion stays additive

Ads and marketing placements are inserted after ranking and diversity. They do not rewrite trust paths or break the underlying feed structure.

What gets written

Each feed response logs one feed request record with embedded impression snapshots. Downstream likes, comments, reposts, profile clicks, and dwell events still join back through requestId.

Why you still see writes

Yes, browsing the feed still causes writes, but the highest-volume path was compressed so one feed load no longer explodes into one Firestore doc per impression.

Why it does not break marketing

Marketing campaigns still enter as sponsored items after the main ranking pass. The new telemetry and ML gate do not remove sponsored delivery or profile boosts.

Full explanation

Mutle does not start by asking "what is globally popular?" It starts by asking whether a post is even eligible for you to see. That means audience controls, moderation state, block relationships, and graph degree are handled before ranking begins.

Once a post is visible, the feed does not rely on a single source of candidates. The For You section deliberately mixes fresh network posts, graph-recent posts, authors you engage with, topics you lean toward, intents that matter to you, high-signal trending items, and a small exploration pool so the feed does not become narrow too quickly.

Ranking itself is explicit. Trust-path signals, personalization signals, engagement velocity, freshness, quality, and boosts are all scored directly. Diversity is then applied after ranking so the feed tries to avoid repetitive author runs without collapsing into empty slots.

Sponsored posts and marketing boosts still work. They are inserted after the feed logic, not instead of it. That means the marketing system influences placement without corrupting the underlying trust graph or bypassing privacy rules.

The system now writes telemetry when feed requests are served and when downstream actions happen. That is why you notice Firestore activity while simply browsing the feed. This is normal. The cost-heavy part was tightened so request-level snapshots feed BigQuery export instead of creating a separate Firestore impression document for every rendered post.

The ML layer is deliberately gated. Daily cloud training can compare a global model against the heuristic baseline, but the live feed only becomes eligible for model reranking if the model is approved, enough training data exists, and the scorer service is available. If any of those conditions fail, Mutle falls back to the existing heuristic feed immediately.