Commit Graph
10 Commits
Author SHA1 Message Date
tiennm99 00c90c5be9 feat: split data update from site build; publish via Cloudflare Pages
The updater fetched GitHub metadata and rendered the dashboard payload in
a single step, so anything that published the site needed a GITHUB_TOKEN.
Cloudflare Pages builds from a Git webhook and has no business holding
one.

Split the tool into three modes. The default update step still fetches
GitHub and now records every API-sourced field in data/metadata.json,
which is committed alongside README.md and data/history.jsonl. The new
-build mode joins that snapshot with data/agents.yml and
data/history.jsonl to render dist/ with no network access and no token;
-check is unchanged.

Supporting changes:

- computeDeltaAt anchors the delta windows to when the data was fetched
  rather than the wall clock, so a redeploy days later reproduces the
  same Δ7d instead of sliding the window past its slack allowance.
- writeSiteData takes updatedAt explicitly for the same reason: the
  timestamp labels data freshness, not build time.
- sortStats is extracted from fetchStats so the build step re-ranks
  identically from committed metadata.
- An agents.yml entry with no metadata yet is omitted with a warning
  instead of failing the build, which would otherwise block every deploy
  between merging a new entry and the next nightly run.
- update.yml drops the GitHub Pages deploy steps and commits
  data/metadata.json; ci.yml runs `go run . -build` so a build that would
  break on deploy breaks in CI first.
- site/_headers stops the edge serving a stale data.json after a refresh.
- docs/DEPLOY.md covers the Cloudflare setup, including the one-time
  bootstrap of data/metadata.json that the build depends on.

Also carries the in-progress curation work already in the tree: the
module rename to awesome-ai-dev-tools, retagged entries, and removal of
the archived Roo-Code, void, continue and suna entries.
2026-09-16 22:24:48 +07:00
tiennm99 3310ed36d4 chore: rename to ai-dev-tools
"awesome-coding-agents" no longer described the contents once the scope
widened past coding agents to AI-powered developer tools generally. Renaming
now was near-free: 3 stars, 4 forks, 135 unique visitors, four months old.

Name selection avoided the crowded awesome-* namespace, where the obvious
candidates are held by established lists (awesome-ai-devtools 3.9k,
awesome-ai-tools 6.2k, awesome-ai-coding-tools 2.1k). "ai-dev-tools" has no
incumbent at the exact name.

- Repo renamed; GitHub description and homepage updated.
- Module path, User-Agent, .gitignore, H1, site <title>/og:title and every
  GitHub Pages URL updated across README.md, templates/readme.tmpl,
  docs/LOCAL_DEV.md and site/index.html.
- plans/reports/ left untouched: it is a dated historical record.

go build: ok. go run . -check: 43 agents valid. go test ./...: ok.
2026-09-16 21:40:23 +07:00
tiennm99 f97e36cbf7 fix(site): follow the cursor vertically in the chart hover
The emphasis and the bolded row came from Chart.js index-mode
interaction, which only recomputes when the x index changes. Moving
straight up and down inside one date therefore kept whichever series was
picked on entry, so the highlight did not match the line under the
cursor.

Track the pointer on the canvas instead and derive both the date and the
nearest series from pixel distance, so vertical movement re-picks. The
built-in tooltip and interaction config are gone; a small plugin draws
the vertical guide at the hovered date and a dot where the emphasized
series crosses it, replacing the caret and hover point that came with
them. Reads are throttled to one per animation frame, and the card now
follows the cursor's height instead of the average of forty series.
2026-09-11 16:24:47 +07:00
tiennm99 a44bcbd6b0 feat(site): rank every series on chart hover
Hovering a date now lists all plotted repos ordered by stars at that
point, with exact counts, so the chart answers "who was ahead when"
instead of only showing one value at a time. The series under the cursor
is bold in the list, stays solid and thickens, and every other line goes
thin and dashed — readable with forty lines on screen.

Chart.js paints its tooltip on the canvas and cannot weight one row
differently, so the readout is an HTML card positioned beside the caret
(flipped and clamped to stay inside the chart) and the built-in tooltip
is off. Forty rows fit as three columns; names truncate on a shared grid
so the counts align. Hidden series are excluded, so the ranking always
matches what is drawn.
2026-09-11 16:07:07 +07:00
tiennm99 ff33c20ab6 fix(site): plot every repo in the star history by default
The chart hid every series past rank 12 while the legend still listed
all of them, so the card claimed to show everything and drew a third of
it. Plot all series on load; the legend stays the way to hide the ones
you do not want, and hidden state still survives re-renders.
2026-09-11 15:46:29 +07:00
tiennm99 eb12bcc2cb feat: replace category with a multi-facet tag vocabulary
A single category could not describe tools that ship as a CLI, an editor
plugin and a desktop app at once, and 7 of the 40 entries were filed
under a surface they only partly match — cline is "an SDK, IDE extension
or CLI assistant" in one `extension` slot, Reasonix ships CLI, desktop
and VS Code under `cli`, warp is a terminal filed as `ide`.

