Skip to main content

Community

Community is not infrastructure. It is the metabolism of the system.

/community is where you see who the community recognizes. The directory shows the top 30 tags and the users who are strongest in each. The ranking board lists users by their lore rank, 10 per page. It is the public scoreboard of the tree. The label on each user is {tier} {score}. Rank rules are in Rank. The profile a row opens is in Profile. Downloads are under Public files.


1. What it is for​

The tree ranks work. The community page ranks people, through two lenses. The directory answers who is strongest in each domain. The ranking answers who holds the most lore overall. It is where a person, or an agent, goes to see whom the community has recognized on a matter.

flowchart TD
C["/community"] --> I["Index<br/>top 30 tags and the<br/>strongest users in each"]
C --> R["Ranking<br/>all users by lore rank<br/>10 per page"]
I --> T["/tags/{slug}<br/>the feed for that tag"]
I --> P["/u/{handle}<br/>the profile"]
R --> P

2. What you see​

Two boards share one page. Index is the default. Ranking is one click away, or opens by itself when the URL asks for it.

SurfacePathWho
Index/communityAnyone. Default board.
Ranking/community?board=rankingAnyone

The heading is Discover community specialties. Search accepts up to three tags. Chips under the search are /{slug}. Window and View sit on the left. On Top30 Index the title sits on the right edge. Window is 24h, 15d, 30d, or max. View is Avatar Index (default), List Index, or Rank Index, and each row shows its icon. Sort sets Lore or a selected tag, then the tier, and it is on Ranking only. On Ranking, the user search stays on the right.

Index​

BlockWhat it lists
Top30 IndexThe 30 tags with the most open topics in the window. Each card shows the tag rank, /{slug}, the compact topic count, and up to 10 users.
SelectionThe tags typed in search, up to three. Same card. The top 30 is not on this view.

An open topic here has status open and has not expired. The window limits created_at. A user on a card is @handle, their lore rank, and a bar. The bar is their open topics plus branches on that tag in the window, measured against the top user on the same card. The handle opens /u/{handle}. Clicking /{slug} opens the feed for that tag. The tag's own address is /tags/{slug}. Users on the card have an X, Google, or GitHub handle. Order on the card is that tag count, then account age. The avatar opens the hover card in Profile.

Avatar Index is the default Index. The card keeps its rank, /{slug}, and count. The ten users are their avatar pictures, packed so more activity on that tag takes a larger tile. The picture opens the same profile and the same hover card. List Index is ?layout=list. The file ignores layout.

Ranking​

Page size is 10. Each row opens /u/{handle}.

ColumnContent
IndexPlace in the full sort. Page 2 starts at 11.
AvatarHover card
NameDisplay name, X Premium, @handle, bio or No bio yet
Countstopics, branches, and divs as /{tag} links. Topic and branch counts are lifetime.
Lore{tier} {score}

The Lore tip reads Tier based on community support and recognition of shared content. When tags are selected, the score column also lists each selected /{slug} with that user's open-topic count on it inside the window. That per-tag count is on the screen only.

ControlEffect
Sort LoreReceived descending, then older accounts first. Default. URL omits sort.
Sort /{slug}Topic count on that tag inside the window, then Received, then account age. The slug has to be one of the selected tags. Any other sort is Lore.
TierNewbie, Geek, Wizard, GOAT. Any combination. URL ?tier=geek,wizard.
User searchName or handle. Leading @ is ignored. Spaces collapse. The needle is at most 80 characters.
WindowLimits who has a topic or a branch in range, and the tag-sort counts. max is the whole record.

A row is someone with an X, Google, or GitHub handle. Empty copy is No users match, No users in those tiers, or No users yet.

sort set to a selected tag, page greater than 1, tier, or user opens Ranking even when board is omitted.


Public files​

The screen is for people. The files are for agents: the same boards as Markdown and JSON, with the same filters.

The screen stays /community. Two downloads sit beside it, /community.md and /community.json. The same query the screen uses is on the file. A filtered request returns that view only.

Requests​

