Sponsorship-page, sponsor band, category, group-page lead, and home hero links fell back to the browser's default focus ring.
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 sponsor band's background faded from --bg-paper-strong to --bg-paper, ending lighter than the page below it, with only a faint bottom border, so the band blended into the search section and read as its intro rather than a sponsor placement; the sponsor name also gave no cue that it links 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>
Keyboard focus on a table row drew one box per cell, because the focused row fell back to the browser's default outline and each cell also got an inset accent stripe on its left edge.
Co-Authored-By: Claude <noreply@anthropic.com>
The sponsorship hero kicker sat farther above the heading than the heading sat above its subtitle, so the label read as detached from the heading it labels.
Co-Authored-By: Claude <noreply@anthropic.com>
The subtitle's fixed top margin did not grow with the fluid h1, so heading descenders crowded the subtitle on category and sponsorship heroes.
Co-Authored-By: Claude <noreply@anthropic.com>
The sponsorship ledes were set in Cormorant Garamond, whose short x-height and thin strokes read poorly across a paragraph, and past sponsor names shared a baseline with Manrope descriptions, where the mismatched x-heights clash.
Co-Authored-By: Claude <noreply@anthropic.com>
On the sponsorship page the tier names and fact labels rendered smaller than the "/ month" cadence beneath them, inverting the hierarchy.
Co-Authored-By: Claude <noreply@anthropic.com>
Roughly 20 ad-hoc font-size values rendered near-duplicate sizes 1-2px apart, reading as noise rather than hierarchy, and .hero-category-link rendered below the documented 12px floor.
Co-Authored-By: Claude <noreply@anthropic.com>
Sponsorship tier prices rendered in Cormorant Garamond's default old-style figures, so zeros sat at x-height and the 5 dropped below the baseline, making "$500" hard to read.
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>
Sponsor links carried no UTM tags, so sponsors saw awesome-python clicks at best as generic referral traffic and could not tell README clicks from website clicks. README sponsor entries now carry utm_source=awesome-python&utm_medium=sponsorship&utm_campaign=sponsor&utm_content=readme, and the website build rewrites utm_content to website for the sponsor band. New sponsor entries in README.md need the same UTM suffix.
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>
The test ran git init/add/commit with the inherited environment, so under a git hook or `git rebase --exec` (which set GIT_DIR) it committed fixture commits into the real repository and flipped its core.bare to true.
Co-Authored-By: Claude <noreply@anthropic.com>
DESIGN.md made claims the code contradicts (project count, radius usage, a blanket !important ban, sponsor band placement), said "the user" for the maintainer, duplicated token values from style.css that can drift, and repeated rules across several sections.
Co-Authored-By: Claude <noreply@anthropic.com>
Website design rules were duplicated between AGENTS.md and DESIGN.md, and nothing pointed agents to DESIGN.md.
Co-Authored-By: Claude <noreply@anthropic.com>
AGENTS.md called README.md the single source of content truth though category intros live in website/data/category_intros/, and it repeated wording CONTRIBUTING.md already holds.
Co-Authored-By: Claude <noreply@anthropic.com>
The instruction to apply CONTRIBUTING.md covered only adding or removing an entry, so agents rewording an existing description skipped its rules, including the description length soft cap.
Co-Authored-By: Claude <noreply@anthropic.com>
22 entry descriptions ran past the width at which GitHub's README wraps a rendered line onto a second line.
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>
Replacing framework-independent dogpile.cache with Django-only django-redis removed the shared Redis and Memcached cache use case, and a single Caching group conflated distinct jobs.
Co-Authored-By: Codex <noreply@openai.com>
Parking a project during a full review left its previous screen-out or rejection active, so incremental scans hid it instead of revisiting it.
Co-Authored-By: Codex <noreply@openai.com>
Seeding an uncertain addition or listed entry as park erased its row kind, so review offered structure actions and exported the wrong verdict.
Co-Authored-By: Codex <noreply@openai.com>
Faiss indexes vectors and integer IDs rather than storing documents and metadata, so its Database placement contradicted the category definition.
Co-Authored-By: Codex <noreply@openai.com>
The guide claimed DiskCache required less effort than every other Python caching library without comparative evidence.
Co-Authored-By: Codex <noreply@openai.com>
The guide claimed Magika never loads a complete file into memory, but the documented guarantee applies to large files.
Co-Authored-By: Codex <noreply@openai.com>
Calling report() and should_prune() alone did not stop an unpromising trial because should_prune() only returns a boolean.
Co-Authored-By: Codex <noreply@openai.com>