Skip to content

New website design - #1740

Open
ammachado wants to merge 201 commits into
apache:mainfrom
ammachado:feature/new-website-design
Open

New website design#1740
ammachado wants to merge 201 commits into
apache:mainfrom
ammachado:feature/new-website-design

Conversation

@ammachado

Copy link
Copy Markdown
Contributor

Redesign of camel.apache.org: new design tokens and typography (Archivo, Open Sans, JetBrains Mono), a shared header and footer for the Hugo pages and the Antora docs UI, and redesigned home, docs, projects, tooling, community, download, security, releases and blog pages.

Hugo and Antora templates plus the antora-ui-camel bundle change; content is mostly untouched apart from copy moved into data/*.yaml. Design notes and per-piece specs live under docs/superpowers/.

Checks run locally: hugo with 0 errors, html-validate clean on all Hugo pages after minify, tests/redirect.sh 71/71, stylelint clean on the bundle. yarn check:links still reports three upstream apache/camel link failures unrelated to this branch.

Draft while the design owner reviews the open items recorded in the specs (header fixed vs. sticky, footer column underline, phone-width header search).

🤖 Generated with Claude Code

ammachado and others added 28 commits September 5, 2026 13:51
Piece 1 of 6 of the camel-website redesign. Covers the font migration
to self-hosted Archivo and JetBrains Mono, the palette swap at :root in
vars.css, and the container widths.

Records three decisions the design handoff left open: splitting
--heading-font-weight and --code-font-color where a single token was
asked to carry two values, diverging the marketing container (1200px)
from the docs article area (1366px), and deferring the dark syntax
highlighting theme to its own piece.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Piece numbers become identities rather than sequence; landing order is
1, 6, 2, 3, 4, 5 so the branch is never reviewable with broken code
blocks. SCOPE.md section 2a now specifies the dark hljs theme and the
chroma mapping, so piece 6 is a spec rather than an open decision.

Records that piece 1 cannot merge on its own as a result.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Hugo's chroma highlighter puts the .highlight class on the wrapping
div, not the pre, so .doc pre:not(.highlight) matches the pre itself
while base.css's code,kbd,pre rule still paints the nested <code>
with --code-font-color (now ink) directly on the element, beating the
inherited --pre-font-color. Add a minimal .doc pre code { color:
inherit; } rule, specific enough to beat base.css's group rule but not
the higher-specificity .doc pre.highlight code branch.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rebuilt from committed source only. The projects.css import was
temporarily removed for this build so the tracked bundle matches
tracked source; that work is still in progress and untracked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`--color-orange-deep` (#c95f12) measured 3.83:1 on --color-paper and
3.55:1 on --color-paper-2, below the 4.5:1 threshold for normal text.
Links land on both surfaces, so both were held to it. Hover was worse:
--color-camel-orange at 2.74:1, and lighter than rest, so hovering
weakened the link rather than strengthening it.

Rest becomes #a84e0d (5.22 / 4.84) and hover a new --color-orange-deeper
at #853c09 (7.42 / 6.87). Both keep hue 25deg and ~92% saturation, so
they are lightness steps down the existing brand ramp, not a new color.
--color-camel-orange is untouched and stays the primary brand orange.

Both values deviate from SCOPE.md section 2 and were approved by the
design owner. The reasoning is commented at each declaration site.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Piece 1 set --pre-background to --color-ink but left highlight.css on the
GitHub light theme, so highlighted code rendered dark-on-dark. This closes
that window, per SCOPE.md section 2a.

Colors live in vars.css as --syntax-*, one token per row of section 2a,
bound by both highlighters so they cannot drift apart. Every value clears
4.5:1 on #211c17.

highlight.css keeps its selector groups and swaps hardcoded hex for tokens.
chroma.css is new: Hugo emits chroma classes for blog code fences and the
repo had no chroma stylesheet at all, so those blocks were never highlighted.

Two bindings section 2a implies that were not in place:

- --pre-font-color moves off --color-on-dark (#faf7f1) to --syntax-text
  (#f0e9df). Section 2a reserves #faf7f1 for .hljs-title, so sharing one
  value made titles indistinguishable from body text.
- --syntax-font-weight-strong is 600. --monospace-font-weight-bold is 500
  and has other consumers, so it could not be reused.

Three class collisions needed language scoping, since one class carries two
meanings in the same highlighter:

- .hljs-meta is the shell prompt in shell/console/shellsession and Java
  annotations elsewhere.
- chroma .nt is a YAML or JSON key but an XML tag.
- chroma .l is an unquoted YAML scalar, which highlight.js calls a string.

Section 2a has no row for bare .hljs-attr, which is YAML and JSON keys
across roughly 5600 blocks. It takes the attr color so those keys read
consistently with XML attributes.

Verified by rendering real code blocks from the built tree in headless
Chrome, with the real bundle, across java, xml, yaml, json, shell, console,
properties and sql on both highlighters.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Covers the two source commits since the last regen, 37e661f (link colors)
and a692460 (syntax highlighting). site-a08aeff1d4.css becomes
site-4cf1bc34cd.css.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Header, footer and buttons across both template systems.

The finding that shapes the piece: layouts/partials/footer.html and
antora-ui-camel/src/partials/footer-content.hbs are supposed to be the
same markup and have already drifted in five ways. Rather than rewrite
both by hand, the footer content moves into data/chrome.yaml, read
natively by Hugo and by a new withChromeData.js helper that mirrors the
existing withMenuData.js. Neither js-yaml nor toml is a new dependency.

Records five rulings from the design owner where SCOPE.md section 3 is
silent or self-contradictory: search stays in the header, Trust moves to
the footer, the header keeps GitHub only, the CTA reads Get Started on
the home page and /projects/, and the footer takes five columns because
"4 columns" and "same link set as today" cannot both hold.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Seven tasks: chrome data file and Antora helper, footer markup, footer
CSS, header menu and markup, header CSS, buttons, then bundle regen and
final verification.

Three findings from reading the code shape the plan and are recorded as
global constraints:

- algoliasearch.bundle.js assigns container.className wholesale at four
  points, so #search's parent must carry exactly "navbar-search
  results-hidden" and no other class, or it is erased on first use.
- yarn build:antora cannot run here, so every Antora assertion renders
  the handlebars partials directly with the handlebars already in
  node_modules. Proven against the current footer-content.hbs.
- yarn is not on PATH; the plan uses the vendored .yarn/releases binary.

The load-bearing check is Task 2: extract the footer link set from a
built Hugo page and from a directly rendered Antora partial, sort, and
diff. It fails today on all five divergences.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
options.fn(this, { data: {...} }) was replacing the block's data frame
wholesale, dropping inherited private variables such as @root. Merge
onto options.data instead so {{@root.uiRootPath}} keeps working inside
the block (needed by the footer logo and social icon asset paths).
Reconciles the pre-existing footer.css cascade with the new
footer-brand/footer-column markup instead of appending beside it:
retargets the dt/dd rules onto .footer-column so they actually win,
scopes footer .footer p to p.remark so .footer-blurb is not
overridden, and gives p.remark/.resources/.footer-icons an explicit
grid-column so they still span the row now that flex-basis is inert
under the new grid. Drops the dead figure.logo and dl:first-child
rules the markup no longer produces. Also collapses the grid to a
single column in the existing mobile media query, since the grid
Step 2 introduces has no responsive variant of its own and the old
flex-basis: 100% no longer stacks the accordion columns.

--footer-height is bumped from 23rem to 40rem to match the measured
height of the five-column layout.
Deletes min-height: var(--footer-height) from the footer rule in
footer.css. At desktop the five-column content already renders taller
than any reasonable token, so the floor never bound there; at narrow
widths, where the accordion collapses columns to their dt labels, it
was forcing extra empty ink regardless of actual content height.

--footer-height now serves only body.css's sitewide min-height calc,
and is set to 39rem: measuring the footer's real rendered height in
pixels at 1400px (716px, root font-size 18px), 1000px (933px), and
390px (964px, root font-size 17px below the 1025px breakpoint) shows
the desktop figure is the binding constraint once the differing root
font-size is factored in, not the mobile one, despite the mobile
footer being visually the shorter layout post-collapse. Rounded down
from the desktop bound so the token stays a safe underestimate at
every width.
Reduce menu.main from seven items to five, reorder them, and drop the
per-item pre icons. Rebuild layouts/partials/header.html and
antora-ui-camel/src/partials/header-content.hbs onto a shared
div.navbar-inner container with a single GitHub icon and a
Download/Get Started CTA. Drop the now-unused pre field from
withMenuData.js so both template systems stay in sync with config.toml.
The artboards arrived after the spec was written, in
Apache Camel website reference.zip. The spec asserted they were unavailable
and derived everything from SCOPE.md prose, so that claim is corrected and
the measured deltas are recorded for the header and the footer.

The artboards confirm the five-column footer resolution: the design really
does show four columns with no Documentation column, so the conflict with
today's link set was real.
@davsclaus

Copy link
Copy Markdown
Contributor

Good calls @Croway - however the user guide / docs etc is something we will tackle later. First stop is a modern website for the current.

I think we need to let a big AI go over all the docs and help reorganize it and build up a new TOC for it all.

The content+TOC grid was capped at 1180px, leaving only ~904px for
the main content after the 220px TOC and 56px gap.  Increase to
1340px so the content column gains ~160px on wide screens.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ammachado

ammachado commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

@Croway thanks for the thorough feedback! Addressing each point:

1) Version misalignment in getting-started page
The getting-started page content comes from the upstream apache/camel docs repo via Antora. The version numbers are baked into that upstream source, so fixing them (or introducing a version placeholder) needs to happen there, not in this website repo.

2) Menu disappears on /community/books/
I checked the template markup and CSS, and tested the page at both 1440px and 1024px viewports. The header with all nav items (Docs, Tooling, Security, Community, Blog) renders correctly. At viewport widths below the 1024px breakpoint, the menu is intentionally behind the burger toggle (responsive behavior). Could you confirm whether you were viewing at a narrower width, or if you can still reproduce at full desktop width?

3) CONTENTS sidebar too close to content
Good catch. The doc content grid was capped at max-width: 1180px, which left only ~904px for the main content after the TOC (220px) and gap (56px). Widened it to 1340px in a7f55a7 so the content column gains ~160px on wide screens.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

ammachado and others added 2 commits September 8, 2026 20:16
Group all 39 CSS files into seven @layer tiers (fonts, base, chrome,
content, primitives, pages, print) so specificity conflicts between
files are resolved by explicit layer order rather than import sequence.
Primitives sits before pages so page-specific rules can override shared
card/chip/grid defaults without needing higher-specificity selectors.

Requires postcss-import >= 15 (lockfile pins 16.2.0).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Introduce a split-complementary teal (#1f6858, 167deg) as a cool
counterpoint to the all-orange palette. Applied to three locations:

- Homepage stat numbers (evidence, not action)
- Blog card dates (temporal metadata)
- Community card icon tags (community, not feature)

Three tokens added: --color-teal-deep, --color-teal-light,
--color-teal-tint. All clear WCAG AA on both paper surfaces
(6.18:1 on paper, 5.72:1 on paper-2).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ammachado

ammachado commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

Adds a teal accent (#1f6858) to stat numbers, blog dates, and community tags, breaking the all-orange warmth with a complementary cool tone that still feels natural on the warm palette.

Before/after:
image

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

@Croway

Croway commented Sep 9, 2026

Copy link
Copy Markdown
Contributor
image better compared to before, but there's still some space
image still no left menu

@jamesnetherton

Copy link
Copy Markdown
Contributor

In data/home.yaml not sure if we want to come up with a badge name for Quarkus?

When I first saw the 'Three clear paths' section, I read it as though you have a fast option (CLI), the most popular option (CSB) and then an alternative with no distinguishing headline feature (Quarkus).

@davsclaus

Copy link
Copy Markdown
Contributor

In data/home.yaml not sure if we want to come up with a badge name for Quarkus?

When I first saw the 'Three clear paths' section, I read it as though you have a fast option (CLI), the most popular option (CSB) and then an alternative with no distinguishing headline feature (Quarkus).

Yeah do you have a suggestion? (maybe Performance or Most performant) or something related to that.

@claudio4j

claudio4j commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Unsure if it's the preview, but clicking to "component reference" link in https://pr-1740--camel.netlify.app/docs/ opens non styled page with "This file exists solely to defeat the limitations of the link checker, that is unaware of the .htaccess redirect from this page to the latest released version."

The property names column are too small (main component).
https://pr-1740--camel.netlify.app/components/4.22.x/others/main.html

image

It may be related when I changed the word-wrap style.

@jamesnetherton

Copy link
Copy Markdown
Contributor

In data/home.yaml not sure if we want to come up with a badge name for Quarkus?
When I first saw the 'Three clear paths' section, I read it as though you have a fast option (CLI), the most popular option (CSB) and then an alternative with no distinguishing headline feature (Quarkus).

Yeah do you have a suggestion? (maybe Performance or Most performant) or something related to that.

Yeah I am struggling for ideas 😅. Maybe 'Cloud native'?

@davsclaus

Copy link
Copy Markdown
Contributor

okay lets go with cloud native

@claudio4j

Copy link
Copy Markdown
Contributor

The tables are not rendered equally across some components, the opentelemetry shows a background to the property name.

https://pr-1740--camel.netlify.app/components/4.22.x/others/opentelemetry.html

image

https://pr-1740--camel.netlify.app/components/4.22.x/activemq6-component.html

image

It may be related to the way each component .adoc and component-configure-options.adoc partials are rendered.

Give Quarkus the same badge treatment as Camel CLI (fastest) and
Spring Boot (Most popular). Wrap the curl install command with a
backslash continuation so it fits within the card at narrow viewports.
Widen the frontpage max-width from 1200px to 1400px so the three
get-started cards have more breathing room.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

@davsclaus

Copy link
Copy Markdown
Contributor

Yes I agree on a standard monitor if you make the browser take up most width on your screen the table is crammed too much, there is alot empty space to the right we can use, to make the table columns wider.

Screenshot 2026-09-10 at 07 49 40

Partially reverts 536bca3. Restores the 1200px frontpage max-width and
the single-line curl install command. Keeps the Quarkus "Cloud native"
badge. The get-started cards are about to become a one-slide carousel,
so they no longer need the extra width or the line wrap.

_Claude Code on behalf of Adriano Machado (@ammachado)_

_This was generated by an AI agent and may contain inaccuracies.
Please verify before relying on it._
Replace the three-column grid with a one-slide carousel. The slide is
capped at 720px, with prev/next arrows on either side and dots below. On
mobile the arrows move down beside the dots so the slide keeps the full
width.

The track is a native scroll-snap scroller, so swipe and trackpad
scrolling work without JS. 09-home.js unhides the arrows and dots and
uses an IntersectionObserver to keep them in step with the visible
slide, whether it got there by a click, a swipe, or keyboard focus. The
arrows use aria-disabled at either end so focus is not lost, and
reduced-motion users get instant slide changes.

Slides use card--flat because the scroll container would clip the
shared hover lift and shadow.

_Claude Code on behalf of Adriano Machado (@ammachado)_

_This was generated by an AI agent and may contain inaccuracies.
Please verify before relying on it._
The Spring Boot slide showed "# pom.xml" and a bare artifact id, which
told a visitor little about what to do. Replace it with a Spring
Initializr command that generates a Maven project with Camel and runs
it. type=maven-project is needed because Initializr now defaults to
Gradle, which has no ./mvnw, and baseDir keeps the files out of the
current directory. Tested against start.spring.io: it produces a
project on camel-spring-boot-starter 4.22.0 that starts Camel.

The description now says the project is generated rather than added to
an existing one, to match.

Put the Quarkus command on one line; the carousel slide is wide enough.

_Claude Code on behalf of Adriano Machado (@ammachado)_

_This was generated by an AI agent and may contain inaccuracies.
Please verify before relying on it._
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

…d redirects

- Remove fixed 25% width on table NAME column; use break-word instead
  of anywhere so property names stop breaking mid-syllable (apache#4, apache#5, apache#6)
- Replace fixed max-width caps with clamp(1340px, 85vw, 1800px) so the
  doc grid, static pages, and community layout scale with viewport (apache#6)
- Add community sidebar nav to Hugo subpages (Books, Team, etc.) using
  a 3-column grid that matches the Antora nav style (#1)
- Add Netlify _redirects for /components/latest/ so the preview does
  not land on the raw .htaccess placeholder (apache#3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@davsclaus

davsclaus commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Thanks for 2407cd3 @ammachado, the wider grid is a big step. I rendered the Main page (components/4.22.x/others/main.html) headlessly in Chrome and measured the first row of the Camel Main options table, so here is where it stands and what is still missing. Everything below is measured against your built site-940f27fb37.css.

Version Viewport Article width Name / Description / Default / Type Row height
Preview before 2407cd3 2400 912 62 / 430 / 278 / 220 382
2407cd3 2400 1372 145 / 682 / 287 / 220 127
2407cd3 1440 732 131 / 430 / 278 / 220 153
2407cd3 + the two changes below 2400 1372 236 / 706 / 172 / 220 102
2407cd3 + the two changes below 1440 732 220 / 311 / 152 / 220 178
Current live site, for reference 2400 1366 333 / 537 / 260 / 201 92

What is still wrong. The Name column is 145px on a 2400px monitor and names render as camel.-main.addition-alSensitive-Keywords. The cause is .doc { hyphens: auto } in doc.css: it is inherited into the cell, so Chrome treats every syllable of a property name as a break opportunity when it computes the column's min-content width, and hands the column almost nothing. Switching to overflow-wrap: break-word cannot help while hyphenation is on. The Default column is stuck at ~280px for the same family of reason: values like classpath:camel/,classpath:camel-template/,classpath:camel-rest/* have no break points, so the browser widens the column to fit them and the space comes out of Description.

Two changes fix it, and they only work together. With hyphens: none alone the Name column becomes 510px (the longest name, unbroken) and the table overflows at every viewport; the script below is what gives it sane break points again.

  1. In antora-ui-camel/src/css/doc.css, on top of your current rule:
/* The first column usually holds a property name. Floor its width so it cannot
   collapse to a few characters per line when the table is under pressure (the
   wrapper scrolls instead) and never auto-hyphenate inside an identifier.
   11-table-breaks.js inserts soft break points after dots and before camel-case
   humps, so with break-word a long name wraps there and nowhere else. */
