- Set exclude-newer to 3 days and only-binary/:all: in pyproject.toml to
limit dependency freshness window and block source builds
- Switch uv sync to --locked in Makefile, ci.yml, and deploy-website.yml
to enforce the lockfile rather than re-resolving on each install
- Regenerate uv.lock with exclude-newer snapshot recorded
Co-Authored-By: Claude <noreply@anthropic.com>
- Rising Star: reduce star-growth window from 2 years to 1 year
- Hidden Gem: reduce minimum repo age from 6 months to 3 months
- Rejection rule: reduce minimum repo age from 3 months to 1 month
Co-Authored-By: Claude <noreply@anthropic.com>
Note the editorial-independence policy so sponsor placements are never conflated with curated listings.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Entry Guidelines already defers to CONTRIBUTING.md, so keeping a parallel Entry Format section here creates drift risk (and the placeholder text was already inconsistent).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rename PR Review Guidelines to Entry Guidelines and clarify that CONTRIBUTING.md rules apply to any entry addition or removal, not just PR reviews.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
One entry per commit when adding or deleting, but format or wording changes across entries can be bundled.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Split vibevoice and voxcpm out of Pre-trained Models and Inference (which now skews to LLMs and diffusion) into a dedicated Speech subcategory to make room for TTS/ASR growth.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Microsoft's open-source voice AI family (TTS + ASR) with 40k stars, ICLR 2026 Oral, and ASR integrated into Hugging Face Transformers.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
It is a pretrained neural TTS foundation model, not an audio manipulation library, so it fits better alongside transformers, diffusers, and vllm.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
OpenBMB's tokenizer-free TTS with multilingual voice design and cloning (15k stars, Apache 2.0).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Apple's ml-explore team library for running and fine-tuning LLMs on Apple Silicon with MLX (4.9k stars, MIT).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Google Research's pretrained time-series foundation model (18k stars, Apache 2.0).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Primary visual model: placestoread.xyz (table, expand row, sorting, footer)
- Color aversion: no green; warm brown-red/ivory/earthy palette only
- Type sizing: default one step larger than impeccable scale; never reduce unprompted
- Row numbers: left-align, no leading zeros
- Visual consistency checklist: hover/focus, tag variants, typography tiers, gutters, color tokens
- Narrow-screen: < 960px and < 680px must stay functional; run playwright-cli after layout changes
Co-Authored-By: Claude <noreply@anthropic.com>
Expands the layout constraint to make explicit that --shell-max on
.section-shell is the ONLY width cap allowed. Blocks future additions
of narrow inner caps on cards, table cells, paragraphs, etc., and
explicitly disables the impeccable skill's default 65-75ch guidance.
Co-Authored-By: Claude <noreply@anthropic.com>
Swaps --line-strong for --accent-underline on the 'Become a sponsor'
text-decoration-color so the underline matches the tan hover underline
on project-name links like thealgorithms.
Co-Authored-By: Claude <noreply@anthropic.com>
Swap the border-bottom + padding-bottom fake underline on .sponsor-become
for a native text-decoration underline with text-underline-offset so the
line hugs the text at the same distance as the hero @vinta/@JinyangWang27
links, rather than sitting a fixed 0.2rem gap away.
Co-Authored-By: Claude <noreply@anthropic.com>
Override font-size to var(--text-lg) inside .sponsor-meta so the
Sponsors heading is larger, while the shared .section-label class
remains --text-sm everywhere else.
Co-Authored-By: Claude <noreply@anthropic.com>
Replace os.path.join + manual open() with Path(__file__).resolve().parents[2]
and Path.read_text() for locating and reading README.md.
Co-Authored-By: Claude <noreply@anthropic.com>
Eliminate the redundant _find_link_deep precheck by merging the two
walks over inline.children into one loop that simultaneously locates
the link and records its top-level index.
Co-Authored-By: Claude <noreply@anthropic.com>
Merge the two inline-renderer implementations into a single _render_inline(children, *, html) function that handles both output modes. The original public functions become one-line wrappers so all dispatch logic lives in one place. Also aligns html_inline handling: the html=True path now escapes the raw content instead of silently dropping it in the plain-text path.
Co-Authored-By: Claude <noreply@anthropic.com>
Collapse the if-seen/else-new branches so the category/group/subcategory
merge logic runs once per entry unconditionally, appending to empty lists
on first sight instead of duplicating the append logic in the else branch.
Annotate seen and entries as dict[str, Any] so ty can resolve the mixed
value types (str, list, None) in each entry dict.
Co-Authored-By: Claude <noreply@anthropic.com>
Use timedelta(hours=CACHE_MAX_AGE_HOURS) so the cache-age check
reads at the intended hours unit directly, removing the conversion
arithmetic.
Co-Authored-By: Claude <noreply@anthropic.com>
Use itertools.batched (stdlib since Python 3.12, targeted by this project)
instead of manual range(0, N, BATCH_SIZE) slicing. Loosen fetch_batch,
build_graphql_query, and parse_graphql_response signatures from list[str]
to Sequence[str] since batched yields tuples.
Co-Authored-By: Claude <noreply@anthropic.com>
The helper only appeared once and the logic is two lines, so the named
function added indirection without clarity. Removed the four dedicated
unit tests that covered the function directly.
Co-Authored-By: Claude <noreply@anthropic.com>
The helper was only called once and the bool(inline.children) guard
was redundant: first_link being non-None already implies inline.children
is non-empty.
Co-Authored-By: Claude <noreply@anthropic.com>
The private helper duplicated _find_child with a hardcoded type filter.
Remove it and call the general helper directly at both call sites.
Co-Authored-By: Claude <noreply@anthropic.com>
Extracts a _href(link) helper that returns link.attrGet('href') narrowed
to str (falling back to '') instead of the raw str|int|float|None union.
Replaces all four attrGet('href') or '' call sites with _href(), fixing
ty errors where the widened union leaked into TypedDict url fields.
Co-Authored-By: Claude <noreply@anthropic.com>
Cache-write shape mismatches the TypedDict and callers mix .get() and
direct access, so the stricter type was providing false safety. Using
dict[str, dict] accurately reflects the actual runtime contract.
Co-Authored-By: Claude <noreply@anthropic.com>
Replace loose list[dict] annotations with concrete TypedDicts imported
from readme_parser so ty can verify call-site compatibility.
Co-Authored-By: Claude <noreply@anthropic.com>
client is the only non-first param and is always required, so the * separator
adds no clarity. Update the call site accordingly.
Co-Authored-By: Claude <noreply@anthropic.com>
Python 3.11 introduced datetime.UTC as a cleaner alias for
datetime.timezone.utc. Both build.py and fetch_github_stars.py
are updated to use the shorter form.
Co-Authored-By: Claude <noreply@anthropic.com>
State reset (current_group_name = None, current_group_cats = []) was
duplicated in both branches of the early-return guard. Move it after
the conditional so it runs exactly once regardless of path.
Co-Authored-By: Claude <noreply@anthropic.com>