UpveraTechnology
UTR-26-09Research noteLive

Upvera Prism: learning only from people

Upvera Prism is the recommendation engine behind Discover and Home that learns what a person cares about only from what people do on Upvera, says why each post appears and can be reset by that person at any time.

Published
Updated
Reading
6 min
Plain text
/research/prism-learning-only-from-people.md

#What Prism is for

Upvera Prism decides the order in which founders' daily progress reaches each person. It ranks Discover, where you meet startups you do not follow yet, and Home, where posts from people and startups you follow come first. On the site it is one line: "Tuned to you by Prism."

Prism has ranked posts with an explicit, readable model since May 2026, and both surfaces run on it today.

Every ranked post carries the reasons it was chosen. The card shows at most one of them, such as "Similar to what you just viewed", "New and rising" or "Outside your routine", and a "Why am I seeing this?" panel lists them. This note covers the other half: what Prism refuses to learn, and how it holds itself in check.

#Signals, weighed on the server

Prism learns from signals: a Prime or a Pass, a follow, a save, time spent reading, a skip, a "Not interested". Each signal type has one entry in a dictionary on the server, holding its weight, the kinds of target it may point at, and how strongly it moves the long-term and session models. Clients only report what happened; a weight sent by an app is ignored. An unknown signal type or a target that does not fit is dropped and counted. Signals reach the learning tables only through server paths, never by a direct write from the app, and the server stamps the time.

From those signals Prism keeps two pictures of a person:

  • A long-term interest model: a position in a shared meaning space plus affinities for categories, topics, founders and startups. It moves with positive signals and is recomputed on a schedule.
  • A session pulse: what you are looking at right now, with a 30-minute half-life. While a session is active it gets a larger say, so a morning spent on developer tools shows up on the next page, not tomorrow.

Negative learning is kept narrow on purpose. A Pass on one weak post does not make Prism hold back everything that resembles it; only an explicit "Not interested" does that. A post counts as seen only after it has actually been on screen.

One input is ruled out entirely. Follower count is never part of any score, gate or pool decision.

#Many sources, one ranking

Several candidate generators run in parallel, each from a different angle: posts close to your interest model or your current session, what people you follow have welcomed, what is rising now, new posts on their first steps, topics adjacent to yours.

The lists are merged, and Reciprocal Rank Fusion measures how much they agree. A post that several generators place high earns more than a post that only one generator likes. It reads ranks, not raw scores, so generators that score differently can still be compared.

Each candidate then gets a multi-objective score. Prism estimates the chance that you give it a Prime, read it, comment on it, or skip it, and combines them. A short launch note and a long build log are not held to the same measure.

Two learning loops tune this per person:

  • Generator weights. For each person, every generator keeps a running record of how often what it served was welcomed. A Beta-posterior bandit in the spirit of Thompson sampling shifts weight toward the generators that work for that person, within fixed bounds, and leans on the platform baseline while evidence is thin.
  • Position-bias correction. A post in the first slot gets attention because it is first. Where a slot has enough data, each outcome is reweighted by how much attention that slot draws on its own, so the top slot's advantage is not mistaken for quality.

#Built to widen, not narrow

A ranking that only follows the strongest signal ends in a loop. Prism re-ranks the final list with rules that push the other way:

  • Quotas per category, per startup and per kind of post, so one theme cannot fill a page.
  • MMR-style diversity. A candidate too close in meaning to the posts just before it is skipped.
  • An echo-chamber guard. Prism measures how concentrated a person's interests are and tightens the category quota when they are narrow, loosening it as they widen.
  • Fatigue. The same reason cannot lead too many cards in a row, and repeated exposure to the same founder or topic is discounted. It is softened for founders you clearly engage with.
  • Exploration. Some candidates come from areas you have not touched yet, and they are labelled as such: "Outside your routine" or "Exploring a new space".

Prism also keeps a set of plain promises:

  • You are never recommended to yourself. Your own posts never appear in Discover, and startup suggestions leave out the startups you own or are on the team of, removed on the server before any limit is applied.
  • "Not interested" on a post stays until you undo it. "Less of this" on a founder, a startup or a topic fades back over time.
  • A post you have seen in the last 72 hours is left out. When new posts run out, Prism may fill with posts you saw earlier, and it says so: a divider marks where the new posts end, and a returning post carries "You've seen this before".

#A fair start for new posts and new people

A new post should not need an audience to earn one. New posts get a reserved place in front of a small first audience beyond the author's followers. After that, a post rises by the rate at which people respond well, not by raw totals and never by follower count. A post that does not clear the next step is not penalized; it goes back to the normal race.

A new person should not see an empty screen. The interests picked at sign-up seed the first page, and a short first round ("Do these interest you?") tunes Discover on the spot. In the first days, exploration counts for more and generators that need a deep history count for less. When personal candidates run short, the feed falls back through wider pools; a blank page appears only when there is truly nothing to show.

#What Prism does not learn from

Bots. Accounts marked as bots never enter learning. Their actions are not written into anyone's session pulse or interest model, and their posts never rank ahead of a person's post. This is a permanent rule of the engine, not a setting.

Reply loops. A signal such as "the founder replied to your comment" was considered and left out. A reply loop would reward volume over substance.

Language models on the critical path. Prism is separate from Upi, Upvera's AI assistant. Where Prism uses a language model at all, for example to suggest an adjacent topic, the call sits off the critical path and is fail-soft: if it is unavailable, ranking behaves the same.

An unproven model. A learned ranker is trained in the background and kept in shadow: its scores are recorded for comparison and never enter the order a person sees. Until it clearly beats the explicit model on independent evidence, the live ranker is the explicit model described above, and every reason it uses can be named.

Your past, once you reset it. Settings, Your interests shows what Prism has learned, by category and topic, and lets you ask for More, Less or Mute. Reset Discover clears what Prism has learned about you: your interest model, your session pulse, your signal history and your More, Less and Mute choices. Discover then starts getting to know you again.

#References