Skip to content

feat(website): add docs structure and pages#22

Merged
timcogan merged 6 commits intomasterfrom
feat/website-docs
Mar 4, 2026
Merged

feat(website): add docs structure and pages#22
timcogan merged 6 commits intomasterfrom
feat/website-docs

Conversation

@timcogan
Copy link
Owner

@timcogan timcogan commented Mar 4, 2026

Summary by CodeRabbit

  • New Features

    • Added a local site preview target to build/serve the docs and a Docs button in the hero.
  • Documentation

    • New docs: homepage, install overview, Linux/macOS/Windows install pages, DICOMweb guide, launch options, and platform install metadata.
    • Added docs listing and single-page layouts plus a docs sidebar and mobile submenu.
  • Style

    • Comprehensive responsive docs UI styles: navigation toggle, buttons, layouts, code block and doc card visuals.

@coderabbitai
Copy link

coderabbitai bot commented Mar 4, 2026

Important

Review skipped

This PR was authored by the user configured for CodeRabbit reviews. CodeRabbit does not review PRs authored by this user. It's recommended to use a dedicated user account to post CodeRabbit review feedback.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c327172b-a610-463b-b021-78fac152065e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a Hugo-based documentation site: new docs content and data, Hugo templates/partials/shortcodes, styles, a Docs CTA in the header, and a Makefile site target that verifies Hugo and runs the local server.

Changes

Cohort / File(s) Summary
Build & Site Config
Makefile, website/hugo.toml
Added site Make target (with help entry) to check Hugo and run the dev server; added docs param to Hugo config.
Docs Content
website/content/docs/_index.md, website/content/docs/dicomweb.md, website/content/docs/launch-options.md, website/content/docs/install/_index.md, website/content/docs/install/linux.md, website/content/docs/install/macos.md, website/content/docs/install/windows.md
New documentation pages: docs index, DICOMweb guide, launch options, and per-platform install pages (front matter + content).
Site Data
website/data/install_platforms.toml
New TOML data file enumerating platform-specific prerequisites, shells, run commands, and release commands for Linux/macOS/Windows.
Hugo Templates & Shortcodes
website/layouts/docs/list.html, website/layouts/docs/single.html, website/layouts/shortcodes/install-platform.html, website/layouts/partials/docs-sidebar.html
New templates: docs list/index rendering (inline-buttons or cards), single doc page with TOC/last_updated, install-platform shortcode that reads site.Data.install_platforms, and a docs sidebar with nested navigation and active-state logic.
Navigation & Layout
website/layouts/index.html, website/layouts/partials/header.html
Added a Docs CTA to the homepage hero and a Docs link plus mobile docs submenu in the header with active/parent highlighting.
Styling
website/static/css/styles.css
Large stylesheet additions for responsive nav toggle, focus-visible states, button transitions, comprehensive docs UI (sidebar, cards, TOC, code blocks), and responsive behavior at mobile breakpoints.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Add website #12: Overlapping Hugo site edits — previous additions/edits to layouts, CSS, and site templates that touch the same documentation UI and build targets.

Poem

🐰 I hopped through templates, markdown, and style,
I planted docs pages and tidied the aisle.
A sidebar to guide and buttons that shine,
Run make site — the little docs burrow is mine. 🥕📚

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding documentation structure and multiple documentation pages to the website.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
Makefile (1)

85-92: Optional: simplify site recipe to clear the linter warning.

Line 85–92 is functionally fine, but checkmake flags target body length. A compact two-line recipe keeps behavior and removes warning noise.

♻️ Proposed refactor
 site:
