Summary
The home page copy (website/src/index.njk) needs an editing pass. Several spots are redundant, bury the lead, use unexplained jargon/competitor names, or are internally inconsistent. Concrete, source-grounded items below.
Items
-
Hero restates itself. Headline (index.njk:35-38) is "The open-source / Python language server." and the subheadline's first sentence (:41) is "Basilisk is a complete, open-source Python language server." — the same claim twice. Tighten so the subhead adds information instead of repeating.
-
Dangling em-dash construction in the subheadline (index.njk:44-45): "...In VS Code, Cursor, Zed, and Neovim — wherever you write Python. Strict by default. Built in Rust." Reads as fragments. "Strict by default" is the core differentiator and is buried at the very end; consider leading with it.
-
British/American spelling inconsistency. index.njk:228 uses "modernise" while the rest of the page is American ("optimize", "color"). Use "modernize".
-
Stat heading undercuts itself / format mismatch. index.njk:261 heading reads "144 of 146 tests passing. Target: 100%." while the adjacent stat block (:255) and comparison table (:375) show "98.6%". Pick one representation; consider leading with the 98.6% the rest of the section already uses.
-
Unexplained competitor names on first mention. "Pyrefly" (benchmark target, index.njk:10 and elsewhere) and "ty" (comparison table) appear with no one-line gloss or link. A first-time reader can't tell what they are. Identify/link on first use.
-
Jargon that assumes IDE-internal vocabulary:
index.njk:225 "Lightbulb-ready. Every diagnostic." — "lightbulb" is VS Code quick-fix UI jargon.
index.njk:191 "one-click enrichment fixes add the missing types for you" — "enrichment fixes" isn't standard terminology. Plain phrasing like "quick fixes add the missing annotations for you" reads clearer.
-
Benchmark subhead is overloaded (index.njk:11): one sentence packs make-bench provenance, the Pyright comparison, the Pyrefly target, and the cold-vs-warm distinction. The cold/warm point ("warm edits re-check only the file you touched and its importers") is important and gets lost — split into separate sentences. "strictly less work" → "less work".
-
Alpha messaging is inconsistent. A casual kicker "// basilisk — alpha" (index.njk:33) vs. a longer defensive "Basilisk is in alpha…" in the CTA section (index.njk:623). Land on one consistent, confident framing of maturity.
-
"Profiling" is claimed but never shown. Listed in the meta description and CTA (index.njk:623-625) but no feature section explains it. Either give it a line or drop it from the headline claims until it has supporting copy.
Scope
Copy-only — website/src/index.njk (and _includes/benchmark-section.njk for the shared benchmark strings). No functional change. Keep positioning accurate (strict-by-default Python language server / type checker in Rust; Python 3.12; 100% PEP-conformance target).
Summary
The home page copy (
website/src/index.njk) needs an editing pass. Several spots are redundant, bury the lead, use unexplained jargon/competitor names, or are internally inconsistent. Concrete, source-grounded items below.Items
Hero restates itself. Headline (
index.njk:35-38) is "The open-source / Python language server." and the subheadline's first sentence (:41) is "Basilisk is a complete, open-source Python language server." — the same claim twice. Tighten so the subhead adds information instead of repeating.Dangling em-dash construction in the subheadline (
index.njk:44-45): "...In VS Code, Cursor, Zed, and Neovim — wherever you write Python. Strict by default. Built in Rust." Reads as fragments. "Strict by default" is the core differentiator and is buried at the very end; consider leading with it.British/American spelling inconsistency.
index.njk:228uses "modernise" while the rest of the page is American ("optimize", "color"). Use "modernize".Stat heading undercuts itself / format mismatch.
index.njk:261heading reads "144 of 146 tests passing. Target: 100%." while the adjacent stat block (:255) and comparison table (:375) show "98.6%". Pick one representation; consider leading with the 98.6% the rest of the section already uses.Unexplained competitor names on first mention. "Pyrefly" (benchmark target,
index.njk:10and elsewhere) and "ty" (comparison table) appear with no one-line gloss or link. A first-time reader can't tell what they are. Identify/link on first use.Jargon that assumes IDE-internal vocabulary:
index.njk:225"Lightbulb-ready. Every diagnostic." — "lightbulb" is VS Code quick-fix UI jargon.index.njk:191"one-click enrichment fixes add the missing types for you" — "enrichment fixes" isn't standard terminology. Plain phrasing like "quick fixes add the missing annotations for you" reads clearer.Benchmark subhead is overloaded (
index.njk:11): one sentence packs make-bench provenance, the Pyright comparison, the Pyrefly target, and the cold-vs-warm distinction. The cold/warm point ("warm edits re-check only the file you touched and its importers") is important and gets lost — split into separate sentences. "strictly less work" → "less work".Alpha messaging is inconsistent. A casual kicker "// basilisk — alpha" (
index.njk:33) vs. a longer defensive "Basilisk is in alpha…" in the CTA section (index.njk:623). Land on one consistent, confident framing of maturity."Profiling" is claimed but never shown. Listed in the meta description and CTA (
index.njk:623-625) but no feature section explains it. Either give it a line or drop it from the headline claims until it has supporting copy.Scope
Copy-only —
website/src/index.njk(and_includes/benchmark-section.njkfor the shared benchmark strings). No functional change. Keep positioning accurate (strict-by-default Python language server / type checker in Rust; Python 3.12; 100% PEP-conformance target).