From 234e1590ab67e0ca812ec8c2a51234c06265d20c Mon Sep 17 00:00:00 2001 From: Renaud Cepre <32103211+renaudcepre@users.noreply.github.com> Date: Sat, 29 Aug 2026 01:11:21 +0200 Subject: [PATCH] docs(seo): make apte discoverable (sitemap, page titles, PyPI metadata) Search engines returned nothing for apte, not even by name: no site_url in mkdocs.yml (so no sitemap), a bare "Apte" title with a description that named neither Python nor LLM evals, and generic PyPI metadata. - mkdocs.yml: add site_url (enables sitemap.xml) and a keyworded site_description - docs/index.md, docs/evals.md: front matter title and description, intro paragraph with the terms people search for - pyproject.toml: PyPI description and keywords (llm-evals, evals, pytest-alternative) Verified with mkdocs build: sitemap.xml lists 27 URLs, home title is "Async-first Python testing and LLM evals - Apte". --- docs/evals.md | 5 +++++ docs/index.md | 9 +++++++-- mkdocs.yml | 3 ++- pyproject.toml | 6 +++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/evals.md b/docs/evals.md index 6960849..e66db0a 100644 --- a/docs/evals.md +++ b/docs/evals.md @@ -1,3 +1,8 @@ +--- +title: LLM evals in Python, next to your tests +description: Write LLM evals in Python with Apte. An eval is a test that returns a value, scored by evaluators or an LLM judge, with fixtures, concurrency and a JSONL history of runs. +--- + # Evals Evaluate LLM outputs with scored metrics and historical tracking. diff --git a/docs/index.md b/docs/index.md index 2196842..7f2d0f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,13 @@ +--- +title: Async-first Python testing and LLM evals +description: Apte is a Python testing framework and LLM eval runner. Tests run as coroutines on a single event loop, with explicit dependency injection instead of fixtures resolved by name. +--- + # Apte -**Async-first testing with explicit dependency injection.** +**Async-first Python testing with explicit dependency injection, and LLM evals in the same runner.** -Apte is a Python testing framework designed for modern async applications. Instead of implicit fixture resolution by name, Apte requires you to explicitly declare what each test needs. +Apte is a Python testing framework for async applications, and an alternative to pytest with pytest-asyncio when your tests are mostly I/O. Tests run as coroutines on a single event loop, so they run concurrently without separate processes. Instead of implicit fixture resolution by name, Apte requires you to explicitly declare what each test needs. LLM evals are tests that return a score instead of asserting, and they use the same fixtures and the same CLI. ## Why Apte? diff --git a/mkdocs.yml b/mkdocs.yml index d945066..6f9d333 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,6 @@ site_name: Apte -site_description: Async-first testing with explicit dependency injection +site_url: https://renaudcepre.github.io/apte/ +site_description: Apte is an async-first Python testing framework with explicit dependency injection and native LLM evals. Tests and evals run as coroutines on one event loop. repo_url: https://github.com/renaudcepre/apte repo_name: renaudcepre/apte diff --git a/pyproject.toml b/pyproject.toml index 95722f6..efa1c84 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "apte" version = "0.3.1" -description = "Async-first Python testing framework" +description = "Async-first Python testing framework with explicit dependency injection and native LLM evals" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } @@ -19,6 +19,10 @@ keywords = [ "test-framework", "asyncio", "fixtures", + "llm-evals", + "llm-evaluation", + "evals", + "pytest-alternative", ] classifiers = [ "Development Status :: 3 - Alpha",