RequestReturns
GET /communityThe screen. Index, plus the visible controls.
GET /community.mdDirectory and ranking page 1. Window max.
GET /community.jsonThe same document as JSON.
GET /community and Accept: text/markdownThe community markdown.
GET /community and Accept: application/jsonThe community JSON.
GET /community.md?growthWindow=24hBoth views, limited to that window.
GET /community.md?tag=agentsUp to three selected tags and their users. No ranking.
GET /community.json?board=rankingRanking page 1. No directory.
GET /community.json?board=ranking&page=2Ranking page 2. Page 1 omits ?page=.
GET /community.json?tag=agents&board=ranking&sort=agentsRanking ordered by open topics on agents in the window.
GET /community.json?board=ranking&tier=geek,wizardThose tiers.
GET /community.json?board=ranking&user=nonameName or handle.

Tags are split on commas and spaces, then normalized the same way as a div tag: lowercase letters and digits, everything else dropped, at most three, duplicates dropped. growthWindow is 24h, 15d, 30d, or max. Anything else is max. Omitting it is max and the query string leaves it out. growthWindow=max is kept when it was sent.

A missing, non-numeric, or sub-1 page is page 1. A page above 10000 is read as 10000. A page past the last page is still 200, and the file is that last page: page, canonical, md, json, prev, and next name the page that was returned.

The HTML Link header on /community names the unfiltered twins. The file itself carries the query you sent. Follow canonical on the document, or next and prev.

Markdown and JSON send Cache-Control: public, s-maxage=60, stale-while-revalidate=300 and a Link header (canonical, alternate, and describedby pointing at /llms.txt). Negotiated HTML sends Vary: Accept. A public read over the limit is 429, body Too many requests, with Retry-After. The cap is 60 requests a minute per IP. If Redis is down, that same cap still applies in memory on the server. The community screen uses this cap before it queries the database. The community board calls from the app spend this same cap.

Display name, bio, avatar, X Premium, the directory bar, and the per-tag counts beside Lore stay on the screen. They are not fields of the file.

Document fields​

schema_version is "1".

FieldMeaning
canonicalScreen path, including the query that names this view.
mdThis markdown path.
jsonJSON twin of md.
ranking_htmlRanking page 1 for the same tags, window, tier, user, and sort.
boardindex or ranking.
window24h, 15d, 30d, or max.
tagSelected tags, comma-separated, or null.
sortreputation, or one selected tag.
tierSelected tiers, or null.
userThe search needle, or null.
pageRanking page that this file contains. Present when the file has a ranking.
page_size10.
totalUsers in this ranking.
total_pagesceil(total / 10), at least 1.
prev{ "html", "md", "json" } for the previous ranking page, or null.
nextThe next ranking page, or null. When an unfiltered file has a next page, that link is Ranking, not another directory.
directory[]Meaning
slugTag.
topic_countOpen topics with this tag in the window.
url/tags/{slug}.
md/tags/{slug}.md. Newest first, 30 per page.
jsonJSON twin of md.
usersUp to 10 users. Card order.
directory[].users[]Meaning
handlePublic handle.
html/u/{handle}.
mdProfile metrics markdown.
jsonProfile metrics JSON.
reputationProfile Received, the same net as stats.received on that profile.
loreLowercase tier from that net.
scoreScore from 1.0 to 9.9 from that net.

The place on the card and the bar are not in this object.

ranking[]Meaning
rankPlace in the full sort. This is not score.
handle, html, md, jsonSame paths as a directory user.
reputationThe net this board sorts on. lore and score are computed from this net. The profile file remains that user's Received.
divsTags whose share is above 0, at most three. The profile file also lists authored tags whose earned is 0. This array does not.
topic_countAuthored topics, lifetime.
branch_countProposed branches, lifetime.

An unfiltered file sets directory to the top 30 and ranking to page 1. A tag search without Ranking sets directory to those tags and ranking to []. A Ranking request sets directory to []. Markdown omits an empty ## Directory or ## Ranking.

Unfiltered markdown​

Shape. A live file has up to 30 directory tags and 10 ranking rows. This sample uses noname from Profile and ada.

---
schema_version: 1
canonical: /community
json: /community.json
---

# Community

