On phones the label under each project name showed its subcategory, and names like "General", "Synchronous", or "Core" only make sense under their category heading, so the home and group tables showed vague labels.
Co-Authored-By: Claude <noreply@anthropic.com>
The payment methods listed card via Open Collective first, ahead of the options sponsors are pointed to first.
Co-Authored-By: Claude <noreply@anthropic.com>
On phones the "Top ↑" header button was wider than the row arrows, so it set the arrow column's width and left a wide gap between the downloads number and the arrow.
Co-Authored-By: Claude <noreply@anthropic.com>
The "Browse by category" markup was duplicated in index.html and category.html, and the two copies had drifted.
Co-Authored-By: Claude <noreply@anthropic.com>
Group pages rendered "Browse by category" with a plain div heading instead of the homepage's details/summary, so the two-column grid never applied, the arrow showed but did nothing, and the list didn't collapse on phones.
Co-Authored-By: Claude <noreply@anthropic.com>
Google Fonts loaded async with display=swap, so every first paint showed Georgia and Avenir Next and then visibly switched to the web fonts mid-read.
Co-Authored-By: Claude <noreply@anthropic.com>
Arrow glyphs on rows, jump links, sort headers, and the category toggle, plus the search icon, were exposed to assistive tech, adding noise to every row and link name.
Co-Authored-By: Claude <noreply@anthropic.com>
The hint's column capped at 28rem, so "Press / to search. Tags open their category. Click a row for details." wrapped to two lines beside the heading.
Co-Authored-By: Claude <noreply@anthropic.com>
Sections faded and slid in as they scrolled into view, so screenshots and quick scrolls caught the sponsor band and search box half-drawn.
Co-Authored-By: Claude <noreply@anthropic.com>
The homepage printed each description inside its expanded row as .expand-desc, styled apart from the .desc-row that category pages use, so every spacing change to the table had to be tuned twice. The homepage now reveals the same .desc-row while a row is open, so its descriptions take the category pages' 15.2px size, and the .expand-desc markup and styles are gone.
Co-Authored-By: Claude <noreply@anthropic.com>
Copy told visitors to tap a tag to filter and mentioned a filter although tags are plain links and no filter exists; casing and terminology were inconsistent.
Co-Authored-By: Claude <noreply@anthropic.com>
"Indie Dev from $99 a month" put "from" on one tier although every tier discounts longer terms, the duration line listed terms the tier cards don't price, and the independence note left out the site placement.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
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>
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>
The sponsor copy bolded two phrases in the README call to action, repeated tier prices already in the tier headings, repeated one phrase across three Content tiers, and had a double "or" in the Duration line.
Co-Authored-By: Claude <noreply@anthropic.com>
SPONSORSHIP.md tells sponsors their links carry UTM tags, but the /sponsorship/ page, which mirrors it, left that out.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
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>
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>
The sponsor band rendered only on the homepage, so visitors who entered on a category page and never opened the homepage saw no sponsors. Category, subcategory, group, and Stdlib pages now show the same band between the hero and the table.
Co-Authored-By: Claude <noreply@anthropic.com>
The sponsor band markup lived inline in index.html, so another page could show it only by copying the markup. The rendered homepage is byte-identical.
Co-Authored-By: Claude <noreply@anthropic.com>
Featured cost $200/month, about twice Indie Dev's $99, yet offered the same text-only README entry and website link, leaving little visible reason to pick it over Indie Dev. Featured now includes a small logo next to its README entry and a logo on the website, and the Get Started content list asks Featured sponsors for a logo.
Co-Authored-By: Claude <noreply@anthropic.com>
The README sponsor CTA linked to SPONSORSHIP.md, so sponsor-page visits from the README never reached GA4.
Co-Authored-By: Claude <noreply@anthropic.com>
Mailto clicks on the sponsorship page leave no page view, so the sponsor funnel ended at the sponsorship page and never showed who went on to email. Each click now sends a sponsor_contact event with a short tier value (headline, featured, indie, or general) rather than the link URL, since GA4 caps event parameter values at 100 characters and the Indie Dev mailto href is 101.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
Redirect stubs for renamed category URLs carried a robots noindex meta, so Search Console filed them under "Excluded by 'noindex' tag" instead of treating the instant meta refresh as a permanent redirect, and the old URLs' ranking was not passed to the new pages.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
Homepage description rows carried aria-hidden="true" on top of hidden, unlike category pages (fixed in 528f9ed); the hidden attribute alone already keeps them from assistive tech while hidden.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
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>
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>
Every entry description row carried aria-hidden="true", hiding descriptions that sighted readers can see from screen readers.
Co-Authored-By: Claude <noreply@anthropic.com>
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>