Landing page overhaul: replace the 4,000-word feature paragraph + duplicated comparison table with structured, single-source sections #11

Closed
opened 2026-09-17 23:30:17 -04:00 by jared · 2 comments
Owner

landing/index.html (1,440 lines, deployed to LXC 139 on push) has grown by accretion and is hard to maintain:

  • The "what our fork adds" copy is one ~4,000-word paragraph (<p class="also-available">, line ~558) with no structure — every feature since June 2026 was appended as another run-on sentence. Nobody reads it; it is also the only place the fork's features are described on the site.
  • The feature-comparison table (Platform / Security / Desktop / Calling / Core / UX, ~700 lines) duplicates much of that paragraph and has to be edited in two places per feature.
  • Inline styles (style="font-size:0.8em;color:#e88;" repeated ~30×), a 480-line <style> block, and inline JS all live in the single file.
  • The "Other clients" cards and the comparison columns are a point-in-time snapshot (client versions, "Calls Experimental" tags) with no date shown, so it silently goes stale.

Overhaul goals (decide scope before starting):

  1. Split the fork feature blurb into short titled sections or a card grid (Calls · Messaging · Privacy · Desktop · Mobile), each 1–2 lines, with a "full changelog" link to LOTUS_FEATURES.md on Gitea — stop duplicating the changelog here.
  2. One source of truth for the comparison table (e.g. a small JSON + a render script, or generate it from a Markdown table at deploy time) so features are added once.
  3. Move CSS to landing/style.css, drop the repeated inline styles, keep the TDS look (--lt-* tokens per the TDS Design Law).
  4. Stamp a visible "last reviewed" date on the client comparison; add a checklist for re-verifying the other clients' columns.
  5. Keep it a single static deploy (no build step on LXC 139) unless (2) needs one — if so, generate in CI and commit the output.

Not urgent; the September 2026 update (landing: commit on main) just appended to the paragraph again, which is the pattern this issue exists to end.

`landing/index.html` (1,440 lines, deployed to LXC 139 on push) has grown by accretion and is hard to maintain: - The "what our fork adds" copy is **one ~4,000-word paragraph** (`<p class="also-available">`, line ~558) with no structure — every feature since June 2026 was appended as another run-on sentence. Nobody reads it; it is also the only place the fork's features are described on the site. - The feature-comparison table (Platform / Security / Desktop / Calling / Core / UX, ~700 lines) duplicates much of that paragraph and has to be edited in two places per feature. - Inline styles (`style="font-size:0.8em;color:#e88;"` repeated ~30×), a 480-line `<style>` block, and inline JS all live in the single file. - The "Other clients" cards and the comparison columns are a point-in-time snapshot (client versions, "Calls Experimental" tags) with no date shown, so it silently goes stale. **Overhaul goals (decide scope before starting):** 1. Split the fork feature blurb into short titled sections or a card grid (Calls · Messaging · Privacy · Desktop · Mobile), each 1–2 lines, with a "full changelog" link to `LOTUS_FEATURES.md` on Gitea — stop duplicating the changelog here. 2. One source of truth for the comparison table (e.g. a small JSON + a render script, or generate it from a Markdown table at deploy time) so features are added once. 3. Move CSS to `landing/style.css`, drop the repeated inline styles, keep the TDS look (`--lt-*` tokens per the TDS Design Law). 4. Stamp a visible "last reviewed" date on the client comparison; add a checklist for re-verifying the other clients' columns. 5. Keep it a single static deploy (no build step on LXC 139) unless (2) needs one — if so, generate in CI and commit the output. Not urgent; the September 2026 update (`landing:` commit on main) just appended to the paragraph again, which is the pattern this issue exists to end.
jared added the enhancementpriority: lowlandingux labels 2026-09-17 23:30:17 -04:00
Author
Owner

Draft ready on branch landing-overhaul (090a394). Not on main, so nothing is deployed

What changed

  • The fork paragraph (~1,800 words) is now 7 titled groups, one short line per feature, plus a link to LOTUS_FEATURES.md.
  • Single source: landing/data/features.json + landing/data/comparison.json, rendered into index.html by landing/build.py between <!-- BEGIN/END --> markers. The table was converted automatically, and all 71 rows re-render with identical cell text.
  • CSS now lives in landing/style.css. build.py inlines it, because the LXC 139 deploy copies index.html only, so a linked file wouldn't ship. No deploy change needed.
  • A "Client comparison last reviewed 2026-09-23" stamp, driven by comparison.json. It replaces the stale "June 2026 (latest)" title.
  • CI job landing-fresh fails if index.html drifts from its sources.

Adding a feature from now on: add one line to features.json (and a row to comparison.json if it belongs in the table), run python3 landing/build.py, and commit.

To ship: merge landing-overhaul into main; the existing webhook deploys it.

