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):
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.
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.
Move CSS to landing/style.css, drop the repeated inline styles, keep the TDS look (--lt-* tokens per the TDS Design Law).
Stamp a visible "last reviewed" date on the client comparison; add a checklist for re-verifying the other clients' columns.
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.
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)
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) |
|---|---|---|
|  |  |  |
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.
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
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
landing/index.html(1,440 lines, deployed to LXC 139 on push) has grown by accretion and is hard to maintain:<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.style="font-size:0.8em;color:#e88;"repeated ~30×), a 480-line<style>block, and inline JS all live in the single file.Overhaul goals (decide scope before starting):
LOTUS_FEATURES.mdon Gitea — stop duplicating the changelog here.landing/style.css, drop the repeated inline styles, keep the TDS look (--lt-*tokens per the TDS Design Law).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.Draft ready on branch
landing-overhaul(090a394). Not onmain, so nothing is deployedWhat changed
LOTUS_FEATURES.md.landing/data/features.json+landing/data/comparison.json, rendered intoindex.htmlbylanding/build.pybetween<!-- BEGIN/END -->markers. The table was converted automatically, and all 71 rows re-render with identical cell text.landing/style.css.build.pyinlines it, because the LXC 139 deploy copiesindex.htmlonly, so a linked file wouldn't ship. No deploy change needed.comparison.json. It replaces the stale "June 2026 (latest)" title.landing-freshfails ifindex.htmldrifts from its sources.Adding a feature from now on: add one line to
features.json(and a row tocomparison.jsonif it belongs in the table), runpython3 landing/build.py, and commit.To ship: merge
landing-overhaulintomain; the existing webhook deploys it.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*.jsoncontain 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.Shipped:
f0017f4onmain, live at https://matrix.lotusguild.orglanding-overhauldraft onto currentmain. The only conflict was.gitea/workflows/lint.yml:mainhad added thehooks-no-secretsjob in the same spot, and both jobs are kept.from:,in:,before:/after:,has:,is:pinned)To add a feature from now on: add one line to
landing/data/features.json(and a row tocomparison.jsonif it belongs in the table), runpython3 landing/build.py, and commit. Thelanding-freshCI job fails ifindex.htmlwasn't regenerated.