ness.cityPost

PageRank

Map your ring.

Name the people closest to you in doubling rings. One. Two more. Four more. Eight more. Sixteen more. Thirty-two more. Each ring is half your last one in importance and twice the size.

R1Closest0/1
R2Inner ring0/2
R3Close0/4
R4Regular0/8
R5Network0/16
R6Acquainted0/32

Round 1 · Closest

Name the one person you'd take a bullet for.

0 of 1 added in this ring.

Pick from the directory or type any name. Free-text still works; the directory just makes it faster.

Your ring, drawn

YOU
youR1 (0/1)R2 (0/2)R3 (0/4)R4 (0/8)R5 (0/16)R6 (0/32)

Step 2 · Submit your ring

Add your ring to the live graph.

Your individual list stays private. Only the aggregate leaderboard is public. Submitting replaces any previous ring you sent under the same handle.

Most-named citizens · the Facemash analog

Who the city named.

Live ranking from citizens who have submitted their rings. Names weighted by ring depth: R1 counts 6, R2 counts 5, down to R6 counts 1. Recomputed on every submit.

Loading the live graph...

How the math works

PageRank in one paragraph.

Brin and Page, two Stanford grad students, wrote PageRank in 1996 to rank web pages by importance. Their insight: a page is important not because it links to many things, but because many important things link to it. The same trick works on any directed graph, including a graph of who-named-whom in a small city.

The formula

PR(p) = (1 - d) / N
      + d × Σ ( PR(q) / L(q) )   for every q that names p
  • PR(p) is the rank of person p.
  • N is the total number of citizens.
  • L(q) is the number of names q wrote in their ring (so each vote is split across the names q spent it on).
  • d is the damping factor, classically 0.85. It says: 85% of importance flows through who-named-whom; 15% of it diffuses uniformly to everyone (the “random surfer” or “random citizen you might bump into”).
  • We iterate the formula until ranks stop changing. About 30 to 50 passes over the graph is enough to converge for a city of a few hundred citizens.

How the crawl runs · step by step

  1. 1. Collect rings. Each citizen submits up to 63 names across rounds 1 to 6. Each name becomes a directed edge from them to the named citizen, weighted by which round it appeared in (R1 = 6, R2 = 5, R3 = 4, R4 = 3, R5 = 2, R6 = 1). Stored in the pagerank_rings table.

  2. 2. Resolve handles to citizens.A name like “priya.k” resolves to a real citizen record if one exists. Unmatched names stay as ghost nodes with no outgoing edges (they receive but don't pass on rank). This avoids inflating rank for handles nobody recognizes.

  3. 3. Initialize ranks. Every node gets rank 1/N. With 100 citizens, every starting rank is 0.01. Rank is a probability: the chance that a random walker through the graph lands on this node.

  4. 4. Iterate.One pass: every node passes its current rank to the people it named, in proportion to the weight of those names. Then we add the damping correction (1−d)/N to every node. Then we normalize so all ranks sum back to 1. Repeat for 30 to 50 passes.

  5. 5. Watch convergence.Each pass, the ranks shift less than the one before. We stop when the largest rank change in a pass is below epsilon (e.g. 0.0001). At that point the ranking is stable: it's a property of the graph, not of where we started.

  6. 6. Publish. The ranked list is the leaderboard. Connectors rise, bridges rise, the quiet ones who got named by the right people rise. Ranks update nightly as new rings come in.

What “rings to compute” means

We need a graph before we can rank it.

A single citizen's ring is a star: one center, up to 63 outbound edges. Star graphs aren't interesting; PageRank on a star is trivial. The signal kicks in when many stars overlap and you can chase importance through the graph: A names B, B names C, so C inherits a fraction of A's rank through B. Below ~5 citizens with full rings, the ranks just track raw inbound mention count. Above 20 to 30, real PageRank dynamics emerge. The leaderboard automatically switches from “weighted mentions” to “true PageRank” once that threshold passes.

For a city of ~100 people: If 30 submit rings, you have a tractable graph. If 60 submit, the ranking starts looking like Pals on intent steroids. If everyone submits, you have something genuinely new: a quantitative self-portrait of the social fabric, refreshed weekly.

How we adapt it for Ness

We treat each ring as an edge with weight. Round 1 names count for 6, Round 2 for 5, … Round 6 for 1. Closer ties get more importance flow than acquaintance ties. We also reward reciprocity: if A names B and B names A, the edge counts double. Convergence runs nightly once the backend is live.

Why doubling rings

Human social structure layers in roughly doubling sizes (Dunbar). Asking for one name first removes friction. Each ring after that asks for half the trust depth and twice the breadth. By round six, you've mapped 63 names: the relationships that matter.

What the leaderboard surfaces

Connectors: high PageRank, named by a wide cross-section of citizens. Bridges: high betweenness centrality, the people who join otherwise-disconnected clusters. Quiet ones: named by very few citizens despite showing up every day. Ness highlights all three, with permission.

Privacy stance

Your ring stays on your device until you opt into the social graph. Once opted in, only the aggregate score is published. Nobody sees your individual list. Citizens you named never see that you named them specifically.

Coming next · Tournament input

One click at a time. No typing.

Naming 63 people from memory is hard. Recognising someone when you see their face is easy. The next iteration of PageRank input is a tournament: we show you two citizens at a time and ask “who do you know better?” You click. We update Elo-style closeness ratings and surface the next pair. About 30 rounds gets us a stable ranked list per citizen, which becomes the weighted edges into the PageRank graph.

The input pool is bootstrapped from the host community directory. So the very first time you open Tournament, the faces are already people you might know. Cold start solved by the same trick Zuck pulled at Harvard: pre-populate the graph, let the network effect do the rest.

Lands in v0.12. The schema already has the rings table.

Recommendation vs. rank

Other tools connect. PageRank ranks.

Most community directories surface who you might want to meet. PageRank works on a different layer: it takes the connections people make and quantifies who matters across the whole graph. Directories recommend. PageRank ranks. They are complementary. Directories help a citizen; PageRank tells the city about itself.

The Facemash echo

Same data appetite. Different ranking criterion.

Zuckerberg's Facemash at Harvard ranked classmates by hot-or-not. The data was the same shape: who is paying attention to whom. PageRank inverts that energy. Instead of vanity, trust. Instead of ratings by strangers, naming by friends. Instead of a leaderboard that humiliates, one that surfaces the connectors who quietly hold the city together.

Feedback