Swamp Pulse
A leaderboard-style activity dashboard for the swamp project itself: it tracks Lab issues, GitHub commits and GitHub releases, merges the three views of one change into a single ranked item, and renders six linked static HTML pages. WHAT IT DOES
Turns the raw firehose of swamp-project activity into a ranked, readable dashboard. A release, its commit and its pull request are the same event, so instead of listing them three times Pulse joins them into one merged item and ranks items by a synthesized significance hierarchy (tier first, recency as tie-break). It renders a documentation summary, an activity leaderboard, an extension-registry page (new / updated / most-pulled), and releases, changes and issues detail pages, each with 24-hour, 7-day and current-month windows and every item linked back to its source. Prefer it over reading the commit log or the issue tracker directly: it answers "what shipped, and does it matter?" in one page, and runs hourly.
INSTALL
# One pull; the declared dependencies install automatically.
swamp extension pull @svendowideit/swamp-pulseDEPENDENCIES
@webframp/github (extended for the commit/release collectors) and
@svendowideit/github-pages (opt-in publishing), both declared in
dependencies: and installed by the single pull above. Serving the pages
over HTTP additionally uses @svendowideit/systemd-service, and the Caddy
publish target uses @svendowideit/caddy; both are optional and only needed
if you enable those features.
RUN
# Collect, rank and render in one pass; scheduled hourly by default.
swamp workflow run @svendowideit/swamp-pulse
# Track a specific repository instead of the default set.
swamp workflow run @svendowideit/swamp-pulse \
--input 'repos:json=["swamp-club/swamp"]'
# See every setting, its current value, and the exact command to change it.
swamp model @svendowideit/swamp-pulse method run setup pulse Output lands in ~/.swamp/swamp-pulse/ (index.html, leaderboard.html,
extensions.html, changes.html, releases.html, issues.html). Publishing is
opt-in and never runs by default.
CONFIGURE
All settings are optional and public data needs no secrets. Configure the
pulse model instance with global args, or per run with --input:
publishMode false | caddy | github-pages (default false)
pagesRepo owner/repo for github-pages (required when publishing)
pagesBranch Pages branch (required when publishing)
pagesPath / or /docs (default /)
pagesCname custom domain
caddyHostname / caddyUpstream (for caddy mode)
outputDir where the HTML is written (default ~/.swamp/swamp-pulse)
windows time windows to render (default 24h, 7d, month) Precedence is per-run --input > model global arg > schema default, so a
bare swamp workflow run never overrides a configured instance. The
repositories to track are a workflow input (repos), not a model global.
WHAT IT INSTALLS
No services, triggers, or webhooks on the host by default — it writes static
HTML into outputDir when the workflow runs. If you enable the local server
(ensure-server step), it installs a systemd user service (via
@svendowideit/systemd-service) and enables lingering so the page is served
at boot; publishing to GitHub Pages or Caddy commits/serves the pages only
when you explicitly select that mode.
Global Arguments
| Argument | Type | Description |
|---|---|---|
| outputDir | string | Directory to write the rendered HTML pages. |
| manualBaseUrl | string | Base URL used to build published manual links. |
| windows | array | Activity windows to compute and render. |
| storeRetentionDays | number | How many days of merged events to retain in the rolling store. |
| docPathPattern | string | Optional extra regex; matching changed paths are treated as documentation. |
| serverPort | number | Port the pulse static server listens on (used by ensureServer). |
| serverServiceName | string | systemd user service name for the pulse static server. |
| serverScriptPath? | string | Override the path to the bundled pulse-server.ts script. |
| publishMode | enum | Publishing mode. 'false' publishes nothing; 'caddy' serves locally via |
| pagesRepo | string | Target repository (owner/name) for publishMode=github-pages. |
| pagesBranch | string | Branch to publish the Pages site to (e.g. gh-pages). |
| pagesPath | enum | Directory within the repository Pages serves from. |
| pagesCname | string | Optional custom domain to configure for the Pages site. |
| caddyHostname | string | Public hostname to serve the pages on for publishMode=caddy. |
| caddyUpstream | string | host:port the Caddy reverse proxy points at. |
| Argument | Type | Description |
|---|---|---|
| mode? | enum | Override publishMode for this run. Empty uses the model global. |
| pagesRepo? | string | Override the target repository (owner/name). |
| pagesBranch? | string | Override the Pages branch. |
| pagesPath? | enum | Override the Pages source path. |
| pagesCname? | string | Override the custom domain. |
| caddyHostname? | string | Override the Caddy hostname. |
| caddyUpstream? | string | Override the Caddy upstream. |
| Argument | Type | Description |
|---|---|---|
| publishMode? | enum | Publishing mode. |
| pagesRepo? | string | Target repository (owner/name) for github-pages. |
| pagesBranch? | string | Branch Pages serves from, e.g. gh-pages. |
| pagesPath? | enum | Directory Pages serves from. |
| pagesCname? | string | Custom domain. |
| caddyHostname? | string | Public hostname for caddy mode. |
| caddyUpstream? | string | host:port the Caddy proxy points at. |
| serverPort? | number | Port the pulse server listens on. |
| serverServiceName? | string | systemd user service name. |
| outputDir? | string | Where the HTML pages are written. |
| Argument | Type | Description |
|---|---|---|
| commits? | unknown | Output of @webframp/github collect_commits (wire via CEL). |
| releases? | unknown | Output of @webframp/github collect_releases (wire via CEL). |
| docChanges? | unknown | Output of @webframp/github collect_doc_changes (wire via CEL). |
| labIssues? | unknown | Output of @svendowideit/swamp-club search_lab_issues (wire via CEL). |
| extensions? | unknown | Output of @svendowideit/swamp-ext-registry collect_extensions (wire via CEL). |
| now? | string | Override the evaluation timestamp (ISO-8601); useful for tests. |
| Argument | Type | Description |
|---|---|---|
| outputDir? | string | Override the output directory for the rendered HTML. |
| Argument | Type | Description |
|---|---|---|
| port? | number | Port the server listens on (defaults to global serverPort). |
| serviceName? | string | systemd user service name (defaults to global serverServiceName). |
| scriptPath? | string | Override the path to the pulse-server.ts script. |
Resources
Files
Global Arguments
| Argument | Type | Description |
|---|---|---|
| host | string | Swamp Club host, with or without scheme (default swamp-club.com). |
| apiKey? | string | Optional Swamp Club API key, supplied from a vault. Anonymous when unset. |
| maxComments | number | Maximum number of recent comments to retain per issue. |
| requestTimeoutMs | number | Per-request timeout in milliseconds. |
| Argument | Type | Description |
|---|---|---|
| issueNumber | number |
| Argument | Type | Description |
|---|---|---|
| since? | string | ISO-8601 lower bound on createdAt (inclusive). Defaults to 30 days ago. |
| until? | string | ISO-8601 upper bound on updatedAt (inclusive). Defaults to now. |
| type | enum | Filter by issue type. |
| source | string | Filter by source tag (exact match). Empty means no filter. |
| max | number | Maximum number of issues to collect across pages. |
| pageSize | number | Issues requested per page (the API caps this at 200). |
| Argument | Type | Description |
|---|---|---|
| issueNumber | number | |
| body | string |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| host | string | Swamp Club host, with or without scheme (default swamp-club.com). |
| requestTimeoutMs | number | Per-request timeout in milliseconds. |
| pageSize | number | Extensions requested per page (the API caps this at 100). |
| Argument | Type | Description |
|---|---|---|
| since | string | ISO-8601 lower bound on createdAt/updatedAt (inclusive). |
| until? | string | ISO-8601 upper bound (inclusive). Defaults to now. |
| maxPages | number | Maximum search pages to read (100 extensions each). |
| significantLimit | number | How many most-pulled extensions to report. |
Resources
Swamp Pulse — collect swamp activity and render the dashboard. Every hour: cache the manual index, collect Lab issues, commits, releases and changed docs (fanning out over every configured repo), join each release with its commit and pull request into one merged item, rank by significance (tier first, recency as tie-break), then render five linked HTML pages — a documentation summary, an activity leaderboard, and changes, releases and issues tour pages. Usage: swamp workflow run @svendowidei
Summarise a Swamp Pulse run — counts, top-ranked items and doc links
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License1/2partial
no SPDX license declared
- Verified public repository2/2earned