Commit Graph

2206 Commits

Author SHA1 Message Date
Vinta Chen
cf9cde8e8f fix(css): use display:none for expand-row first/last cells on mobile
Replaces the width/padding/overflow hack with a clean display:none.
The previous approach collapsed the cells to zero size but kept them
in the layout flow; display:none removes them entirely.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 13:00:40 +08:00
Vinta Chen
63182f23ab Revert "feat(css): add external link indicator for inline text links"
This reverts commit 65bc88bb4e.
2026-03-24 12:56:47 +08:00
Vinta Chen
7df2e36334 feat(mobile): show last commit date in expand row on mobile
Add an expand-commit span inside the expand row that displays the last
commit date. Hidden on desktop, visible only on mobile (max-width: 960px)
via media query, mirroring the commit column that appears in the full
table. Relative time formatting is applied via JS on page load.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:56:04 +08:00
Vinta Chen
f1799c2a44 perf(fonts): defer Google Fonts load to avoid render-blocking
Use media='print' + onload swap trick to load the stylesheet
non-blocking. Add noscript fallback for JS-disabled browsers.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:55:04 +08:00
Vinta Chen
ec5687a8f1 fix(css): use overflow-x clip on table-wrap instead of static thead on mobile
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:54:37 +08:00
Vinta Chen
6050b65fb7 fix(a11y): use descriptive screen reader label for row number column
Replace the generic '#' sr-only text with 'Row number' so screen
readers announce a meaningful column header instead of a bare symbol.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:54:05 +08:00
Vinta Chen
0e2c7fcd82 fix(a11y): enlarge tag touch target to meet 44px WCAG minimum
Expand the .tag::after pseudo-element inset and add explicit min-height/
min-width of 44px so the interactive hit area satisfies WCAG 2.5.5. Also
nudge mobile tag padding and font-size slightly for visual consistency.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:53:43 +08:00
Vinta Chen
65bc88bb4e feat(css): add external link indicator for inline text links
Appends a small northeast arrow (↗) after target="_blank" anchors
in hero subtitle, expand description, expand also-see, and footer
sections to signal outbound navigation to keyboard and sighted users.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:52:59 +08:00
Vinta Chen
e06cb93fdc fix(css): expand sort header hit area to full th cell
Move cursor/hover/user-select styles from .sort-btn to th[data-sort]
so the entire column header cell is the interactive target, not just
the button text node.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:49:30 +08:00
Vinta Chen
088680e568 fix(css): correct mobile expand-row hiding for col-cat vs expand-row cells
col-cat and expand-row cells need different treatment on mobile:
- col-cat uses display:none (whole column hidden)
- expand-row first/last cells collapse via width/padding/overflow
  rather than display:none to avoid breaking table layout

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:40:22 +08:00
Vinta Chen
dd3b2cc0e6 docs: remove hardcoded entry count from sponsorship description
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:40:18 +08:00
Vinta Chen
2e5a56723d fix(css): limit hero sheen animation to 3 iterations
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:39:12 +08:00
Vinta Chen
86885bc67a fix(a11y): wrap sort column headers in button elements
Table sort triggers were bare th elements, which are not keyboard
focusable or announced as interactive by screen readers. Replace with
button elements inside th so keyboard users can activate sorting and
get proper focus-visible ring.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:38:19 +08:00
Vinta Chen
d58c915a0b fix(a11y): respect prefers-reduced-motion in back-to-top scroll
Swap the hardcoded 'smooth' scroll behavior for a runtime check so users
who have enabled reduced-motion in their OS get instant (auto) scrolling
instead of the animated kind.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:37:36 +08:00
Vinta Chen
db83de1b42 Revert "perf: self-host Google Fonts to eliminate render-blocking external request"
This reverts commit f91c8fa979.
2026-03-24 12:35:56 +08:00
Vinta Chen
2bdd0c2c80 fix(a11y): bump hero-proof text lightness from 68% to 75% for WCAG AA contrast
The "Xk+ stars on GitHub / Updated ..." text at oklch(68%) on the dark
hero gradient (oklch 14-28%) could dip below 4.5:1 contrast at the
darkest portions. Raising to oklch(75%) ensures the ratio stays above
4.5:1 across the full gradient range.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:32:38 +08:00
Vinta Chen
f91c8fa979 perf: self-host Google Fonts to eliminate render-blocking external request
Download Cormorant Garamond 600 and Manrope (variable, 400-800) woff2
files for latin + latin-ext subsets. Add @font-face declarations to
style.css and remove the Google Fonts <link> and preconnect hints from
base.html.

