Skip to content

Insights: tile layout + dual content-type / focus-area filtering - #27

Merged
daviddao merged 8 commits into
protocol:mainfrom
lksbrssr:insights-tile-layout
Jun 29, 2026
Merged

Insights: tile layout + dual content-type / focus-area filtering#27
daviddao merged 8 commits into
protocol:mainfrom
lksbrssr:insights-tile-layout

Conversation

@lksbrssr

Copy link
Copy Markdown
Collaborator

What this does

Reworks the Insights page from stacked link-lists into a filterable, tile-based explorer with two independent filter dimensions.

1. Recent items as tiles

The "Recent Talks & Podcasts", "Recent Publications", and "From the Blog" sections now render as a responsive card grid (1 col mobile / 2 / 3 on desktop) instead of single-column divided lists. A shared RecentTile (eyebrow + title + optional 3-line clamped description) keeps the three sections visually consistent.

2. Category cards → content-type filter

The three boxed category cards (which linked out to /publications, /talks, /blog) are replaced by a content-type filter: All types · Blog · Publications · Talks. Selecting one narrows the page to that category. Each section keeps its All publications → / All talks → / All posts → link, so the full listing pages stay reachable.

3. New focus-area filter

A second filter dimension lets you filter by focus area: All areas · Digital Human Rights · Economies & Governance · AI & Robotics · Neurotech. The two filters compose with AND logic and behave sensibly:

  • Counts on each control reflect the other facet's current selection.
  • Options with zero matches are disabled; sections that become empty are hidden; a fully-empty combination shows an empty state with a "clear area filter" action.

Both filter rows use the same pill styling, separated by a vertical divider so they read as two distinct dimensions. The selected pill uses the site's black button treatment.

4. Blog posts can now be tagged by focus area

Focus-area tagging is driven by each item's areas field. Publications and talks already had it; blog posts didn'tbuildBlog() dropped the field and the BlogPost type lacked it. This PR wires it through:

  • scripts/build-content.mjs — pass areas into blog.json
  • BlogPost type — add areas: string[]
  • Insights page — read post.areas for blog tiles

To tag a post, add focus-area slugs to its front matter:

areas: ["neurotech", "ai-robotics"]

Valid slugs: digital-human-rights, economies-governance, ai-robotics, neurotech.

Three existing posts are tagged here as a demonstration (Data Sovereignty → Digital Human Rights, BitRobot → AI & Robotics, Transformative Power of Neurotech → Neurotech).

Heads-up: focus-area tag coverage is currently sparse

The filter is only as good as the tags. Against the four focus areas today: publications are tagged neurotech only (others 0), talks are partially tagged, and blog posts are untagged except the three samples above. The filter degrades gracefully (empty options disable, empty sections hide), and will fill in automatically as more content is tagged. Backfilling areas on existing publications/talks/posts is a good follow-up.

Files

  • src/app/insights/page.tsx — prepare data, render hero + explorer
  • src/components/InsightsExplorer.tsx (new) — client component: filter toolbar + filtered tile sections
  • src/lib/content.ts — add areas to BlogPost
  • scripts/build-content.mjs — emit areas for blog
  • content/blog/{data-sovereignty-privacy,bitrobot-embodied-ai,transformative-power-neurotech}/index.md — sample tags

Notes

  • No routes or content pages removed; /publications, /talks, /blog are untouched and still linked from each section.
  • Editing content/**/*.md requires a content rebuild (npm run dev's prestep / node scripts/build-content.mjs) for new tags to take effect.

🤖 Generated with Claude Code

preview and others added 8 commits June 29, 2026 12:36
Replace the single-column divided lists in the Recent Talks & Podcasts,
Recent Publications, and From the Blog sections with a responsive card
grid (1 col mobile / 2 sm / 3 lg). Adds a shared RecentTile component
(eyebrow + title + optional 3-line clamped description) so the three
sections stay visually consistent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the three boxed category cards (which linked out to /publications,
/talks, /blog) with a text-only tab bar (All / Publications / Talks / Blog,
with counts). Selecting a tab filters the page to show only that category's
section; 'All' shows every section. Moves the filterable sections into a new
client component (InsightsExplorer) for the interactivity. Each section keeps
its 'All X →' link so the full listing pages stay reachable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a second filter dimension on the Insights page: focus-area chips
(All areas / Digital Human Rights / Economies & Governance / AI & Robotics /
Neurotech) on the left of the toolbar, content-type tabs on the right. The
two compose with AND logic. Counts on each control reflect the other facet's
current selection; chips/tabs with zero matches are disabled, sections that
become empty are hidden, and a fully-empty combo shows an empty state with a
'clear area filter' action.

Focus-area tagging comes from each item's existing 'areas' field
(publications + talks); blog posts have no area tags so they only appear
under 'All areas'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…sions

Content-type filter now uses the same pill styling as the focus-area filter,
via a shared Pill component. A vertical divider separates the two groups so
it reads as two distinct filter dimensions. 'All' content-type pill relabeled
'All types' to disambiguate from 'All areas'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blog posts can now carry an 'areas' frontmatter field (focus-area slugs)
that the Insights focus-area filter reads, the same way publications and
talks already work:
- build-content.mjs: pass through 'areas' when building blog.json
- BlogPost type: add 'areas: string[]'
- insights page: use post.areas for blog tiles

Tag three posts as a demonstration (neurotech / ai-robotics /
digital-human-rights) — these are sample tags the team can adjust.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Match the site's primary buttons (Collaborate / About) which are black,
rather than blue.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the gainforest Team on Vercel.

A member of the Team first needs to authorize it.

@lksbrssr

Copy link
Copy Markdown
Collaborator Author

📸 Preview

Default view — recent items render as a tile grid, with two pill filters separated by a divider: focus area (left) and content type (right). Selected pill is black.
Insights — default All view

Filtered by Neurotech — the two filters compose: Blog collapses where untagged, and the type counts update to reflect the area (Blog 1 · Publications 6 · Talks 9). The tagged neurotech blog post + publications surface.
Insights — filtered by Neurotech

Local screenshots from this branch (Vercel preview deploys on this repo require team authorization). Counts depend on focus-area tagging, which is currently sparse — see PR description.

@daviddao
daviddao merged commit 88c6644 into protocol:main Jun 29, 2026
1 check failed
lksbrssr pushed a commit that referenced this pull request Jun 30, 2026
The merged Insights explorer (#27) renders content as tiles, but clicking
through to /publications, /talks, /blog, /tutorials reverted to a plain
list. Extract the tile into a shared <ContentTile>/<ContentTileGrid> and
reuse it across the Insights explorer and every listing page so the tile
view persists end to end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants