Commit Graph
144 Commits
Author SHA1 Message Date
Vinta ChenandClaude 540bb66ed6 style: tighten the gaps between a row's name, description, and links
An open row put about 38px between the project name and its description and 10px before its links, and category rows put 26px between name and description, because .table tbody td overrode the zero top padding meant for description and expand rows. The top gap is now about 2px larger than the bottom one, since the bold name's descenders make an equal gap look smaller.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 23:28:59 +08:00
Vinta ChenandClaude f171784d4f style: give an open row and its expand row one flat background
Each row restarted its own gradient, so the darker bottom of the open row met the lighter top of its expand row and read as a faint border between them.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 23:18:52 +08:00
Vinta ChenandClaude 6e9dc809af fix: drop plural and sort/search hints on single-project category pages
Pages with one project read "Search 1 projects" and told readers to re-sort or search a one-row table.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 23:12:13 +08:00
Vinta ChenandClaude 60d6cd8dd6 style: align sponsor link with its label in the stacked sponsor band
Below 960px the -1rem top margin on the sponsor link, meant for the side-by-side desktop layout, pulled the sponsor name closer to the link than the link sat to its own label, so the link read as part of the sponsor entry.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 20:37:51 +08:00
Vinta ChenandClaude 11b72122c5 feat: drop the build date stat from the hero stats lines
The hero "Updated on" stat only restated when the site was last built.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 20:21:48 +08:00
Vinta ChenandClaude 28b03ce6b7 fix: stack hero stats on phones instead of running them together
On phones the hero stats ran together as one sentence, breaking wherever space ran out and leaving a "/" dangling at a line end.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 20:17:42 +08:00
Vinta ChenandClaude 9d4f372a79 fix: shorten sponsorship email buttons and break address only after @
At phone width the two primary buttons labelled with the full address wrapped over three lines, and the address in the Get started sentence broke at its hyphen.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 20:09:39 +08:00
Vinta ChenandClaude 7516a5c4f6 fix: keep each hero stat on one line and read "Updated on"
On phones the ISO date in the hero stat broke at its hyphen.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 20:03:15 +08:00
Vinta ChenandClaude 82320c9d23 fix: remove animated sheen from hero background
On narrow phone heroes the sheen, a diagonal light stripe sliding across for 54s after load, rendered as a near-vertical band sweeping sideways that read as a loading or progress bar.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 19:57:47 +08:00
Vinta ChenandClaude 19a619ebbb fix: size the home hero to its content height
The home hero was forced to the full viewport height, opening an empty band between the top bar and the headline whenever its content was shorter than the window and pushing the project table down.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 16:42:35 +08:00
Vinta ChenandClaude 15843ae568 fix: use the shared accent focus outline on more links
Sponsorship-page, sponsor band, category, group-page lead, and home hero links fell back to the browser's default focus ring.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 16:36:33 +08:00
Vinta ChenandClaude 85912280e2 style: enlarge back-to-top tap target to 37x36px
The table header's back-to-top button had a 37x20px tap target, below the WCAG 2.2 minimum of 24x24px.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 16:26:27 +08:00
Vinta ChenandClaude 766bff0c08 style: set sponsor band apart from the search section and mark names as outbound links
The sponsor band's background faded from --bg-paper-strong to --bg-paper, ending lighter than the page below it, with only a faint bottom border, so the band blended into the search section and read as its intro rather than a sponsor placement; the sponsor name also gave no cue that it links out.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 16:22:57 +08:00
Vinta ChenandClaude 2c0145fbbc style: wrap tier billing line under price and keep amounts with units
The longer billing lines added with the annual prices broke across two or three lines beside the price and split amounts from their units.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:51:43 +08:00
Vinta ChenandClaude 9b43e6e337 fix: collapse home hero category list into a disclosure on phones
On phones the hero's 74-link category grid was 1,236px tall and pushed the project table down to 2,583px, over three screens.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:36 +08:00
Vinta ChenandClaude 5f2bff2845 fix: show Downloads instead of Stars on narrow screens
Below 960px the table hid the PyPI Downloads column but kept the default downloads sort, so the visible Stars column looked unsorted and the active sort header was not shown or tappable.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:36 +08:00
Vinta ChenandClaude f45997e386 fix: draw one focus outline on a focused table row
Keyboard focus on a table row drew one box per cell, because the focused row fell back to the browser's default outline and each cell also got an inset accent stripe on its left edge.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:35 +08:00
Vinta ChenandClaude 94126bc6bc style: tighten sponsorship hero kicker spacing
The sponsorship hero kicker sat farther above the heading than the heading sat above its subtitle, so the label read as detached from the heading it labels.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:35 +08:00
Vinta ChenandClaude af4f4f8d2f fix: scale category subtitle margin with the hero heading
The subtitle's fixed top margin did not grow with the fluid h1, so heading descenders crowded the subtitle on category and sponsorship heroes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:35 +08:00
Vinta ChenandClaude 537aff4a46 style: set sponsorship ledes in Manrope and stack past sponsor names above descriptions
The sponsorship ledes were set in Cormorant Garamond, whose short x-height and thin strokes read poorly across a paragraph, and past sponsor names shared a baseline with Manrope descriptions, where the mismatched x-heights clash.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:35 +08:00
Vinta ChenandClaude b3b3bc202f style: raise tier eyebrow and fact labels to text-sm
On the sponsorship page the tier names and fact labels rendered smaller than the "/ month" cadence beneath them, inverting the hierarchy.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:19 +08:00
Vinta ChenandClaude ede39d7ad1 style: round ad-hoc font sizes into scale tokens
Roughly 20 ad-hoc font-size values rendered near-duplicate sizes 1-2px apart, reading as noise rather than hierarchy, and .hero-category-link rendered below the documented 12px floor.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:19 +08:00
Vinta ChenandClaude a1f29c58f7 fix: use lining figures for tier prices
Sponsorship tier prices rendered in Cormorant Garamond's default old-style figures, so zeros sat at x-height and the 5 dropped below the baseline, making "$500" hard to read.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 15:49:19 +08:00
Vinta ChenandClaude 1ebff58bf9 feat: link category intro picks to their table rows
Picks in a "How to choose" list were plain text, so a reader had to hunt for the tool's row in the table.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-16 19:45:38 +08:00
Vinta ChenandClaude 9bfb413748 fix: remove hero fade-in animation that delayed LCP
The hero-rise fade-in started .hero-copy, which holds the LCP <h1>, at opacity 0, and Chrome ignores opacity-0 paints for LCP, delaying it by about 455 ms.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-15 12:43:11 +08:00
Vinta ChenandClaude 41d045e1db style: remove max-width from .results-note
`.results-note` carried an inner `max-width: 28rem`, which breaks the rule that `.section-shell` is the only width cap.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-11 09:53:47 +08:00
Vinta ChenandClaude c16dae14ef feat: show section intro lead on group pages
Group pages showed only tables, so visitors arriving from broad searches like "python ml library" got none of the which-one-to-pick guidance that each section's intro already gives.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-02 19:35:04 +08:00
Vinta ChenandClaude b6748825e6 style: give inline code in intros a chip appearance
Inline code in category intros and guides inherited the body font with no background, so identifiers like INSTALLED_APPS read as ordinary words.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-27 15:19:27 +08:00
Vinta ChenandClaude 77b1b70df5 fix: hide use-case and page tags that repeat the group heading
On section and subcategory pages, every row repeated its use case and current page as tags (and as the label under the name on phones), right under a heading that already said the same thing. They are now hidden in editorial order and shown again when a column sort flattens the groups.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-27 02:05:18 +08:00
Vinta ChenandClaude 62a4e7c4e5 fix: make tags link to category pages instead of filtering in place
Clicking a category or group tag filtered the homepage table in place while rewriting the address bar to the category URL, so one URL rendered two different pages and readers never reached category pages with their intros and guides; category pages also showed a redundant self-referential filter bar.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-27 00:34:07 +08:00
Vinta ChenandClaude 2b9469c0ae feat: group category page rows by use case, restructure intro
Category pages sorted rows by downloads, which buried editorial leads (the Django ORM showed as row 7 of 7, tkinter as 14 of 14) against CONTRIBUTING.md's "position is the marker"; the full intro in the hero pushed the table 2.5 screens down on a phone; and every page repeated the same "Search every project in one place" H2.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-26 23:33:57 +08:00
Vinta ChenandClaude a74ca52860 feat: render per-category intro text above the entry list
Category pages carried no text of their own beyond the README one-line description, and most meta descriptions fell back to a generic "Explore N curated Python projects" line, which correlated with weak search rankings for category queries. This adds optional per-category intro markdown files rendered under the H1, with the first paragraph used as the meta description and links opening in a new tab, starting with the ORM category.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-26 19:42:22 +08:00
Vinta Chen 8b14b4fd1e update styles 2026-08-16 20:25:19 +08:00
Vinta ChenandClaude cc804b1de2 feat: add Downloads/Month column to website table
Sourced from website/data/pypi_downloads.tsv the same way
github_stars.json feeds the stars column. The new sortable column
sits between GitHub Stars and Last Commit on the homepage and
category pages, formatted with thousands separators like stars, with
an em dash when no PyPI data exists. Rows are matched by normalized
README display name; Built-in entries never show counts since
same-named PyPI packages are stdlib backports (e.g. the asyncio
package).

