Commit Graph

113 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
Vinta Chen
5fc022d595
refactor(build): remove resources from build pipeline
Resources are no longer passed through parse_readme, group_categories,
or the index template — they are replaced with empty lists and the
unused variable is prefixed with an underscore.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:45:18 +08:00
Vinta Chen
53d280ddcf
fix(css): scope final-cta grid to inner section-shell wrapper
Move display:grid and gap from .final-cta to .final-cta > .section-shell
so the grid context is applied to the correct container element, not the
outer section. Wrap final-cta content in index.html with a section-shell
div accordingly. Also fix .no-results bottom padding that was missing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:37:59 +08:00
Vinta Chen
38412182e7
style: increase footer vertical padding from 2rem to 3rem
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:32:35 +08:00
Vinta Chen
1e8c432ec9
style(search): use 'projects' instead of 'libraries' in search placeholder
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:31:41 +08:00
Vinta Chen
9d89df3e73
fix: back-to-top button scrolls to search input and focuses it
When results are visible, clicking the button previously scrolled to
the results section. It now targets the search input instead, scrolls
it into view centered, and focuses it so the user can immediately type
a new query. Button label updated from 'Top' to 'Search' to reflect
the new destination.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:31:04 +08:00
Vinta Chen
d3070b735e
feat: add build date to footer
Displays the UTC date the site was last built in the footer so visitors
can see how fresh the data is.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:30:04 +08:00
Vinta Chen
97f18d295f
feat: add clear action to no-results message
When a search or filter yields no results, the message now includes
an inline button that resets both the search input and the active
filter. Improves discoverability and reduces dead-end frustration.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:28:25 +08:00
Vinta Chen
0308fd1b3c
feat: show category label on mobile in project name column
On narrow screens the category column is hidden. This adds a .mobile-cat
span inside the name cell that renders the first category below the
project name, giving mobile users the context they were missing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:26:36 +08:00
Vinta Chen
5a8c565a88
style(css): add background color to final-cta section
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:24:24 +08:00
Vinta Chen
73f77039f2
fix(template): show group tag before built-in source tag
Reorder tag buttons so the group tag appears before the source type tag,
giving it higher visual priority in the entry row.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:10:40 +08:00
Vinta Chen
ec2928b510
style(css): add decorative underline on link hover states
Give links across hero, table entries, expand panel, and footer a
semi-transparent underline on hover using text-decoration-color and
text-underline-offset, so interactive affordances are more visible
without changing the base text color. Hero sub-links are split into
their own rule to carry the additional underline style independently.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:08:49 +08:00
Vinta Chen
bc5f444658
style(css): vertically center table body cells
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 15:03:22 +08:00