2186 Commits

Author SHA1 Message Date
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
Vinta Chen
f11468b262 remove(readme): remove python-cqrs from Design Patterns
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:36:55 +08:00
Vinta Chen
a12fef4e54 refactor(results): remove redundant "Library index" section label
The heading "Search every project in one place" already communicates
the section's purpose. The label above it was visual noise.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:30:14 +08:00
Vinta Chen
014ba9e394 refactor(hero): remove redundant scroll cue
The "Jump to the list" anchor duplicated the "Browse the List" button.
Removes the element, its CSS rules, the scroll-line keyframe animation,
and cleans up the offscreen pause and focus-visible selector lists.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:29:47 +08:00
Vinta Chen
321df7b78c refactor(hero): remove metrics block from hero section
The projects/categories/topic groups stats added visual clutter to the
hero without contributing to the core purpose of the section.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:28:44 +08:00
Vinta Chen
9447870715 feat(html): add theme-color meta tag for browser UI chrome
Sets the mobile browser toolbar color to match the dark footer/page
background (#1c1410), preventing a jarring white chrome flash on load.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:26:33 +08:00
Vinta Chen
3954a3e742 refactor(css): extract footer color values into CSS custom properties
Hardcoded oklch() values in footer rules are replaced with named tokens
(--footer-bg, --footer-text, --footer-link, --footer-link-hover,
--footer-muted, --footer-sep) declared in :root. No visual change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:26:27 +08:00
Vinta Chen
7fa0a425dc fix(css): remove outline:none suppression from .row:focus-visible td
Suppressing the outline on a focus-visible rule is self-defeating —
it opts into the intent-based focus ring selector but then hides it.
The row already receives a visible inset box-shadow on focus, so the
outline:none was redundant and harmful to keyboard accessibility.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:25:04 +08:00
Vinta Chen
895da326f6 refactor(css): remove unused --bg-hover and --hero-shadow tokens
Neither variable was referenced anywhere in the stylesheet.
Removing dead tokens keeps the design token surface minimal.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:24:54 +08:00
Vinta Chen
58c0fd9e45 fix(css): extend focus-visible outline to no-results-clear and footer links
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:23:41 +08:00
Vinta Chen
f2b635da19 fix(css): truncate long links in expand-meta and add mobile padding to expand-row
.expand-meta links can overflow their container on narrow viewports.
Apply ellipsis truncation to keep the row tidy.

.expand-row td[colspan] gains symmetric inline padding on mobile to match
the surrounding table spacing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:20:52 +08:00
Vinta Chen
86aa623260 fix(css): increase tag padding on mobile breakpoint
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:20:14 +08:00
Vinta Chen
6648961d7b fix(css): hide col-num and expand-row first-child at col-cat breakpoint
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:19:38 +08:00
Vinta Chen
80a5051195 fix(css): increase expand meta/also-see font size to --text-sm
--text-xs was too small for secondary metadata rows; bump to --text-sm
for better readability.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:16:36 +08:00
Vinta Chen
302ae14c2d refactor(css): remove backdrop-filter blur from table header
Drops the blur(14px) backdrop-filter on the sticky table header and
raises the background opacity from 0.92 to 0.97 so the header remains
clearly readable without the compositing overhead.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:14:56 +08:00
Vinta Chen
50e27b992f perf(css): add CSS containment to results section and detail panel
Apply contain: layout style to .results-section and
contain: layout style paint to the detail panel element to reduce
browser layout recalculation scope during search interactions.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:14:11 +08:00
Vinta Chen
80a5596b11 perf(hero): pause animations when hero scrolls out of view
Uses IntersectionObserver to toggle an .offscreen class on the hero
element, which sets animation-play-state: paused on the sheen, noise,
and scroll-cue animations. Avoids unnecessary GPU work while the hero
is not visible.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:13:08 +08:00
Vinta Chen
e960d47b3f perf(fonts): trim Google Fonts to weights in use
Narrowed the Cormorant Garamond request to 600 only and Manrope to
400/600/700/800, removing the unused 500 and 700 variants. Added
font-weight: 600 to .final-cta h2 so the heading explicitly uses
the retained weight.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:12:10 +08:00
Vinta Chen
4bb9c1240b fix(website): accessibility and defensive layout improvements
- Add aria-sort attributes to table header on sort state changes
- Replace .table-wrap:focus outline:none with focus-visible outline
- Move noscript message above the fold into main, before content
- Upgrade hero-topbar div to nav with aria-label for landmark semantics
- Remove role=button from tr elements (invalid ARIA on native elements)
- Fix back-to-top button label and text (was labelled 'Back to search')
- Switch font-size from 16px to 100% to respect user browser preferences
- Add overflow-wrap and word-break to .col-name and description cells

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:10:14 +08:00
Vinta Chen
cd3c8ad076 refactor(css): consolidate --text-label and --text-tag into --text-xs
Both variables mapped to near-identical small-text sizes already covered
by --text-xs. Remove the redundant variables and migrate all call sites,
including two remaining hardcoded rem values, to the shared token.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 16:03:47 +08:00
Vinta Chen
df2191fc05 refactor(build): remove unused group_categories wrapper
group_categories only ever appended a Resources group when the
resources list was non-empty. All call sites passed an empty list,
making it a no-op indirection. Inline parsed_groups directly and
remove the dead code along with its tests.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:58:42 +08:00