Skip to content

docs(main): redesign landing page with product index and responsive layout - #165

Open
dj4oC wants to merge 6 commits into
mainfrom
landing-page-redesign
Open

dj4oC wants to merge 6 commits into
mainfrom
landing-page-redesign

Conversation

@dj4oC

@dj4oC dj4oC commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

Redesigns the doc.owncloud.com landing page (content/main/modules/ROOT/pages/index.adoc) into a proper entry point for all ownCloud products, their versions, and the most important getting-started resources.

What changed

  • Product index (index.adoc): H1 "ownCloud Documentation", an abstract stating what the page is, a Get Started highlight area (oCIS install guide, join.owncloud.com community hub, oCIS Field Guide), and six product sections (ownCloud Infinite Scale, ownCloud Classic, Desktop App, Android App, iOS App, ownCloud Web), each with a one-sentence description and a link to the component's documentation start page. The old prose wall and feature-comparison table are gone; SEO phrases are kept naturally in headings, card text, and the :description: (141 chars).
  • Generated version lists: new antora-extensions/landing-versions.js generates one version-list partial per multi-version component into the content catalog at build time (contentClassified, registered in site.yml), so the per-version links (e.g. oCIS 9.0 (dev) / 8.2 / 8.1) update automatically when a version is added, relabeled, or graduates from prerelease. No hardcoded version list anywhere. Product links use version-less xrefs and resolve to the latest GA version, so they survive version bumps.
  • Compact, responsive layout: the page sets :role: landing-page, which the custom ui/supplemental/layouts/default.hbs copies onto <body>; the new ui/supplemental/css/landing-page.css (every rule scoped to body.landing-page) renders the product sections as a responsive card grid (auto-fit, minmax(min(100%, 15rem), 1fr)), the highlights as a card row, and the version lists as inline chips, all inside @media screen so print keeps the stock layout.
  • Left menu (content/main/modules/ROOT/partials/nav.adoc): the landing page has no table of contents (the stock UI builds it client-side, so landing-page.css hides aside.toc.sidebar/aside.toc.embedded), the menu starts expanded (ui/supplemental/js/nav-expand.js adds is-active to all .nav-items on this page only), and the menu is restructured as Releases by Product (oCIS / Classic / Apps & Clients release and release-notes pages) and Documentation by Product (oCIS: Server, Web Client, MCP Server (coming soon); Classic: Server, Web; Apps & Clients: Desktop, Android, iOS — all at latest GA via {latest-*-version}), with How to Contribute as a top-level entry at the bottom.
  • llms.txt: landing-page label updated to match the new H1.
  • Tests: new extension-tests/landing-versions.test.js (5 tests) and extension-tests/landing-page-ui.test.js (7 tests), including a structural deepEqual of the rendered nav tree and version-list checks whose expectations are derived from site.yml start_paths + antora.yml (never hardcoded). ui/AGENTS.md documents the role-scoping and nav-expand mechanisms.

Verification

  • npm run antora builds clean (exit 0; only pre-existing unrelated warnings).
  • npm test: 65 tests, 64 pass, 0 fail, 1 pre-existing skip (skip confirmed pre-existing via stash baseline).
  • All 16 product/version start pages exist in the built site; every nav, version-list, and highlight link target verified against public/.
  • Legacy page aliases intact: next@docs::index.adoc, next@docs_main::index.adoc redirect stubs published.
  • Landing-page role and stylesheet verified over HTTP; no other page carries the role.

Notes / tech debt

  • client_releases.adoc ("ownCloud App and Client Releases") is no longer referenced from the nav after the regroup — the page stays published; could be linked under Apps & Clients in a follow-up.
  • The Get started with oCIS link is pinned to the 9.0 line (the guide exists only there); repoint when a newer GA line gains it.
  • join.owncloud.com currently 301s to https://owncloud.dev/join/; kept as the community-hub URL.
  • The expand-on-startup nav behavior is JS — verified against the stock site.js/CSS contract, worth a visual check in a browser.

All commits are GPG-signed and DCO-signed-off.

dj4oC added 6 commits October 27, 2026 16:20
Rewrite the site landing page (content/main/modules/ROOT/pages/index.adoc)
as a product index: a getting-started highlight area (oCIS install guide,
join.owncloud.com community hub, oCIS Field Guide) and one section per
product with a short description and a link to its documentation. The old
feature-comparison table and long prose are condensed into the product
descriptions; page aliases and the single-H1/metadata conventions are kept.

Add antora-extensions/landing-versions.js, which generates one version-list
partial per multi-version component into the content catalog at
contentClassified; the page includes them via
include::partial$generated-versions-<component>.adoc[]. The lists are
derived from the catalog, so they update automatically when versions are
added, display_version labels change, or a prerelease graduates to GA.
Product links use version-less xrefs and resolve to the latest stable
version. Update the llms.txt landing label to match the new H1.