Before After (desktop) After (phone)
before after phone

Please check the wording of the groups; I condensed the paragraph by hand. The page is ~1,850 px shorter on desktop and ~2,500 px on phones, with no horizontal overflow at either width.

Not done: goal 4's re-verification checklist for the other clients' columns. The date stamp is in; the checklist is a process step and I didn't want to invent one.

Unrelated, but spotted while reading the deploy: deploy/hooks-lxc*.json contain the webhook HMAC secrets in plain text in git. Anyone who can read this repo can trigger a deploy. Consider moving them to an untracked file or env var and rotating them.

## Draft ready on branch `landing-overhaul` (`090a394`). Not on `main`, so nothing is deployed **What changed** - The fork paragraph (~1,800 words) is now **7 titled groups**, one short line per feature, plus a link to `LOTUS_FEATURES.md`. - **Single source:** `landing/data/features.json` + `landing/data/comparison.json`, rendered into `index.html` by `landing/build.py` between `<!-- BEGIN/END -->` markers. The table was converted automatically, and all 71 rows re-render with identical cell text. - **CSS** now lives in `landing/style.css`. `build.py` inlines it, because the LXC 139 deploy copies `index.html` only, so a linked file wouldn't ship. No deploy change needed. - A **"Client comparison last reviewed 2026-09-23"** stamp, driven by `comparison.json`. It replaces the stale "June 2026 (latest)" title. - **CI job `landing-fresh`** fails if `index.html` drifts from its sources. **Adding a feature from now on:** add one line to `features.json` (and a row to `comparison.json` if it belongs in the table), run `python3 landing/build.py`, and commit. **To ship:** merge `landing-overhaul` into `main`; the existing webhook deploys it. | Before | After (desktop) | After (phone) | |---|---|---| | ![before](https://code.lotusguild.org/attachments/f476dd60-9a9e-4c02-9af3-3c1850bc1625) | ![after](https://code.lotusguild.org/attachments/ee5a2acf-a632-49c6-88fa-b787813dca22) | ![phone](https://code.lotusguild.org/attachments/06e5a695-ebb8-4235-82b3-d78ab70880dd) | Please check the wording of the groups; I condensed the paragraph by hand. The page is ~1,850 px shorter on desktop and ~2,500 px on phones, with no horizontal overflow at either width. Not done: goal 4's re-verification checklist for the other clients' columns. The date stamp is in; the checklist is a process step and I didn't want to invent one. **Unrelated, but spotted while reading the deploy:** `deploy/hooks-lxc*.json` contain the webhook HMAC secrets in plain text in git. Anyone who can read this repo can trigger a deploy. Consider moving them to an untracked file or env var and rotating them.
Author
Owner

Shipped: f0017f4 on main, live at https://matrix.lotusguild.org

  • Rebased the landing-overhaul draft onto current main. The only conflict was .gitea/workflows/lint.yml: main had added the hooks-no-secrets job in the same spot, and both jobs are kept.
  • Brought the feature list up to date with everything shipped since the draft (Sept 23):
    • 629 avatar decorations in 28 categories (was 99)
    • mic level meter, and per-person call volume that's remembered
    • search operators (from:, in:, before:/after:, has:, is:pinned)
    • paste-as-code
    • thread "Mark all read"
    • pinch-zoom and swipe media viewer
    • room widgets with a permission prompt
  • Rendered at 1280 px and 390 px: no horizontal overflow, all groups readable.
  • The live page serves the 7 groups and the new counts.

To add a feature from now on: add one line to landing/data/features.json (and a row to comparison.json if it belongs in the table), run python3 landing/build.py, and commit. The landing-fresh CI job fails if index.html wasn't regenerated.

## Shipped: `f0017f4` on `main`, live at https://matrix.lotusguild.org - Rebased the `landing-overhaul` draft onto current `main`. The only conflict was `.gitea/workflows/lint.yml`: `main` had added the `hooks-no-secrets` job in the same spot, and both jobs are kept. - Brought the feature list up to date with everything shipped since the draft (Sept 23): - 629 avatar decorations in 28 categories (was 99) - mic level meter, and per-person call volume that's remembered - search operators (`from:`, `in:`, `before:`/`after:`, `has:`, `is:pinned`) - paste-as-code - thread "Mark all read" - pinch-zoom and swipe media viewer - room widgets with a permission prompt - Rendered at 1280 px and 390 px: no horizontal overflow, all groups readable. - The live page serves the 7 groups and the new counts. **To add a feature from now on:** add one line to `landing/data/features.json` (and a row to `comparison.json` if it belongs in the table), run `python3 landing/build.py`, and commit. The `landing-fresh` CI job fails if `index.html` wasn't regenerated.
jared closed this issue 2026-09-26 15:12:54 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/matrix#11