Eliminates the render-blocking CSS fetch to fonts.googleapis.com that
delayed First Contentful Paint by 100-300ms on typical connections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:32:25 +08:00
Vinta Chen
440a7c86d4 docs: rewrite SPONSORSHIP.md with clearer structure and comparison table
Rewrites the sponsorship page to be more direct and persuasive:
- Reframes intro as facts rather than first-person claims
- Renames 'By the Numbers' to 'Audience' and adds who the visitors are
- Expands tier descriptions with explicit bullet lists of deliverables
- Cleans up past sponsors section formatting
- Simplifies the closing call to action

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:30:34 +08:00
Vinta Chen
60836d00a1 refactor(css): extract inline OKLCH values into CSS custom properties
Add 23 design tokens to :root for colors previously hardcoded inline:
hero text (kicker, proof), hero background gradient, hero button gradient,
accent underline (shared across 3 rules), page background gradient,
table row states (hover, focus, open), sticky header bg, search shadows
and focus ring, tag states, and CTA background.

Decorative one-off values (hero noise, sheen, grid overlay) left inline
since they are tightly coupled to their visual effects.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:30:22 +08:00
Vinta Chen
8861bcc05d feat: add Open Graph image for social sharing
Adds og-image.png and og-image.svg assets and wires up the og:image
meta tag in base.html so link previews on Twitter/X, Slack, and other
platforms render a branded image instead of a blank card.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-24 12:22:35 +08:00
Vinta Chen
e71f38ef4e test: add coverage for detect_source_type, format_stars_short, extract_entries, and last_commit_at parsing
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 02:25:44 +08:00
Vinta Chen
aa2e742c56 remove Python Test podcast (ended Aug 2025)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 02:20:02 +08:00
Vinta Chen
4676684e26 Merge pull request #2984 from 23f2000649-a11y/master
Fix http to https for PIL and ImageMagick links
2026-03-23 02:15:37 +08:00
Vinta Chen
4a1f899995 fix(css): increase kicker and section-label size and spacing
Bump margin-bottom from 0.9rem to 1.5rem and font-size from
--text-xs to --text-sm for .hero-kicker and .section-label to
improve readability and visual breathing room.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 02:09:36 +08:00
Vinta Chen
80a72af5df add header 2026-03-23 02:09:05 +08:00
Vinta Chen
f27b7c80fb feat(website): add social proof line to hero with star count and build date
Display the awesome-python repo's star count (formatted as '230k+') and
the last data refresh date below the hero CTA. Fetches the self-repo
star count by always including vinta/awesome-python in the stars fetch.
Also removes the footer date stamp, which is now surfaced in the hero.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:56:15 +08:00
Vinta Chen
25a3f4d903 refactor(parser): remove resources parsing, preview, and content_html fields
parse_readme now returns list[ParsedGroup] instead of a tuple. The
resources section (Newsletters, Podcasts), preview string, and
content_html rendering are no longer produced by the parser or consumed
by the build. Removes _render_section_html, _group_by_h2, and the
associated dead code and tests.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:43:19 +08:00
Vinta Chen
c5dd3060ef chore: add __pycache__ to .gitignore and remove sys.path hack in tests
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:43:12 +08:00
Vinta Chen
028c642a8e refactor(js): replace var with let/const and use double quotes
Modernize variable declarations and string literals in main.js for
consistency and to signal immutability intent. Pure style change with
no behavioral differences.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:34:33 +08:00
Vinta Chen
31fa9a4c38 fix(css): reduce tag badge size and spacing 2026-03-23 01:32:55 +08:00
Vinta Chen
bb40861e0e refactor(html): remove tag-subcat class and inline button attributes 2026-03-23 01:26:26 +08:00
Vinta Chen
749610d6db docs(readme): rename 'Web' section header to 'Web Development' 2026-03-23 01:21:40 +08:00
Vinta Chen
e1a88410d3 fix(parser): strip trailing separators and links from subcategory labels
Type Checkers heading now reads 'Type Checkers - [awesome-python-typing](...)'
where a link follows the separator. The old code passed all inline children to
render_inline_text, which included the link URL in the label. Now we take only
the text nodes before the first link and strip trailing punctuation/separators
so the rendered subcategory label is clean.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:19:05 +08:00
Vinta Chen
1732a3f29e docs(readme): reorganize Code Quality categories and rename CLI/Office sections
- Add ruff under Code Formatters
- Move Refactoring above Type Checkers
- Rename 'Static Type Checkers' to 'Type Checkers' and drop 'also see' inline text
- Rename 'Static Type Annotations Generators' to 'Type Annotations Generators'
- Rename 'Command-line Interface Development' to 'CLI Development'
- Rename 'Command-line Tools' to 'CLI Tools'
- Rename 'Office' subcategory to 'MS Office'

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:19:00 +08:00
Vinta Chen
f6cea0599a fix(css): remove unused tag-subcat styles
The .tag-subcat class was removed from the HTML templates but its
CSS rules remained. Remove the orphaned base styles and clean up
the mobile media query that also referenced the class.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:12:57 +08:00
Vinta Chen
0c26d352f0 fix(website): scope subcategory filter values to parent category
Subcategories with the same name (e.g. 'Frameworks') across different
top-level categories were sharing a filter value, so clicking one
subcategory tag would match entries from unrelated categories.

