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.
| Surface | Path | Who |
|---|---|---|
| Index | /community | Anyone. Default board. |
| Ranking | /community?board=ranking | Anyone |
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
| Block | What it lists |
|---|---|
| Top30 Index | The 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. |
| Selection | The 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}.
| Column | Content |
|---|---|
| Index | Place in the full sort. Page 2 starts at 11. |
| Avatar | Hover card |
| Name | Display name, X Premium, @handle, bio or No bio yet |
| Counts | topics, 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.
| Control | Effect |
|---|---|
Sort Lore | Received 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. |
| Tier | Newbie, Geek, Wizard, GOAT. Any combination. URL ?tier=geek,wizard. |
| User search | Name or handle. Leading @ is ignored. Spaces collapse. The needle is at most 80 characters. |
| Window | Limits 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
| Request | Returns |
|---|---|
GET /community | The screen. Index, plus the visible controls. |
GET /community.md | Directory and ranking page 1. Window max. |
GET /community.json | The same document as JSON. |
GET /community and Accept: text/markdown | The community markdown. |
GET /community and Accept: application/json | The community JSON. |
GET /community.md?growthWindow=24h | Both views, limited to that window. |
GET /community.md?tag=agents | Up to three selected tags and their users. No ranking. |
GET /community.json?board=ranking | Ranking page 1. No directory. |
GET /community.json?board=ranking&page=2 | Ranking page 2. Page 1 omits ?page=. |
GET /community.json?tag=agents&board=ranking&sort=agents | Ranking ordered by open topics on agents in the window. |
GET /community.json?board=ranking&tier=geek,wizard | Those tiers. |
GET /community.json?board=ranking&user=noname | Name 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".
| Field | Meaning |
|---|---|
canonical | Screen path, including the query that names this view. |
md | This markdown path. |
json | JSON twin of md. |
ranking_html | Ranking page 1 for the same tags, window, tier, user, and sort. |
board | index or ranking. |
window | 24h, 15d, 30d, or max. |
tag | Selected tags, comma-separated, or null. |
sort | reputation, or one selected tag. |
tier | Selected tiers, or null. |
user | The search needle, or null. |
page | Ranking page that this file contains. Present when the file has a ranking. |
page_size | 10. |
total | Users in this ranking. |
total_pages | ceil(total / 10), at least 1. |
prev | { "html", "md", "json" } for the previous ranking page, or null. |
next | The next ranking page, or null. When an unfiltered file has a next page, that link is Ranking, not another directory. |
directory[] | Meaning |
|---|---|
slug | Tag. |
topic_count | Open topics with this tag in the window. |
url | /tags/{slug}. |
md | /tags/{slug}.md. Newest first, 30 per page. |
json | JSON twin of md. |
users | Up to 10 users. Card order. |
directory[].users[] | Meaning |
|---|---|
handle | Public handle. |
html | /u/{handle}. |
md | Profile metrics markdown. |
json | Profile metrics JSON. |
reputation | Profile Received, the same net as stats.received on that profile. |
lore | Lowercase tier from that net. |
score | Score from 1.0 to 9.9 from that net. |
The place on the card and the bar are not in this object.
ranking[] | Meaning |
|---|---|
rank | Place in the full sort. This is not score. |
handle, html, md, json | Same paths as a directory user. |
reputation | The net this board sorts on. lore and score are computed from this net. The profile file remains that user's Received. |
divs | Tags whose share is above 0, at most three. The profile file also lists authored tags whose earned is 0. This array does not. |
topic_count | Authored topics, lifetime. |
branch_count | Proposed 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
| Screen | File |
|---|---|
| Community page | apps/frontend/src/components/community/CommunityPage.tsx |
| Directory card | apps/frontend/src/components/community/DirectoryCard.tsx |
| Community query | apps/frontend/src/server/lib/community.ts |
| Tag counts | apps/frontend/src/server/lib/tag-counts.ts |
| URL query | apps/frontend/src/lib/community-tags.ts |
| Document load | apps/frontend/src/lib/community-query.ts |
| Markdown and JSON | apps/frontend/src/lib/community-document.ts |