Below 960px the column hides and the count moves into the expand
row, mirroring the existing Last Commit treatment. main.js gains the
downloads sort branch and URL param.

The deploy workflow fetches the TSV via the new
make fetch_pypi_downloads target with a daily actions/cache
fallback, mirroring the stars fetch, but non-fatal: the column
degrades to dashes when the fetch fails, unlike stars which the
build requires.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 17:52:04 +08:00
Vinta Chen c0b80fd75f fix: surface sponsorship link in header 2026-06-07 03:22:28 +08:00
Vinta Chen ee08cd7d86 update sponsorship webpage 2026-06-07 02:50:19 +08:00
Vinta ChenandClaude 138059feeb feat(website): add Awesome Python and Sponsorship links to footer
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 19:05:40 +08:00
Vinta ChenandClaude f57fc44295 style: bump tag font size to var(--text-xs) and codify 12px minimum font-size rule
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 18:54:23 +08:00
Vinta ChenandClaude fc8d1ba35e feat(website): show desc-row on index page when a filter is active
On category pages desc-rows are always visible. On the index page they
were always hidden. Now they become visible whenever a tag/category
filter is applied, giving filtered results the same richness as category
pages.

Also tightens two related CSS rules: border-bottom suppression only
fires when the adjacent desc-row is actually visible, and the expand-row
description is hidden while the desc-row is already showing to avoid
duplicate text.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 13:08:27 +08:00
Vinta ChenandClaude 1468ae78ff feat(website): show project description as always-visible desc-row on category pages
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 12:47:17 +08:00
Vinta ChenandClaude ee01a0bade refactor(website): extract render_category, replace slugify filter with filter_urls map
- Extract render_category() helper to deduplicate the three category/group/builtin
  rendering blocks in build.py