.doc table.tableblock tbody tr td:first-child {
  min-width: calc(220 / var(--rem-base) * 1rem);
  overflow-wrap: break-word;
  hyphens: none;
  font-weight: 700;
}

/* Pages that write the property name as `code` (e.g. OpenTelemetry) render it the
   same as the generated option tables, which use bold text, instead of as a chip.
   This is the inconsistency @claudio4j reported above. */
.doc table.tableblock tbody tr td:first-child p code {
  background: none;
  border-radius: 0;
  color: inherit;
  font: inherit;
  padding: 0;
}
  1. New file antora-ui-camel/src/js/11-table-breaks.js (passes the bundle's eslint, yarn build in antora-ui-camel picks it up and regenerates public/_/js/site-*.js and the rev manifests):
;(function () {
  'use strict'

  // Option tables hold long single tokens with no natural break points:
  // property names such as camel.main.streamCachingRemoveSpoolDirectoryWhenStopping,
  // fully qualified class names, classpath lists. Without break points the
  // browser either widens that column to fit the token, squeezing the
  // Description column, or, once the table is under pressure, breaks the token
  // one character per line. This inserts <wbr> after . , / : in any token of
  // MIN_TOKEN characters or more, and before each camel-case hump in the first
  // column, so a long token wraps at a sensible place first. The page is still
  // correct if this never runs; doc.css keeps a floor on the first column.
  var MIN_TOKEN = 20
  var SEPARATOR = /([.,/:])/
  var HUMP = /([a-z0-9])(?=[A-Z])/g
  var HAS_HUMP = /[a-z0-9][A-Z]/

  var breakToken = function (token, firstColumn, fragment) {
    token.split(SEPARATOR).forEach(function (part) {
      if (!part) return
      if (SEPARATOR.test(part) && part.length === 1) {
        fragment.appendChild(document.createTextNode(part))
        fragment.appendChild(document.createElement('wbr'))
        return
      }
      if (!firstColumn) {
        fragment.appendChild(document.createTextNode(part))
        return
      }
      part.split(HUMP).forEach(function (hump, i, humps) {
        if (!hump) return
        fragment.appendChild(document.createTextNode(hump))
        if (i < humps.length - 1) fragment.appendChild(document.createElement('wbr'))
      })
    })
  }

  var breakTextNode = function (node, firstColumn) {
    var text = node.nodeValue
    if (!new RegExp('[^\\s]{' + MIN_TOKEN + ',}').test(text)) return
    var fragment = document.createDocumentFragment()
    text.split(/(\s+)/).forEach(function (token) {
      if (token.length >= MIN_TOKEN && (SEPARATOR.test(token) || (firstColumn && HAS_HUMP.test(token)))) {
        breakToken(token, firstColumn, fragment)
      } else if (token) {
        fragment.appendChild(document.createTextNode(token))
      }
    })
    node.parentNode.replaceChild(fragment, node)
  }

  ;[].slice.call(document.querySelectorAll('.doc table.tableblock td')).forEach(function (cell) {
    var firstColumn = !cell.previousElementSibling
    var walker = document.createTreeWalker(cell, window.NodeFilter.SHOW_TEXT)
    var nodes = []
    while (walker.nextNode()) {
      if (!walker.currentNode.parentNode.closest('pre')) nodes.push(walker.currentNode)
    }
    nodes.forEach(function (node) {
      breakTextNode(node, firstColumn)
    })
  })
})()

With both in place, names wrap as camel.main.additionalSensitive / Keywords instead of mid-syllable, the classpath defaults wrap after each / or , and the Default column shrinks to ~170px, and the Description column gets everything that frees up. If you would rather the Name column stay on one line more often on wide screens, keeping a width: 22% hint on that cell together with the rules above gets it to ~314px at 2400px in my measurements.

Optional and separate: hyphens: auto on all of .doc also produces spe-cific and in-stances inside table cells; scoping it to prose paragraphs outside tables reads cleaner. And longer term, the reason the upstream cols="2,5,^1,2" hints never reach the browser is extensions/inline-styles.js, which strips every style attribute because the site CSP forbids inline styles. Converting col widths to classes there would let upstream steer these tables, but that is outside this PR.

Measurements and the patch were produced with Claude Code, so feel free to hand this comment to your assistant as is.

Screenshots, both at a 2400px viewport. Your commit 2407cd3 as built (Name column 145px, names hyphenated mid-word):

Main options table on 2407cd34

The same page with the two changes above applied (names wrap at dots and camel-case humps, Default column shrinks, Description gets the space):

Main options table with the fixes

@ammachado

Copy link
Copy Markdown
Contributor Author

Addressed all open review feedback in 2407cd3:

@Croway:

1) Menu disappears on /community/books/
The community subpages (Books, Team, Articles, etc.) are Hugo pages, not Antora docs, so they never had the Antora left nav. Added a new layouts/community/single.html with a left sidebar that lists all community sibling pages, styled to match the Antora nav (highlighted current page, same font/spacing). Hidden on mobile via the 1025px breakpoint.

