Commit Graph

170 Commits

Author SHA1 Message Date
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
Vinta Chen 57f189b004 style(css): use white-space nowrap for .col-name instead of fixed width
Removes the 28% fixed width and overflow-wrap on the project name column.
white-space: nowrap lets the column size naturally to its content instead
of forcing wrapping at an arbitrary width.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:59:57 +08:00
Vinta Chen 8271b7c672 style: lighten footer separator color from 40% to 55% lightness
Increases contrast and visibility of the footer separator on light backgrounds.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:59:07 +08:00
Vinta Chen 315c18805f Revert "style(css): add margin and border-top separator above final CTA section"
This reverts commit f528177313.
2026-03-22 14:57:41 +08:00
Vinta Chen 3bfa49b24a style(footer): redesign footer with dark background and brand label
Replace the light frosted-glass footer with a dark-themed one using
oklch colors. Add link hover states, a footer-brand element showing
'Awesome Python', and switch alignment to space-between to accommodate
the new brand label.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:57:13 +08:00
Vinta Chen f528177313 style(css): add margin and border-top separator above final CTA section
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:55:16 +08:00
Vinta Chen 00b924d824 style(css): lighten hero muted text color for better legibility
Increases --hero-muted lightness from 84% to 88% so secondary hero
text has more contrast against the dark hero background.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:54:31 +08:00
Vinta Chen 003d05bc26 style: stack hero metrics to single column on mobile
Remove the 2-column grid constraint so metrics flow into a
single-column layout on smaller viewports.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:54:00 +08:00
Vinta Chen 15df04ea23 copy: tighten website microcopy for clarity
Shorten metric labels, simplify section headings, rewrite
CTA and noscript message to be more direct and less verbose.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:45:16 +08:00
Vinta Chen 800d698b46 style: fix expand-content font size and unify CTA copy
Set explicit font-size on .expand-content to prevent it inheriting
a smaller size from context. Standardize the two call-to-action labels
to "Submit a project" (lowercase, consistent phrasing).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:31:16 +08:00
Vinta Chen 680de45c00 style(css): increase hero h1 font size on desktop and mobile
Grow the hero heading clamp range (4rem->4.5rem min, 7.5rem->8.5rem max on
desktop; 3.2rem->3.6rem min, 4.8rem->5.2rem max on mobile) for a bolder
visual impact in the redesigned homepage.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:27:51 +08:00
Vinta Chen 951d233a65 refactor(css): extract font-size magic numbers into CSS custom properties
Replace hardcoded font-size values (0.78rem, 0.76rem) with named tokens
--text-label and --text-tag so they are easy to find and change in one place.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 14:27:41 +08:00
Vinta Chen 3e7ff12614 Fix sticky top button behavior 2026-03-22 14:17:17 +08:00
Vinta Chen 39a2abbfcc style: polish website hero and table UI 2026-03-22 14:05:10 +08:00
Vinta Chen 06a5a701a0 style: refine website footer and heading 2026-03-22 08:05:25 +08:00
Vinta Chen 7d1d9e0af3 feat: redesign website homepage 2026-03-22 07:54:14 +08:00
Vinta Chen 49fafd3497 refactor(website): move back-to-top button into sticky table header
Replaces the fixed-position floating button with an inline button
inside the last column of the sticky table header. Removes the hidden
attribute toggle and float positioning in favour of opacity/pointer-
events toggling, keeping the visibility logic intact.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:28:16 +08:00
Vinta Chen 818950f442 fix(website): fix sticky header on mobile and add border shadow
Move overflow-x: auto from .table-wrap to the mobile breakpoint only,
so horizontal scrolling only applies on small screens. Add box-shadow
to sticky thead th for visual separation. Reset th position to static
on mobile to avoid stacking context issues.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:25:58 +08:00
Vinta Chen 1d05e98537 fix(website): make back-to-top scroll instant instead of smooth
The smooth scroll behavior felt sluggish on a 505-row page. Instant
jump is more responsive for a utility button.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 02:24:26 +08:00
Vinta Chen bdc5c6c5d7 style(website): remove hero-in entrance animation
The animation added a slight stutter on page load without meaningful UX benefit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:23:31 +08:00
Vinta Chen b6bcb2c7e3 feat(website): add entrance animations and CSS-based filter bar visibility
Replace hidden attribute on filter-bar with opacity/transform transition
driven by a .visible class, allowing smooth fade-in/slide-down when a
filter is active. Add staggered hero-in keyframe animations to the page
title, subtitle, action buttons, and search box. Polish sortable table
headers with color transition on hover and active states.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:22:07 +08:00
Vinta Chen 7be5e77186 fix(website): reduce tooltip transition duration from 0.25s to 0.15s
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:20:07 +08:00
Vinta Chen 49eae1aba3 fix(website): center back-to-top button using left/margin instead of right
Previously used right: max(1.5rem, calc(50vw - 700px + 0.5rem)) which
caused the button to overlap content at certain viewport widths. Switch
to left: 50% with margin-left: -2rem to keep it centered relative to
the viewport without interfering with sidebar or content layout.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:19:40 +08:00
Vinta Chen 7aeb8fbb65 feat(website): add back-to-top button
Adds a fixed-position button that fades in after scrolling 600px and
smoothly scrolls back to the top on click. Hidden by default via the
HTML hidden attribute so noscript users never see it.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:17:57 +08:00
Vinta Chen 4f297a5301 fix(website): sort starred stdlib entries after starred non-stdlib entries
Within the same star count, built-in (stdlib) entries were interleaved
with third-party entries. Add a builtin tier to the sort key so stdlib
entries always rank below non-stdlib entries at equal star counts.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:15:22 +08:00
Vinta Chen d3317bf3c9 feat(website): add Built-in category tag for stdlib entries
Stdlib entries now show a "Built-in" tag alongside their regular
category tag. The tag is clickable and filters to all 17 stdlib
entries. Added to data-cats attribute so existing filter logic works.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 02:12:51 +08:00
Vinta Chen 37a9443bbb fix(website): map built-in entries to cpython for star data lookup
Entries with source_type 'Built-in' have no extractable GitHub repo key
from their URL, so they never received star/metadata enrichment. Fall
back to python/cpython for these entries so the star count and related
data are populated correctly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:10:44 +08:00
Vinta Chen 8e7b881659 fix(website): key dedup by (url, name) to allow same-url different-name entries
Previously, two entries sharing the same URL but different names would be
collapsed into one. Using a composite (url, name) key preserves distinct
entries while still merging true duplicates.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:08:42 +08:00
Vinta Chen bfaa207ef3 refactor(website): rename stdlib source type label to Built-in
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:04:45 +08:00
Vinta Chen 666f6e52d0 feat(website): add source type badges for non-GitHub entries
Detect the hosting source (stdlib, GitLab, Bitbucket, External) from
the entry URL and surface it as a small badge in the stars column where
a star count would otherwise show an em dash.

Stdlib entries also get their own sort tier — between starred entries
and other no-star entries — so the standard library is not buried at
the bottom of each category.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 02:03:00 +08:00
Vinta Chen 81074548b5 test: lower category count floor to 69 to match current README
Several sections were removed in recent cleanup commits, so the previous
floor of 76 was no longer accurate.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 01:32:32 +08:00
Vinta Chen d78c2f785f refactor(website): hoist loop-invariant variables outside the fetch loop
now_iso and total_batches were recomputed on every iteration. Moving them
above the loop makes intent clearer and avoids redundant work. Also
simplifies cache dict construction with dict unpacking.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 01:32:26 +08:00
Vinta Chen 3d9c2ae507 perf(website): cache sort values and batch DOM appends in sortRows
Calling getSortValue inside the comparator ran DOM queries on every
comparison (O(n log n) reads). Hoisting into a forEach beforehand reduces
that to O(n). Batching row appends through a DocumentFragment also avoids
repeated reflows during table reorder.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 01:32:21 +08:00
Vinta Chen d36f1ed8d1 refactor(website): remove unused Entry TypedDict, write llms.txt from parsed text
Entry was dead code with no callers. Switching from shutil.copy to
write_text uses the already-loaded readme_text variable directly instead
of re-reading the file from disk.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-22 01:32:17 +08:00
Vinta Chen 4322026817 refactor: parse thematic groups from README bold markers instead of hardcoding them
The website builder previously relied on a hardcoded SECTION_GROUPS list in
build.py to organize categories into thematic groups. This was fragile: any
rename or addition to README.md required a matching code change.

