deck-lovers: the deploy script checks host ports before it builds
Podman only reports a host-port clash after the images are built, and only as an opaque “proxy already running” error that never names the port. The deploy script in deck-lovers now runs a pre-flight check in local serve mode before the build, naming the container or host process that is actually holding the port — 80 and 443 included when Caddy is started — while skipping this compose project’s own containers, so re-running over a live deck-lovers server still attaches instead of failing (5c07394).
forgepulse: rank-trend arrows in the repository signal table
forgepulse’s Repository signal table now
carries a Billboard-chart-style up / down / stable indicator on every row, in
both ranking modes, showing whether a repository moved since yesterday
(9306fec). It tracks
rank rather than the raw figure on purpose: clone volume ranks by
total_clones, a cumulative counter that only ever grows, so diffing the value
would read “up” almost every day regardless of real trend, while rank stays
relative and keeps meaning.
forgepulse: manual refresh and an on-demand sync, behind a single-flight guard
forgepulse grew the two controls its
dashboard was missing: Refresh re-fetches the stored dashboard and detail
data without touching GitHub at all, while Sync now performs a real pull
through the existing POST /api/v1/sync endpoint outside the hourly schedule
and now surfaces the server’s error inline — an expired token says so
immediately instead of failing silently until the next scheduled attempt
(87cfe54). On-demand
sync then exposed a contention bug worth fixing properly: the scheduled tick and
the new endpoint shared one GitHub collector with no coordination, so a click
landing during the hourly run let multiple full 84-repo syncs proceed at once,
each with its own bounded per-repo fetch — enough load to trip secondary rate
limiting and queue on SQLite’s single writer, turning overlap into a crawl
rather than an error. A single-flight guard now rejects the second sync instead
of letting the two contend
(47b2e73).
forgepulse: the dashboard now shows when its numbers were last refreshed
forgepulse shows the age of its own data:
the homepage now reads the most recent successful sync run — already recorded in
the sync_runs table but never surfaced — and renders it next to the git-ref
pill as Updated <UTC> · <local> (Xh Ym ago), ticking every minute
(d4c5e85). Traffic
history is only as useful as the moment it was collected, and until now the
dashboard gave no way to tell a stale snapshot from a fresh one. The change
touches two new frontend modules plus tests for the relative-time formatter and
the API field behind it.
forgepulse: human attention ranking lands on main
forgepulse merged its first pull request, PR #1: human attention is now the default explainable ranking alongside clone volume. The dashboard persists fork history, collects release/tag and Actions-checkout signals, and shows each traffic diagnosis with its evidence inline. Clone-volume mode also gained sortable Stars/Views/Clones column headers (c69739b).
forgepulse v0.1.0: the baseline release
forgepulse hit its first tagged
release, v0.1.0:
the self-hosted GitHub traffic dashboard with retained clone and view history,
repository analytics, charts, referrer and path snapshots, and JSONL export.
The release note frames it explicitly as the baseline before the next feature
— human attention ranking, which is already landing on the develop branch.
forgepulse: repos above the fleet's median clone count
forgepulse now highlights repositories whose clone counts sit above the fleet’s median, and the comparison was fixed to use each repo’s own daily median against the fleet’s rather than its raw total, so a busy repo can no longer skew its own marker.
forgepulse: routing and link-click fixes
forgepulse fixed two web-UI bugs: opening a repository detail page directly, or in a new tab, no longer 404s, and modifier-clicking a link now opens it in a new tab instead of swallowing the click. CI was retriggered after a GitHub Actions outage stalled the pipeline.
forgepulse: GitHub links on detail pages, gghstats issues checked
forgepulse’s repository detail page now links its title, top referrers, and popular paths straight to GitHub (paths always, referrers only when they look like real hostnames), and the JSONL export filename embeds a UTC timestamp so re-downloads stop silently overwriting the previous file. A cross-check against the issues opened on hrodrig/gghstats found that three of them applied to forgepulse too — the export filename, the stats-panel jargon, and the rank column header — and were fixed here; the locale-formatting issue does not apply in the same shape yet.
forgepulse: launch-week fixes and features
forgepulse got its launch-week pass: the repository table is paginated, a favicon landed, and the static “LOCAL” badge now shows the running git ref. On the ops side, a scheduled sync that was silently failing (the /data volume was never chowned to the app user) and a repository detail page that replayed every historical referrer day are fixed, and the production container now restarts itself after a crash or reboot.
forgepulse: self-hosted GitHub traffic-history analytics
forgepulse is now public: a self-hosted GitHub traffic-history analytics app built with Rust, a Svelte frontend, SQLite for storage, and Podman for deployment. It keeps a running history of GitHub traffic metrics so trends accumulate instead of vanishing after GitHub’s rolling window.
cold-path-server-podman: the Cold Path game server in a container
cold-path-server-podman is a
new repository that runs the Cold Path
multiplayer game server inside a Podman container, so no LuaJIT, LuaSocket, or
LuaSec install is needed on the host. The upstream sources aren’t vendored —
the image build pulls them from GitHub, and make build / make run / make logs
handle the rest.