Tags cover five facets: surface (at least one), model access, workflow,
integration, and origin (at most one). tagVocabulary in validate.go is
the single source of truth — the validator, its error messages, and the
dashboard's filter chips all derive from it, the last via a new facets
field in site/data.json.

The dashboard now filters on tags with multi-select chips grouped by
facet: OR within a facet, AND across facets, plus a clear-filters
control, and search matches tags as well as name and description. Only
tags some row actually carries get a chip, so chips and rows cannot
disagree. Tag pills are tinted per facet, replacing the category badge.

All 40 entries are tagged from each repo's own README, topics and docs;
CONTRIBUTING documents every tag and the evidence rule for applying one.
A leftover `category:` key now fails validation with a message naming
its replacement, rather than being silently ignored.

README.md and data/history.jsonl are the regenerated updater output.
2026-09-11 15:40:18 +07:00
tiennm99 0d5e4b3266 feat: momentum metrics, agents.yml validation, drift detection, hardening (#9)
Review fixes:
- applyMigrations resolves chained renames deterministically (cycle guard)
- GraphQL errors name the failing owner/repo, not the alias
- sanitizeCell escapes backslash + angle brackets (README md/HTML injection)
- timeNow/graphqlURL seams; new httptest fetch tests, site + delta tests
  (coverage 30% -> 65.6%)

Features:
- delta30d computed from history; dashboard gains sortable D30d column
- README shows Top 7-day mover line
- 'go run . -check' validates agents.yml offline (dupes, categories,
  name patterns); wired into CI for contributor PRs
- isArchived + rename drift warnings in daily run; archived badge on
  dashboard (E2E found 3 archived repos: gpt-engineer, void, Roo-Code)
2026-08-09 03:26:01 +07:00
tiennm99 6658de1fa9 feat(site): apply ui-ux-pro-max design system to dashboard (#7)
Design system: Data-Dense Dashboard — blue primary (#2563EB/#3B82F6),
amber accent, slate neutrals, Fira Code (headings/data) + Fira Sans
(body) via Google Fonts.

- KPI stat cards: tracked repos, total stars, top 7d gainer, last updated
- card surfaces w/ subtle shadow for table + chart; row hover highlight
- per-category tinted badges (text carries meaning, not color alone)
- search box w/ inline SVG icon; GitHub header button w/ SVG mark
- footer w/ Actions + contributing links
- all PR #6 logic/a11y preserved (sort, search, chips, legend state,
  degraded mode, aria, focus-visible, reduced-motion, 44px targets)
- workflow: add site/** to push paths so dashboard edits auto-deploy

Verified: dark + light schemes, 375px mobile (no h-scroll), 29 rows,
KPI values correct, zero console errors.
2026-08-09 01:17:24 +07:00
tiennm99 e0c965442a feat(site): UI/UX improvements for Pages dashboard (#6)
* feat(site): UI/UX improvements for Pages dashboard

Phase 1+2 of plans/260808-2317 + ui-ux-pro-max quality pass:
- fix invisible single-snapshot chart series (show points when <2)
- persist legend hidden-state across chart re-renders
- Chart.js CDN failure fallback message
- meta description, OG tags, SVG favicon, theme-color, noscript
- log/linear y-axis toggle; debounced text search (table + chart)
- stale-repo muting + text badge (>6 months since push)
- delta7d sort puts no-baseline rows last
- a11y: aria-sort, aria-pressed, canvas role/label, focus-visible,
  keyboard-sortable headers, 44px coarse-pointer targets,
  contrast >=4.5:1 both schemes, reduced-motion guard, empty state

* fix(site): guard renderChart in Chart.js CDN-failure degraded mode

Review finding (major): filter/search handlers call hoisted renderChart()
after the early CDN-failure return, hitting TDZ consts and throwing on
every interaction. Guard with window.Chart check; verified with a
broken-CDN copy: table filtering works error-free, fallback msg shows.
2026-08-09 00:44:28 +07:00
tiennm99 5051274e52 feat: add 10 agents, fix renamed slugs, add GitHub Pages dashboard (#5)
- Add pi, OpenHands, warp, gpt-pilot, qwen-code, kilocode, onlook,
  dyad, trae-agent, copilot-cli (19 -> 29 tracked repos)
- Update renamed slugs to canonical owners (anomalyco/opencode,
  aaif-goose/goose, AntonOsika/gpt-engineer) with history key
  migrations so star deltas survive the rename
- Generate site/data.json each run and deploy site/ (interactive
  table + star-history chart) to GitHub Pages from the daily
  workflow, since GITHUB_TOKEN bot pushes cannot trigger a separate
  Pages workflow
2026-08-08 23:27:53 +07:00