-	`@if` command -v hugo >/dev/null 2>&1; then \
-		hugo server --source website; \
-	else \
-		echo "hugo is not installed."; \
-		echo "Install Hugo and retry."; \
-		exit 1; \
-	fi
+	`@command` -v hugo >/dev/null 2>&1 || (echo "hugo is not installed."; echo "Install Hugo and retry."; exit 1)
+	`@hugo` server --source website
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 85 - 92, The Makefile 'site' target should be
collapsed to a compact two-line recipe to address the checkmake warning: replace
the multi-line if/else block in the site target with a short guard using
'command -v hugo >/dev/null 2>&1 || { echo "hugo is not installed."; echo
"Install Hugo and retry."; exit 1; }' on one line followed by 'hugo server
--source website' on the next line so behavior is unchanged but the recipe body
is shorter.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@website/content/docs/launch-options.md`:
- Around line 33-35: The examples using the "perspecta://open?dicomweb=..." URL
with user/password query parameters promote placing credentials in URLs; update
the document to remove or replace those credentialized examples with a
local/testing-only warning and a secure alternative (e.g., mention using
authentication headers or prompt-based login), and add an explicit cautionary
note near the shown examples and the similar block referenced (the later block
at lines 51-57) that embedding secrets in URLs is unsafe because they can be
logged or persisted; ensure the examples are scoped to "local/testing only" and
include the security warning text adjacent to the example strings.

In `@website/static/css/styles.css`:
- Around line 53-55: The .nav-toggle rule currently uses display: none which
removes the checkbox from the accessibility tree and prevents keyboard focus;
replace that with a visually-hidden-but-focusable pattern so the input remains
focusable and the paired <label> can toggle it via keyboard. Update the
.nav-toggle CSS (and the equivalent rules at the other block) to use an
accessible visually-hidden style (e.g., position: absolute; width: 1px; height:
1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0);
white-space: nowrap; border: 0;) instead of display: none, and ensure the label
selector (e.g., .nav-toggle + label) has visible cursor and focus styles so
keyboard users can see/focus it.

---

Nitpick comments:
In `@Makefile`:
- Around line 85-92: The Makefile 'site' target should be collapsed to a compact
two-line recipe to address the checkmake warning: replace the multi-line if/else
block in the site target with a short guard using 'command -v hugo >/dev/null
2>&1 || { echo "hugo is not installed."; echo "Install Hugo and retry."; exit 1;
}' on one line followed by 'hugo server --source website' on the next line so
behavior is unchanged but the recipe body is shorter.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3d13e771-eb0a-4663-87a1-410259e90777

📥 Commits

Reviewing files that changed from the base of the PR and between d218a6c and 18b4b55.

📒 Files selected for processing (17)
  • Makefile
  • website/content/docs/_index.md
  • website/content/docs/dicomweb.md
  • website/content/docs/install/_index.md
  • website/content/docs/install/linux.md
  • website/content/docs/install/macos.md
  • website/content/docs/install/windows.md
  • website/content/docs/launch-options.md
  • website/data/install_platforms.toml
  • website/hugo.toml
  • website/layouts/docs/list.html
  • website/layouts/docs/single.html
  • website/layouts/index.html
  • website/layouts/partials/docs-sidebar.html
  • website/layouts/partials/header.html
  • website/layouts/shortcodes/install-platform.html
  • website/static/css/styles.css

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
website/static/css/styles.css (1)

60-60: Replace deprecated clip property with clip-path.

The clip property is deprecated per CSS specifications. Use clip-path: inset(50%) for modern browsers, keeping clip as a fallback for older browsers.

♻️ Suggested fix
 .nav-toggle {
   position: absolute;
   width: 1px;
   height: 1px;
   padding: 0;
   margin: -1px;
   overflow: hidden;
   clip: rect(0 0 0 0);
+  clip-path: inset(50%);
   white-space: nowrap;
   border: 0;
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@website/static/css/styles.css` at line 60, Replace the deprecated CSS
property usage of clip with a modern clip-path fallback pattern: keep the
existing clip declaration as a backward-compatible fallback, then add clip-path:
inset(50%); (and optionally clip-path: inset(50%) round 0;) to the same selector
so modern browsers use clip-path while older browsers still honor clip; update
the styles.css rule that currently contains clip: rect(0 0 0 0); to include the
new clip-path declaration and ensure visual equivalence.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@website/static/css/styles.css`:
- Line 60: Replace the deprecated CSS property usage of clip with a modern
clip-path fallback pattern: keep the existing clip declaration as a
backward-compatible fallback, then add clip-path: inset(50%); (and optionally
clip-path: inset(50%) round 0;) to the same selector so modern browsers use
clip-path while older browsers still honor clip; update the styles.css rule that
currently contains clip: rect(0 0 0 0); to include the new clip-path declaration
and ensure visual equivalence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 77acaf73-7142-49f8-8822-d6061ce56485

📥 Commits

Reviewing files that changed from the base of the PR and between 18b4b55 and 75bd0e6.

📒 Files selected for processing (3)
  • Makefile
  • website/content/docs/launch-options.md
  • website/static/css/styles.css

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@website/static/css/styles.css`:
- Around line 53-67: The .nav-toggle element is currently visually-hidden but
still focusable on desktop; update styles so .nav-toggle is non-focusable/hidden
by default (e.g., add display: none to .nav-toggle) and move the
visually-hidden-but-focusable rules
(padding/margin/overflow/clip/clip-path/white-space/border) into the mobile
media query that shows .nav-toggle-button (the same block where
.nav-toggle-button is set to display:block) so the hidden-but-focusable pattern
only applies on mobile; apply the same change for the other instance referenced
(the rules around .nav-toggle at lines ~607-610).
- Line 60: Remove the deprecated CSS property by deleting the `clip: rect(0 0 0
0);` declaration in the ruleset where `clip-path: inset(50%)` is already used
(the block containing the `clip` declaration); keep the modern `clip-path` and
any other accessibility-related styles intact so the visual hiding behavior
remains unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 479a18a1-220a-4067-beac-d7f4d82ba601