- Replace synthetic dict literals with synthetic_category() helper
- Rewrite subcategory rendering to avoid O(n²) loop using precomputed dicts
- Pass filter_urls (not just JSON) to templates so Jinja can look up group URLs
  directly instead of applying the slugify filter at render time
- Remove slugify from env.filters (no longer used in templates)
- Replace isIndexPage() wrapper with isIndexDocument constant in main.js
- Fix: call applyFilters() on page load when activeFilter is set
- Remove dead else branch in tag click handler (category pages with no URL)
- Switch .hero-category-links from CSS columns to CSS grid for more even layout
- Remove max-width cap on .category-subtitle

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 11:38:22 +08:00
Vinta ChenandClaude c68b985d7c feat(website): add /sponsorship/ landing page
Adds a dedicated sponsorship page at /sponsorship/ built from the Jinja2
template, with hero stats, tier cards, and CSS. Updates the index.html
sponsor sidebar link to point to /sponsorship/ instead of the GitHub
SPONSORSHIP.md. Adds the URL to the sitemap and test fixtures.

Also renames .impeccable.md to DESIGN.md.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 09:35:39 +08:00
Vinta ChenandClaude d64b47b910 feat(website): mirror index layout on category pages
Add search input, filter chips, no-results block, and back-to-top
button to category/group/subcategory pages. Pass filter_urls_json to
all page types so tag-chip navigation works site-wide. Fix JS so
filter-clear and no-results-clear redirect to / on non-index pages
instead of trying to filter a non-existent local table. Remove the
now-redundant .category-results CSS overrides.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 08:26:37 +08:00
Vinta ChenandClaude 033694204c feat(website): move descriptions into expand row on category pages
Removes inline .category-row-desc from the name cell and renders
entry.description inside .expand-content instead, matching the
index page pattern. Drops the now-unused CSS rules for
.category-row-desc and the overridden .category-table .expand-content
padding.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-03 08:17:17 +08:00
Vinta Chen 03db91bcd0 style(website): left-align results note on category pages
Switch justify-self from end to start so the "Sorted by GitHub stars..."
note sits flush left under the heading instead of right-aligned.
2026-05-03 08:02:39 +08:00
Vinta Chen 1139402838 fix(website): stop category-page heading from wrapping
The results-intro grid (1fr + 28rem note column) squeezed the heading on
category pages with long names, e.g. "Python Projects in Environment
Management" wrapped onto two lines.

Scope a single-column override to .category-results so the heading takes
the full row and the note drops below right-aligned. Index page layout
is untouched since its heading is short.
2026-05-03 08:01:37 +08:00
Vinta ChenandClaude Opus 4.7 20df47e1e9 style(website): add CSS for category-breadcrumb and assert absence on parent
Mirrors the .category-subtitle a underline style for visual cohesion in
the hero, and locks in the gating behavior with a negative assertion so
a regression that drops the page_kind guard would be caught.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 00:30:56 +08:00
Vinta Chen 7fadbaf6fe feat(website): add homepage category directory 2026-05-02 23:44:27 +08:00
Vinta Chen b00395a301 add missing links of category descriptions 2026-05-02 23:35:24 +08:00
Vinta Chen e11afd1730 feat(website): generate static category pages 2026-05-02 23:31:08 +08:00