Divs directory and reputation ranking. Rank on the row is `{tier} {score}` from Received. Full mix: [/reputation.md](/reputation.md).

HTML: [/community](/community). JSON: [/community.json](/community.json).

## Directory

### [/agents](/tags/agents.md) — [json](/tags/agents.json)

- [@noname](/u/noname.md) — Wizard 5.5
- [@ada](/u/ada.md) — Geek 3.2

## Ranking

Page 1 of 1 (2 users).

1. [@noname](/u/noname.md) — Wizard 5.5 — /agents /design
2. [@ada](/u/ada.md) — Geek 3.2 — /notes

The plate on the line is formatReputationRank. JSON splits the same plate into lore and score.

Unfiltered JSON​

{
"schema_version": "1",
"canonical": "/community",
"md": "/community.md",
"json": "/community.json",
"ranking_html": "/community?board=ranking",
"board": "index",
"window": "max",
"tag": null,
"sort": "reputation",
"tier": null,
"user": null,
"page": 1,
"page_size": 10,
"total": 2,
"total_pages": 1,
"prev": null,
"next": null,
"directory": [
{
"slug": "agents",
"topic_count": 12,
"url": "/tags/agents",
"md": "/tags/agents.md",
"json": "/tags/agents.json",
"users": [
{
"handle": "noname",
"html": "/u/noname",
"md": "/u/noname.md",
"json": "/u/noname.json",
"reputation": 57,
"lore": "wizard",
"score": 5.5
},
{
"handle": "ada",
"html": "/u/ada",
"md": "/u/ada.md",
"json": "/u/ada.json",
"reputation": 22,
"lore": "geek",
"score": 3.2
}
]
}
],
"ranking": [
{
"rank": 1,
"handle": "noname",
"html": "/u/noname",
"md": "/u/noname.md",
"json": "/u/noname.json",
"reputation": 57,
"lore": "wizard",
"score": 5.5,
"divs": ["agents", "design"],
"topic_count": 6,
"branch_count": 14
},
{
"rank": 2,
"handle": "ada",
"html": "/u/ada",
"md": "/u/ada.md",
"json": "/u/ada.json",
"reputation": 22,
"lore": "geek",
"score": 3.2,
"divs": ["notes"],
"topic_count": 4,
"branch_count": 1
}
]
}

noname at Received 57 is Wizard 5.5. ada at 22 is Geek 3.2. On this sample the two nets match. On a live ranking row, reputation is the board net and can differ from the profile file.

Ranking page​

GET /community.json?board=ranking&page=2 with 25 users:

{
"canonical": "/community?board=ranking&page=2",
"md": "/community.md?board=ranking&page=2",
"json": "/community.json?board=ranking&page=2",
"board": "ranking",
"page": 2,
"page_size": 10,
"total": 25,
"total_pages": 3,
"prev": {
"html": "/community?board=ranking",
"md": "/community.md?board=ranking",
"json": "/community.json?board=ranking"
},
"next": {
"html": "/community?board=ranking&page=3",
"md": "/community.md?board=ranking&page=3",
"json": "/community.json?board=ranking&page=3"
},
"directory": [],
"ranking": [
{
"rank": 11,
"handle": "lee",
"html": "/u/lee",
"md": "/u/lee.md",
"json": "/u/lee.json",
"reputation": 22,
"lore": "geek",
"score": 3.2,
"divs": ["notes"],
"topic_count": 4,
"branch_count": 1
}
]
}

Page 2 has 10 rows. The fragment shows the first. Its rank is 11. Page 1 omits page from prev.

From a row, json is the metrics profile. On that file, replace {tag} in div_json with each divs[].tag. From a directory tag, json is /tags/{slug}.json.


Code​

ScreenFile
Community pageapps/frontend/src/components/community/CommunityPage.tsx
Directory cardapps/frontend/src/components/community/DirectoryCard.tsx
Community queryapps/frontend/src/server/lib/community.ts
Tag countsapps/frontend/src/server/lib/tag-counts.ts
URL queryapps/frontend/src/lib/community-tags.ts
Document loadapps/frontend/src/lib/community-query.ts
Markdown and JSONapps/frontend/src/lib/community-document.ts