📥 Commits

Reviewing files that changed from the base of the PR and between 75bd0e6 and 2c46d15.

📒 Files selected for processing (1)
  • website/static/css/styles.css

Comment on lines +53 to +67
.nav-toggle {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0 0 0 0);
clip-path: inset(50%);
white-space: nowrap;
border: 0;
}

.nav-toggle-button {
display: none;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Avoid an invisible keyboard tab stop on desktop navigation.

At Line 53-64, .nav-toggle is focusable at all breakpoints, but its visible control is hidden by default at Line 67. That leaves desktop keyboard users with an off-screen focus target. Keep it hidden on desktop and apply the visually-hidden-focusable pattern only in the mobile media block.

Suggested fix
 .nav-toggle {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0 0 0 0);
-  clip-path: inset(50%);
-  white-space: nowrap;
-  border: 0;
+  display: none;
 }
 
 `@media` (max-width: 860px) {
+  .nav-toggle {
+    position: absolute;
+    width: 1px;
+    height: 1px;
+    padding: 0;
+    margin: -1px;
+    overflow: hidden;
+    clip: rect(0 0 0 0);
+    clip-path: inset(50%);
+    white-space: nowrap;
+    border: 0;
+  }
+
   .nav-toggle-button {
     display: inline-flex;
   }

Also applies to: 607-610

🧰 Tools
🪛 Stylelint (17.3.0)

[error] 60-60: Unexpected deprecated property "clip" (property-no-deprecated)

(property-no-deprecated)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@website/static/css/styles.css` around lines 53 - 67, The .nav-toggle element
is currently visually-hidden but still focusable on desktop; update styles so
.nav-toggle is non-focusable/hidden by default (e.g., add display: none to
.nav-toggle) and move the visually-hidden-but-focusable rules
(padding/margin/overflow/clip/clip-path/white-space/border) into the mobile
media query that shows .nav-toggle-button (the same block where
.nav-toggle-button is set to display:block) so the hidden-but-focusable pattern
only applies on mobile; apply the same change for the other instance referenced
(the rules around .nav-toggle at lines ~607-610).

@timcogan timcogan force-pushed the feat/website-docs branch from b5fdd14 to d8f90de Compare March 4, 2026 20:39
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
website/static/css/styles.css (1)

180-184: Add :focus-visible parity for newly added hover affordances.

Several interactive elements now have hover-specific styling only. Mirroring those styles for keyboard focus will make navigation feedback consistent.

Proposed CSS adjustment
-.button:hover {
+.button:hover,
+.button:focus-visible {
   background: rgba(255, 255, 255, 0.04);
   border-color: `#3b4352`;
   color: var(--fg);
 }