Replace this with a parser-driven approach:
- readme_parser.py now detects bold-only paragraphs (**Group Name**) as
  group boundary markers and groups H2 categories beneath them into
  ParsedGroup structs.
- build.py drops SECTION_GROUPS entirely; group_categories() now just
  passes parsed groups through and appends the Resources group.
- sort.py is removed as it relied on the old flat section model.
- Tests updated throughout to reflect the new (groups, resources) return
  shape and to cover the new grouping logic.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-20 18:43:09 +08:00
Vinta Chen 18011f86f3 feat: merge duplicate entries across multiple categories
Entries appearing in more than one category were previously emitted as
separate rows. They are now deduplicated in build.py by URL, collecting
all category and group names into lists.

The template encodes those lists as pipe-delimited data attributes
(data-cats, data-groups) and renders a tag button per category.
The JS filter is updated to split on '||' and check for membership,
so clicking any category tag correctly shows the merged row.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-20 17:02:22 +08:00
Vinta Chen 716464e726 fix: improve CSS polish with active states, font smoothing, and text wrapping
Add active-state press feedback (scale transform) to buttons, filter clear,
and tags. Add moz-osx-font-smoothing for consistent antialiasing on Firefox/Mac.
Apply text-wrap: balance to headings and text-wrap: pretty to body text and
expanded row descriptions. Add text-underline-offset to links and highlight
active table rows with bg-hover.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:41:56 +08:00
Vinta Chen 4ea3134ba3 fix: move group tag into category cell and hide on mobile
- Relocate group tag from expand row to category column so it appears inline beside the category tag
- Add margin between stacked tags with .col-cat .tag + .tag spacing rule
- Remove fixed width from .col-cat; narrow .col-name from 35% to 30% to give category column room
- Hide .tag-group on screens ≤900px and widen .col-name to 50% to reclaim space

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:36:40 +08:00
Vinta Chen e967722a5d fix: improve mobile table layout with auto sizing and tighter spacing
Switch table-layout back to auto on mobile to let columns size naturally,
add uniform cell padding overrides, shrink num/arrow columns further,
pin stars column width, reduce edge padding, and left-align the number
column to avoid awkward right-aligned single digits.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:24:23 +08:00
Vinta Chen ca350ebaf9 fix: use table-layout fixed on mobile to prevent column width inflation
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:11:23 +08:00
Vinta Chen fb2a693dbb fix: reduce number and arrow column widths on mobile for tighter table layout
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:05:34 +08:00
Vinta Chen ac9b69a0b2 fix: reduce table padding on mobile for better centering and arrow visibility
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-19 02:00:07 +08:00
Vinta Chen 926ba010b7 chore: split AI & Data into AI & ML and Data & Science
AI & ML: AI and Agents, Machine Learning, Deep Learning, Computer Vision,
Natural Language Processing, Recommender Systems, Robotics.

Data & Science: Data Analysis, Data Validation, Data Visualization,
Geolocation, Science, Quantum Computing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 01:55:18 +08:00
Vinta Chen 8b518664d8 chore: redistribute Specialized group across existing groups
Remove the Specialized catchall group. Redistribute its categories:
- Web & API: Admin Panels, CMS, Email, Static Site Generator, URL Manipulation
- AI & Data: Geolocation, Robotics
- Content & Media: Game Development, Internationalization
- System & Runtime: Date and Time, Hardware, Microsoft Windows
- Development Tools: Algorithms and Design Patterns

Only Miscellaneous remains ungrouped (falls into Other).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 01:54:46 +08:00