| name | pace-dashboard-configure |
| description | Generate a config.yaml for the pace personal dashboard from a user's natural-language description of interests. Maps topics to content adapters (RSS, Hacker News, Reddit, GitHub, arXiv, YouTube, Mastodon, etc.), composes transform pipelines, designs flexbox layouts, and optionally wires up LLM-powered summarization and ranking. Use when asked to configure, set up feeds for, or customize a pace dashboard.
|
| compatibility | Requires the pace project (github.com/av/pace) checked out locally. |
Configure a pace dashboard
Generate a config.yaml for pace from a user's description of what they want to track.
Process
- Ask the user what topics, communities, or content types they care about.
- Map those interests to adapters (see reference below).
- Choose sensible params and transforms for each adapter.
- If multiple adapters feed the same topic, create a pipeline to merge and dedupe them.
- Design a layout that gives more space to primary interests.
- If the user wants summaries, filtering by relevance, or interest-based ranking, add LLM config.
- Write the final
config.yaml.
Adapter reference
Every adapter has an optional refresh_interval (minutes, default 15, minimum 1) and an optional transforms list applied at ingest time. The name field disambiguates multiple instances of the same type.
hackernews
Hacker News stories.
- type: hackernews
params:
feed: top
limit: 30
min_score: 0
rss
Any RSS or Atom feed.
- type: rss
params:
urls:
- https://example.com/feed.xml
reddit
Reddit subreddits.
- type: reddit
params:
subreddits: [programming, selfhosted]
sort: hot
limit: 25
min_score: 0
time: day
github
GitHub trending repos or releases from specific repos. Use mode to pick.
- type: github
params:
mode: trending
language: typescript
since: daily
limit: 15
- name: gh-releases
type: github
params:
mode: releases
repos: [facebook/react, oven-sh/bun]
limit: 10
token: ${GITHUB_TOKEN}
github-releases
Dedicated release tracker (alternative to github mode: releases).
- type: github-releases
params:
repos: [denoland/deno, oven-sh/bun]
token: ${GITHUB_TOKEN}
lobsters
Lobste.rs stories.
- type: lobsters
params:
feed: hottest
limit: 25
min_score: 0
tags: []
mastodon
Mastodon posts by hashtag or account.
- type: mastodon
params:
instance: fosstodon.org
hashtags: [rust, opensource]
accounts: []
limit: 20
only_media: false
youtube
YouTube channel or playlist feeds.
- type: youtube
params:
channels:
- UCXuqSBlHAE6Xw-yeJA0Tunw
playlists: []
limit: 15
arxiv
Academic papers from arXiv.
- type: arxiv
params:
categories: [cs.AI, cs.LG]
query: ""
limit: 20
stackexchange
Questions from Stack Exchange sites.
- type: stackexchange
params:
site: stackoverflow
tags: [typescript, react]
sort: hot
limit: 20
min_score: 0
devto
DEV.to articles.
- type: devto
params:
tags: [typescript, webdev]
username: ""
limit: 15
min_reactions: 0
top: 7
producthunt
Product Hunt launches.
- type: producthunt
params:
limit: 20
min_upvotes: 0
enrich: false
podcast
Podcast episodes from RSS feeds.
- type: podcast
params:
feeds:
- https://feeds.simplecast.com/54nAGcIl
limit: 10
twitter
Twitter/X lists and searches (requires authentication).
- type: twitter
params:
lists: []
searches: []
Transform reference
Transforms run at ingest time on adapter or pipeline results. They apply sequentially in the order listed.
transforms:
- type: latest
count: 50
- type: filter
keywords: [ai, rust]
fields: [title, body]
- type: exclude
keywords: [sponsored, hiring]
fields: [title, body]
- type: sort
field: timestamp
direction: desc
- type: dedupe
strategy: url
threshold: 0.85
keep: highest-score
- type: time-decay
half_life: "12h"
engagement_weight: 0.7
recency_weight: 0.3
decay: exponential
- type: keyword-score
keywords:
- term: "rust"
weight: 10
- term: "AI|machine learning"
weight: 15
regex: true
min_score: 0
- type: cluster
strategy: auto
- type: llm-summarize
- type: llm-filter
criteria: "relevant to AI research"
- type: llm-rank
- type: llm-merge
prompt: "Group items about the same topic"
Pipelines
Pipelines merge items from multiple adapters and apply cross-source transforms. Define them when the user wants a combined view.
pipelines:
- name: combined
sources: [hackernews, reddit]
refresh_interval: 15
transforms:
- type: dedupe
strategy: url
- type: latest
count: 40
A panel references a pipeline by using the pipeline name as its source.
Layout
Layout is a recursive flexbox tree. Each node is either a container (with direction + children) or a leaf panel (with panel + source).
layout:
direction: row
gap: 16
children:
- panel: hackernews
source: hackernews
flex: 2
limit: 30
- direction: column
flex: 1
children:
- panel: reddit
source: reddit
- panel: releases
source: gh-releases
- panel: rss
flex: 1
source: rss
limit: 20
The special source all shows items from every adapter. If layout is omitted entirely, pace renders a single "all" panel as the default.
Below 768px the layout collapses to a single column automatically.
LLM config (optional)
llm:
provider: <provider>
model: <model-name>
api_key: ${LLM_API_KEY}
interests:
- artificial intelligence
- typescript
Worked example
User says: "I want to follow AI/ML research, Rust programming news, and new open-source releases. I don't care about hiring posts."
Resulting config.yaml:
adapters:
- type: hackernews
params:
feed: top
limit: 50
refresh_interval: 10
transforms:
- type: filter
keywords: [ai, llm, rust, ml, neural, transformer, open source]
fields: [title]
- type: exclude
keywords: [hiring, "who is hiring"]
fields: [title]
- type: latest
count: 40
- type: arxiv
params:
categories: [cs.AI, cs.LG, cs.CL]
limit: 20
refresh_interval: 60
transforms:
- type: latest
count: 20
- type: rss
params:
urls:
- https://blog.rust-lang.org/feed.xml
- https://this-week-in-rust.org/atom.xml
refresh_interval: 30
- type: lobsters
params:
feed: hottest
limit: 25
tags: [rust]
refresh_interval: 15
- name: gh-releases
type: github
params:
mode: releases
repos: [rust-lang/rust, huggingface/transformers, pytorch/pytorch]
limit: 10
refresh_interval: 60
pipelines:
- name: ai-combined
sources: [hackernews, arxiv]
transforms:
- type: dedupe
strategy: title-similarity
threshold: 0.8
- type: latest
count: 40
- name: rust-combined
sources: [rss, lobsters]
transforms:
- type: dedupe
strategy: url
- type: latest
count: 25
layout:
direction: row
children:
- panel: ai
source: ai-combined
flex: 2
limit: 40
- direction: column
flex: 1
children:
- panel: rust
source: rust-combined
limit: 25
- panel: releases
source: gh-releases
limit: 10