-.button.primary:hover {
+.button.primary:hover,
+.button.primary:focus-visible {
   background: `#e7edf7`;
   border-color: `#e7edf7`;
   box-shadow: 0 0 0 1px rgba(231, 237, 247, 0.35);
 }

-.docs-nav-link:hover {
+.docs-nav-link:hover,
+.docs-nav-link:focus-visible {
   border-color: var(--line);
   color: var(--fg);
 }

-.docs-nav-sublink:hover {
+.docs-nav-sublink:hover,
+.docs-nav-sublink:focus-visible {
   border-color: var(--line);
   color: var(--fg);
 }

-.doc-card:hover {
+.doc-card:hover,
+.doc-card:focus-visible {
   border-color: `#4f617f`;
   background: rgba(79, 97, 127, 0.08);
 }

-.links > a:hover {
+.links > a:hover,
+.links > a:focus-visible {
   border-color: var(--line);
   background: rgba(255, 255, 255, 0.03);
 }

Also applies to: 192-196, 467-470, 496-499, 557-560, 636-639

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@website/static/css/styles.css` around lines 180 - 184, The hover-only styles
for interactive elements (e.g., the .button:hover rule) need equivalent
:focus-visible rules so keyboard users get the same affordances; update each
selector that defines hover-only styling (such as .button:hover and the other
hover selectors noted at ranges 192-196, 467-470, 496-499, 557-560, 636-639) by
adding matching :focus-visible selectors that mirror background, border-color,
and color changes (use :focus-visible rather than :focus to avoid styling
mouse-focus), ensuring visual parity and consistent keyboard navigation
feedback.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@website/static/css/styles.css`:
- Around line 180-184: The hover-only styles for interactive elements (e.g., the
.button:hover rule) need equivalent :focus-visible rules so keyboard users get
the same affordances; update each selector that defines hover-only styling (such
as .button:hover and the other hover selectors noted at ranges 192-196, 467-470,
496-499, 557-560, 636-639) by adding matching :focus-visible selectors that
mirror background, border-color, and color changes (use :focus-visible rather
than :focus to avoid styling mouse-focus), ensuring visual parity and consistent
keyboard navigation feedback.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5c79eab8-b9d3-4359-a08a-7d710fadf838

📥 Commits

Reviewing files that changed from the base of the PR and between 2c46d15 and d8f90de.

📒 Files selected for processing (1)
  • website/static/css/styles.css

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
website/static/css/styles.css (1)

584-591: Consider increasing padding-bottom to accommodate focus outlines.

The padding-bottom: 2px on .doc-chip-row may clip focus outlines when the row scrolls horizontally. Button focus outlines typically need more clearance.

Suggested fix
 .doc-chip-row {
   margin-top: 18px;
   display: flex;
   flex-wrap: nowrap;
   gap: 10px;
   overflow-x: auto;
-  padding-bottom: 2px;
+  padding-bottom: 4px;
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@website/static/css/styles.css` around lines 584 - 591, The .doc-chip-row
container uses padding-bottom: 2px which can clip button focus outlines when
scrolled; update the .doc-chip-row rule to increase padding-bottom (e.g., to 6px
or more) or add a larger bottom padding value to ensure focus outlines are not
clipped (alternatively set a matching outline-offset on focused buttons), and
verify visually that focus rings for elements inside .doc-chip-row are fully
visible when the row is scrolled.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@website/static/css/styles.css`:
- Around line 584-591: The .doc-chip-row container uses padding-bottom: 2px
which can clip button focus outlines when scrolled; update the .doc-chip-row
rule to increase padding-bottom (e.g., to 6px or more) or add a larger bottom
padding value to ensure focus outlines are not clipped (alternatively set a
matching outline-offset on focused buttons), and verify visually that focus
rings for elements inside .doc-chip-row are fully visible when the row is
scrolled.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e603f99f-962c-4cb3-8bac-92b74873f700

📥 Commits

Reviewing files that changed from the base of the PR and between d8f90de and d9eeea2.

📒 Files selected for processing (1)
  • website/static/css/styles.css

@timcogan timcogan merged commit 09def0e into master Mar 4, 2026
7 checks passed
@timcogan timcogan deleted the feat/website-docs branch March 4, 2026 21:36
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