2) CONTENTS sidebar spacing
Replaced all fixed max-width caps with clamp(1340px, 85vw, 1800px). The doc grid, static pages, and the new community layout now scale fluidly with the viewport. On a standard 1920px monitor, the content area is ~1632px instead of the old 1340px cap. On ultra-wide displays, it caps at 1800px for readability.

@claudio4j:

3) Component Reference link opens unstyled page
The "Browse components" link points to /components/latest/, which relies on an Apache .htaccess redirect. Netlify ignores .htaccess, so the preview showed a raw placeholder. Added a static/_redirects file with /components/latest/* /components/4.22.x/:splat 302 so the Netlify preview resolves correctly.

4) Property names column too narrow
Removed the width: 25% constraint and changed overflow-wrap: anywhere to break-word in doc.css. Property names like camel.main.additionalSensitiveKeys now get the space they need instead of breaking across 8+ lines.

5) Tables not rendered equally (opentelemetry vs activemq6)
This is an upstream content inconsistency in apache/camel. Only 3 component pages use **bold** (renders as <strong>) for property names: main.html, properties-component.html, and telegram-component.html. The other ~150 pages use backticks (renders as <code> with background). The fix needs to happen in the upstream AsciiDoc tooling that generates the configuration option tables for those 3 components.

@davsclaus:

6) Tables crammed, empty space to the right
Addressed by both the table column fix (#4) and the responsive grid (#2). Tables now have more room, and the content area scales with viewport width.

🤖 Generated with Claude Code

The NAME column inherited hyphens: auto from .doc, causing mid-syllable
breaks even after removing width: 25%. Two changes fix it together:
CSS sets min-width: 220px, hyphens: none, and normalizes backtick code
in td:first-child; JS (11-table-breaks.js) inserts <wbr> after dots and
before camelCase humps so overflow-wrap: break-word has sane break points.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ammachado

Copy link
Copy Markdown
Contributor Author

Applied both changes from your analysis in 88f908c:

  1. CSS (doc.css): min-width: 220px, hyphens: none, and the td:first-child p code normalization so backtick-wrapped property names render the same as the generated bold text.
  2. JS (11-table-breaks.js): <wbr> insertion after dots, commas, slashes, colons and before camelCase humps for tokens >= 20 chars. Skips <pre> elements.

Bundle rebuilt. The Netlify preview should update shortly.

Optional and separate: hyphens: auto on all of .doc also produces spe-cific and in-stances inside table cells

Noted. I'll leave scoping hyphens: auto to prose paragraphs for a follow-up to keep this PR focused.

the reason the upstream cols="2,5,^1,2" hints never reach the browser is extensions/inline-styles.js, which strips every style attribute because the site CSP forbids inline styles

Good finding. Converting col widths to classes in inline-styles.js would be a nice improvement but agreed it is out of scope here.

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview is available at https://pr-1740--camel.netlify.app

@davsclaus

Copy link
Copy Markdown
Contributor

Thanks this is much better.

My only comment now is that the front page has a very big logo, and that the "3 paths" are not easily visible and you need to scroll down.

Also personally I would rather have the 3 paths as 3 tiles instead of the carrusel.

But I dont want to bike shed this anymore.

LGTM

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.

6 participants