Lint / Shell (shellcheck) (push) Successful in 18s
Lint / JS (eslint) (push) Successful in 11s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 1m5s
Lint / Secret scan (gitleaks) (push) Successful in 10s
- The ~1,800-word "our fork adds" paragraph becomes seven titled groups (Calls & Voice, Messaging, Media & Links, Privacy & Security, Look & Feel, Desktop App, Rooms & Moderation), one short line per feature, with a link to LOTUS_FEATURES.md instead of duplicating the changelog. - The comparison table lives in landing/data/comparison.json (converted losslessly: all 71 rows render with identical cell text) and the feature groups in landing/data/features.json. landing/build.py renders them between <!-- BEGIN/END --> markers; everything else stays hand-edited. - CSS moved to landing/style.css and inlined by build.py (the LXC 139 deploy copies index.html only, so a linked stylesheet wouldn't ship). The fork paragraph's 16 repeated inline styles are gone. - Visible "Client comparison last reviewed <date>" stamp from comparison.json, replacing the stale "June 2026 (latest)" title. - CI: `landing-fresh` fails if index.html doesn't match its sources. Page is ~1,850 px shorter on desktop and ~2,500 px on phones; no horizontal overflow at 1280 px or Pixel 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA