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>
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>
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>
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>
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>
Leaked secrets are a supply chain risk that dependency audits don't cover, so Supply Chain Security splits into Dependency Audits and Secret Scanning.
Co-Authored-By: Claude <noreply@anthropic.com>
Pickling arbitrary Python objects is a different job from data formats, so Serialization splits into Data Formats and Object Pickling.
Co-Authored-By: Claude <noreply@anthropic.com>
File type detection is a different job from paths and file watching, and splitting them leaves room for a challenger in each without passing the cap.
Co-Authored-By: Claude <noreply@anthropic.com>
Removed: jev-ultrafast (no PyPI download signal; not published on PyPI): its README calls it an MVP and it needs a hosted API key, so the challenger slot goes to scrapling in the next commit. This overrides the Challenger Exception recorded 2026-10-02.
Co-Authored-By: Claude <noreply@anthropic.com>
Removed: dogpile.cache (about 1.9M downloads/month on ClickPy, 2026-10-16, down from 2.67M a year earlier): falling demand, and its slot goes to django-redis in the next commit.
Co-Authored-By: Claude <noreply@anthropic.com>
Local runners (ollama, llama-cpp-python, mlx-lm) and production serving engines (vllm, sglang) answer different needs, and one use case could not hold both at the cap. The old page redirects to LLM Serving.
Co-Authored-By: Claude <noreply@anthropic.com>
sglang was listed above vllm on a ClickPy monthly count inflated by release-day spikes. The audit kept every other entry.
- ClickPy last-30-day, fetched 2026-10-12: sglang 2,136,488, vllm 2,109,399.
- pypistats daily, mirrors excluded, fetched 2026-10-14: sglang swings between 7K and 487K a day while vllm holds 56K-82K. Last week: vllm 463,948, sglang 176,630.
Co-Authored-By: Claude <noreply@anthropic.com>
Nine entries linked https://github.com/owner/repo/ while every other
entry uses the bare form. Formatting only; the site's repo regex already
accepted both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The subcategory nearly repeated its section's name, so its page could compete with the section page for the same searches, as Code Analysis did.
Co-Authored-By: Claude <noreply@anthropic.com>
The subcategory shared its section's name, so its page could compete with the section page for the same searches, as Code Analysis did.
Co-Authored-By: Claude <noreply@anthropic.com>
The catch-all subcategory shared its section's name, so its page ("Code Analysis for Code Analysis") split the "python code analysis" query with the section page in Search Console.
Co-Authored-By: Claude <noreply@anthropic.com>