Each subcategory now stores both a display name and a scoped value
('Category > Subcategory') used for data-cats matching. The template
renders the display name on tags and mobile-cat span, but uses the
scoped value for filtering. Subcategory tags are also moved before
category tags so the most-specific label appears first.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:11:35 +08:00
Vinta Chen
964f246d86 docs(readme): rename subcategory to CLI Development
Shorten the verbose heading to match the concise style used in other
categories.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:11:25 +08:00
Vinta Chen
cba7042e94 fix(readme): rename trailofbits entry to trailofbits-skills
Use the GitHub repo name as the display name per the entry format
guidelines, since trailofbits-skills is not on PyPI.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:11:12 +08:00
Vinta Chen
f2b4a7bc83 feat(website): surface subcategory labels as filterable tags
Entries nested under a plain-text subcategory heading (e.g. "Frameworks"
inside Testing) now carry a subcategory field populated by the parser.
The build pipeline collects these into a subcategories list on each merged
entry, and the template renders them as tag-subcat buttons that plug into
the existing data-cats filter mechanism.

A dedicated .tag-subcat style distinguishes them visually from category
tags, and both are hidden on mobile alongside .tag-group.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:04:20 +08:00
Vinta Chen
1c249d4b5f docs(readme): rename Testing Frameworks subcategory to Frameworks
Shorter label that reads more naturally in the context of the Testing
section, which already scopes it to testing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 01:04:13 +08:00
Vinta Chen
394803d2be docs(readme): add agent skills entries
Add Python-focused descriptions for Trail of Bits, Sentry Skills, and Django AI Plugins in the AI and Agents section.
2026-03-23 00:58:31 +08:00
Vinta Chen
25d3f307cc docs(readme): reword sponsorship tagline
Replace 'where Python developers discover tools' with 'in front of Python developers' for cleaner, more direct phrasing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 00:25:35 +08:00
Vinta Chen
3395b2e428 fix(css): enable table horizontal scroll at 768px breakpoint
Moves .table-wrap overflow-x rule from the 680px breakpoint to 768px
so the table becomes scrollable before it gets too narrow to read.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-23 00:09:06 +08:00
Vinta Chen
88031d78a5 fix(css): center footer on mobile
Consolidate two conflicting mobile footer rules into one, setting
flex-direction to column, align-items to center, and text-align to
center so the footer is symmetrically centered on narrow viewports.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 23:58:54 +08:00
Vinta Chen
dbff2522c8 fix(css): hide last column in expand-row on mobile
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 23:52:31 +08:00
Vinta Chen
a92b1a6e86 fix(css): fix hero topbar layout on small screens
Split hero-topbar and footer selectors to apply distinct responsive
styles. The topbar now uses a horizontal row layout with nowrap so
the nav link does not stack vertically, while hero-topbar-actions
and hero-topbar-link get auto widths to avoid stretching full-width.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 23:42:18 +08:00
Vinta Chen
7d1007d373 docs(claude): clarify repo description and entry naming rule
Reword the overview from 'curated list' to 'opinionated list' to better
reflect editorial intent. Rename 'pypi-name' placeholder to 'project-name'
and add a rule for projects not published on PyPI.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:44:18 +08:00
Vinta Chen
1b5a0c2a3c docs(claude): expand project structure and entry format docs
Documents the website/ build pipeline, Makefile targets, pyproject.toml
tooling, and tightens the entry format example and key rules.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:41:42 +08:00
Vinta Chen
8fbe0e0394 fix(readme): sort tinycss2 alphabetically in HTML/XML section
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:41:36 +08:00
Vinta Chen
ef51d9a7aa refactor(html-xml): replace cssutils with tinycss2
cssutils is unmaintained; tinycss2 is the actively maintained
low-level CSS parser and generator for Python.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:38:48 +08:00