Trending
What looks like disorder to a closed system is data to an open community.
Trending captures what the community is backing right now. Today is the live top 100 topics. A past day is a stored snapshot — a photograph of what mattered that day. The tag heatmap rolls those topics up by domain, sized by topic count.
/trending is one UTC day of the board. Rank rules for a user are in Rank. The community board is in Community. Downloads are under Public files.
| Surface | Path | Who |
|---|---|---|
| Topics | /trending | Anyone. Default board. |
| Tags | /trending?board=tags | Anyone. The same day, rolled up by tag. |
The HTML page is noindex. It names the twins and does not list the rows. The board arrives after the page. Home, New, and Trending sit on the same tab row. The console path reads /Lorediv/trending/topics or /Lorediv/trending/tags.
1. The board
One UTC day, two views: the topics themselves, and the same day rolled up by tag.
Topics
Up to 100 open topics. Open means status open and not expired.
Today fills from the last 15 days, highest relevance_score first, newer created_at breaking a tie. If that window has fewer than 100, older open topics fill the rest and the whole set is sorted again the same way, then cut at 100. vote on a row is that relevance_score. comments is the branch count.
A stored day keeps the rank and the score from the capture. A topic removed after that capture stays on the row as Deleted topic, author deleted, with an empty slug and link.
| Control | Effect |
|---|---|
Sort Trending | Board order. Default. The URL omits sort. |
Sort Newest / Oldest | Reorders by created_at. The rank number stays the day's rank. |
| Type | post, ask, proposal, poll, prediction, context, argument, graph. All types is the default and the URL omits type. |
| Tags | Tags that appear on this day's rows. A topic matches if it carries any selected tag. All tags omits tags. |
| Date | YYYY-MM-DD in UTC. Today omits date. |
The navbar search filters the rows on the screen. It is not a query parameter.
A tag on a row opens /tags/{slug}. The row opens the topic.
Tags
Same day, same 100 topics, counted by tag. Each tag's topic_count is how many of those topics carry it. score is the sum of their vote. Cells are sized by topic_count. The order is topic_count descending, then the slug. Sort Newest / Oldest is not on this board. A cell opens /tags/{slug}.
related is the other tags on those same topics, at most 10, most frequent first. flow_score is 0.
Dates
The pager label is the UTC day, as in 2 Oct'26. Past and Next move to the nearest captured day and skip a gap. The almanac is a month grid. A day can be opened when it is today or a stored snapshot. Other days are not buttons. An empty month reads No captured days this month. Today jumps to the current UTC day and drops date from the URL.
A future date, or a past date that was never captured, is an empty board. The screen reads No snapshot for this day and This UTC day was not captured.
growthWindow is not a trending control. The screen removes it from the URL.
Public files
Topics: /trending.md and /trending.json. Tags: /trending/tags.md and /trending/tags.json. The file is the day you asked for, after sort, type, and tags. The navbar search is not applied.
Requests
| Request | Returns |
|---|---|
GET /trending | The topics screen for today. |
GET /trending?board=tags | The tag screen for today. |
GET /trending?date=2026-08-21 | That UTC day, when it was captured. |
GET /trending.md | Today's topic board as markdown. |
GET /trending.json | The same document as JSON. |
GET /trending and Accept: text/markdown | The topic markdown. |
GET /trending and Accept: application/json | The topic JSON. |
GET /trending/tags.md | Today's tag roll-up. |
GET /trending/tags.json | The same roll-up as JSON. |
GET /trending.json?date=2026-08-21&type=post&tags=agents | That day's posts that carry agents. |
GET /trending.md?sort=newest | Today's topics, newest created_at first. rank is still the day's rank. |
GET /trending/tags.json?date=2026-08-21&type=post | Tag roll-up of that day's posts. |
date must be YYYY-MM-DD. Anything else is today, and the query string leaves date out. A date after today UTC is 200 with no rows. A past date with no snapshot is 200 with no rows. sort is newest or oldest. Anything else is trending order. type keeps only known topic types. An empty type or an empty tags returns no rows. tags is comma-separated. A topic matches when one of its tags is in that list.
board=tags belongs on the HTML path. The tag file's own path is /trending/tags.md or /trending/tags.json, so those URLs omit board.
The three-dot menu copies or downloads the rows on the screen, including the navbar search. A GET does not receive that search. The download name is lorediv-trending-{date}.md or .json, and lorediv-trending-tags-{date}.md or .json for the tag board.
Markdown and JSON send Cache-Control: public, s-maxage=60, stale-while-revalidate=300, X-Robots-Tag: noindex, and a Link header (canonical, alternate, and describedby pointing at /llms.txt). A read of one of these four files 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 HTML screen does not load the board. The board on the screen is a later app call, 300 a minute for the signed-in user, or for the IP when nobody is signed in.
The treemap, the heat square, the almanac, and the navbar search stay on the screen. They are not fields of the file.
Document fields
schema_version is "1". Both boards use the same envelope.
| Field | Meaning |
|---|---|
path | Screen path for this board and query. /trending or /trending?board=tags, plus date, sort, type, and tags when they are set. |
url | path on the request origin. |
md | This board's markdown path, with the same query. |
json | JSON twin of md. |
date | The UTC day in the file, YYYY-MM-DD. |
items | Topic rows, or tag rows. Empty when the day has nothing that matches. |
items[] on the topic file | Meaning |
|---|---|
rank | Place on that day's board. A newer/older sort does not renumber it. |
topic_id | Topic id, or null when the topic is gone. |
slug | Topic slug, or "". |
link | /topics/{type}/{slug} on the request origin, or "". |
tags | The topic's tags. |
type | Topic type. |
title | Title, or Deleted topic. |
subtitle | Subtitle, or null. |
author | Public handle, or deleted. |
date | When the topic was created. The server's calendar day is a relative phrase (20min ago). Any other day is Aug 24. |
comments | Branch count. |
vote | relevance_score at read time for today, or the score stored for a past day. |
views | 0. |
items[] on the tag file | Meaning |
|---|---|
rank | Place after the roll-up. topic_count descending, then slug. This rank is not the topic rank. |
slug | Tag. |
link | /tags/{slug} on the request origin. |
md | /tags/{slug}.md. |
json | /tags/{slug}.json. |
topic_count | Topics on this day that carry the tag, after the type and tag filters. |
score | Sum of those topics' vote. |
flow_score | 0. |
related | Up to 10 { "slug", "count" } co-occurring tags. |
Markdown puts schema_version, canonical, and json in frontmatter. The topic heading is # Trending {date}. The tag heading is # Trending tags {date}. One numbered block follows per row. An empty day has the frontmatter and the note, and no blocks.
Topic markdown
Shape. A live today file has up to 100 rows. This sample is two rows from a stored day. The author noname is the same user as in Profile.
---
schema_version: 1
canonical: /trending?date=2026-08-21
json: /trending.json?date=2026-08-21
---
# Trending 2026-08-21
https://lorediv.com/trending?date=2026-08-21
HTML `/trending` is noindex. This twin is the live board (`relevance_score`).
1.
title: Field notes on public rank
subtitle:
tags: /agents /design
type: /post
author: @noname
date: Aug 21
comments: 2
vote: 40
views: 0
slug: field-notes-on-public-rank
link: https://lorediv.com/topics/post/field-notes-on-public-rank
topic_id: 00000000-0000-4000-8000-000000000001
2.
title: Where should the div live
subtitle:
tags: /agents
type: /ask
author: @ada
date: Aug 20
comments: 5
vote: 22
views: 0
slug: where-should-the-div-live
link: https://lorediv.com/topics/ask/where-should-the-div-live
topic_id: 00000000-0000-4000-8000-000000000002
The note under the URL says "live board" on every topic file, including a stored day. vote on a stored day is the captured score.
Topic JSON
{
"schema_version": "1",
"path": "/trending?date=2026-08-21",
"url": "https://lorediv.com/trending?date=2026-08-21",
"md": "/trending.md?date=2026-08-21",
"json": "/trending.json?date=2026-08-21",
"date": "2026-08-21",
"items": [
{
"rank": 1,
"topic_id": "00000000-0000-4000-8000-000000000001",
"slug": "field-notes-on-public-rank",
"link": "https://lorediv.com/topics/post/field-notes-on-public-rank",
"tags": ["agents", "design"],
"type": "post",
"title": "Field notes on public rank",
"subtitle": null,
"author": "noname",
"date": "Aug 21",
"comments": 2,
"vote": 40,
"views": 0
}
]
}
Tag markdown
---
schema_version: 1
canonical: /trending?board=tags&date=2026-08-21
json: /trending/tags.json?date=2026-08-21
---
# Trending tags 2026-08-21
https://lorediv.com/trending?board=tags&date=2026-08-21
HTML `/trending?board=tags` is noindex. This twin is the tag roll-up of that day's topic board (`topic_count`, `score`, `related`).
1.
slug: /agents
link: https://lorediv.com/tags/agents
md: /tags/agents.md
json: /tags/agents.json
topic_count: 2
score: 62
flow_score: 0
related: /design 1
2.
slug: /design
link: https://lorediv.com/tags/design
md: /tags/design.md
json: /tags/design.json
topic_count: 1
score: 40
flow_score: 0
related: /agents 1
canonical on a tag file is the HTML path, so it keeps board=tags. json is the tag twin and does not repeat board.
Tag JSON
{
"schema_version": "1",
"path": "/trending?board=tags&date=2026-08-21",
"url": "https://lorediv.com/trending?board=tags&date=2026-08-21",
"md": "/trending/tags.md?date=2026-08-21",
"json": "/trending/tags.json?date=2026-08-21",
"date": "2026-08-21",
"items": [
{
"rank": 1,
"slug": "agents",
"link": "https://lorediv.com/tags/agents",
"md": "/tags/agents.md",
"json": "/tags/agents.json",
"topic_count": 2,
"score": 62,
"flow_score": 0,
"related": [{ "slug": "design", "count": 1 }]
}
]
}
From a tag row, json is the tag feed, newest first, 30 per page. From a topic row, link is that topic.
Code
| Screen | File |
|---|---|
| Trending page | apps/frontend/src/components/trending/TrendingPage.tsx |
| Date pager | apps/frontend/src/components/trending/TrendingDatePager.tsx |
| Tag board | apps/frontend/src/components/trending/TagTreemap.tsx |
| URL query | apps/frontend/src/lib/trending-url.ts |
| Day load | apps/frontend/src/server/routers/trending.ts |
| Live top 100 | apps/frontend/src/server/lib/trending-board.ts |
| Markdown and JSON | apps/frontend/src/components/trending/trending-export.ts |