Add extension-tests/landing-versions.test.js with five build-output guard
tests covering the generated version links, link targets, latest-stable
product links, metadata/aliases, and highlight links.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
Make the redesigned landing page fit on one desktop screen and adapt to
narrow viewports. The six product sections render as cards in a responsive
grid (three columns on wide screens, fewer on narrow ones, one on phones),
the getting-started highlights as a compact card row, and each product's
generated version list as inline chips instead of a vertical list.

The page sets :role: landing-page, which the custom layouts/default.hbs
copies onto <body class="article landing-page">; every rule in the new
ui/supplemental/css/landing-page.css is scoped to body.landing-page, so no
other page is affected. The stylesheet is linked from
partials/head-styles.hbs after owncloud.css, and all layout rules are
wrapped in @media screen so print keeps the stock stacked layout. The
article column widens from 46rem to 60rem on the landing page only, to fit
three card columns; the intro paragraph keeps the 46rem measure.

Document the mechanism in ui/AGENTS.md (new UI Supplemental CSS section)
and guard it with extension-tests/landing-page-ui.test.js: the role and
stylesheet link on the landing page, stylesheet publication, full scoping
of its rules, and no role leakage to other pages.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
- Remove the table of contents from the landing page: drop the :toc:
  attribute (removes the inline AsciiDoc TOC) and hide aside.toc.sidebar
  and aside.toc.embedded in landing-page.css, because the stock UI
  builds the sidebar TOC client-side from the page headings and clones
  it into an embedded in-body copy for narrow screens.
- Expand the whole left navigation on startup on the landing page via
  the new ui/supplemental/js/nav-expand.js: the stock site.js expands
  only the current page's branch (is-active on its ancestors), which
  left the product groups collapsed. The script adds is-active to every
  .nav-item, scoped to body.landing-page via the page's
  :role: landing-page attribute; per-item toggles keep working.
- Rework content/main/modules/ROOT/partials/nav.adoc: rename the top
  item Overview to Release Notes (the release-notes subtree under it
  is kept) and regroup the product links into oCIS (oCIS Server, oCIS
  Web Client, MCP Server (coming soon) -- placeholder without a link, no
  MCP docs exist yet), Classic (Classic Server, Classic Web -> the
  server classic_ui module), and Apps & Clients (Desktop Client,
  Android App, iOS App). Product links keep using the latest-*-version
  attributes, so they follow version rollovers.

Guard with three new tests in extension-tests/landing-page-ui.test.js
(no TOC in source or output, nav rename/regroup with latest-version
hrefs and resolvable links, nav-expand.js wiring) and document the
mechanisms in ui/AGENTS.md.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
…e Release Notes, move How to Contribute to top level

Restructure the landing page left menu to mirror the product structure:

- Add a 'Documentation by Product' section above the product groups
  (oCIS: Server, Web Client, MCP Server (coming soon); Classic: Server,
  Web; Apps & Clients: Desktop, Android, iOS), linking each product to
  its latest-version docs via {latest-*-version} attributes.
- Reorganize 'Release Notes' (formerly 'Overview') to the same
  oCIS/Classic/Apps & Clients grouping, dropping the intermediate
  'Server Releases'/'App Releases' levels.
- Move 'How to Contribute' to a top-level entry at the bottom of the
  menu. An empty comment block terminates the previous list so the
  entry starts a fresh untitled list; Antora's nav builder wraps it in
  an empty parent whose depth-0 list is the :first-child, so the stock
  CSS renders it at top-level indentation.
- The table of contents was already removed from the landing page in
  the previous round (no :toc: attribute, CSS hides aside.toc, no inline
  TOC in the built page); re-verified.

Replace the substring-based nav test with a full structural assertion:
parse the rendered nav into a {href, text, children} tree via the
data-depth attributes and deep-equal it against the expected product
structure, and assert every nav href resolves in public/.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
- Nav: rename the top item Release Notes to Releases, and drop the
  redundant product prefixes inside each group, since the group label
  already carries the product: oCIS/Classic items are now Releases and
  Release Notes, and the Apps & Clients items are Desktop App, iOS App,
  and Android App (the Release Notes suffix is implied by the Releases
  parent). The Releases/Release Notes distinction is kept — two
  identical 'Releases' entries in one group would be indistinguishable.
- Landing page: condense each of the six product descriptions under
  Documentation by Product from two sentences to one, keeping the SEO
  phrases (ownCloud Infinite Scale, oCIS, cloud-native, file sync and
  share, ownCloud Classic, desktop app, mobile app) and the audience
  clause. Cards shrink accordingly.
- Update the structural nav test to the new labels.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

Signed-off-by: David Walter <david.walter@kiteworks.com>
@dj4oC
dj4oC requested a review from a team as a code owner October 28, 2026 08:13

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant