Skip to content

WEB-4512 Footer AI provider links#109

Merged
czechian merged 1 commit into
masterfrom
poc/footer-ai-links
Jul 21, 2026
Merged

WEB-4512 Footer AI provider links#109
czechian merged 1 commit into
masterfrom
poc/footer-ai-links

Conversation

@czechian

@czechian czechian commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Proof of concept for the footer half of the AI entry-points work (the navbar Ask AI button + Kapa widget live in their own PR, #108):

  • Footer AI provider links — icon buttons that open ChatGPT, Claude, Gemini, Grok, or Perplexity prefilled with a GoodData overview prompt (new SVG icons under assets/icons/). Render unconditionally as part of the shared footer.
  • Footer layout & a11y tweaks — banner column with logo + subtitle wrap, subscribe-action sublinks filtered out, aria-label support on icon-only social buttons, mobile collapse title rendered with safeHTML.
  • Visual parity with www.gooddata.ai — the learn-assets/css/Footer.css the theme loads is older than the live site's footer styles, so _styles_project.scss overrides it: 48px icon buttons in a 12px-gap left-aligned row (was 29px right-aligned), live text rhythm for the subtitle, and a full-width banner item with 80px vertical padding (was 30px, centered at max-width 1360px). Overrides use higher-specificity descendant selectors because Footer.css loads after the theme stylesheet; the banner padding is scoped to Footer.css's own ≥993px breakpoint so mobile is untouched.

Verification

Built cleanly with Hugo 0.119 (current production version). Rendered footer measured against the live gooddata.ai footer with headless Chromium — icon button sizes, gaps, margins, and banner padding now match the live computed styles.

Known intentional differences from the live footer: no "Subscribe for updates" link (filtered), no language dropdown row (docs has its own language switching).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added footer links for opening content in ChatGPT, Claude, Gemini, Grok, and Perplexity.
    • Improved accessibility for social and footer links with descriptive labels.
    • Added optional subtitles and centered branding to footer banner links.
  • Style

    • Refined footer spacing, alignment, typography, button layout, and desktop responsiveness.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The footer banner markup, provider links, bottom layout, social-link accessibility attributes, and footer-specific responsive styling were updated.

Changes

Footer update

Layer / File(s) Summary
Banner provider links
layouts/partials/footer.html
Banner items now render centered logos, optional subtitles, filtered sublinks, and provider links for ChatGPT, Claude, Gemini, Grok, and Perplexity.
Footer controls and accessibility
layouts/partials/footer.html
The footer bottom uses a column layout, footer buttons receive simplified arguments, and social links can render aria-label attributes.
Footer visual overrides
assets/scss/_styles_project.scss
Footer button spacing, icon sizing, desktop banner dimensions, paragraph rhythm, and button-row alignment are overridden.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant FooterTemplate
  participant ai-buttons
  participant resources.Get
  participant absolute-link
  FooterTemplate->>ai-buttons: render provider links with shared query
  ai-buttons->>resources.Get: load provider icons
  ai-buttons->>absolute-link: pass provider URL, icon, and label
  absolute-link-->>FooterTemplate: render outbound anchor
Loading

Poem

A rabbit hops through footer rows,
Where friendly provider buttons grow.
Icons gleam and labels say,
“Ask your question—choose your way!”
Neat spacing makes the layout bright,
Bouncy links now feel just right.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding AI provider links in the footer.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@layouts/partials/footer.html`:
- Line 110: Update the footer banner link anchor in the bannerLinks rendering
loop to avoid duplicate fixed IDs: remove the unused id attribute or incorporate
the current banner item index into the generated value, while preserving the
existing label, URL, and accessibility attributes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f1e28e64-3ba5-47f0-9b39-89813b751658

📥 Commits

Reviewing files that changed from the base of the PR and between 3203cf0 and 7881b5c.

⛔ Files ignored due to path filters (5)
  • assets/icons/chatgpt.svg is excluded by !**/*.svg
  • assets/icons/claude.svg is excluded by !**/*.svg
  • assets/icons/gemini.svg is excluded by !**/*.svg
  • assets/icons/grok.svg is excluded by !**/*.svg
  • assets/icons/perplexity.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • assets/scss/_styles_project.scss
  • layouts/partials/footer.html

Comment thread layouts/partials/footer.html Outdated
@czechian
czechian force-pushed the poc/footer-ai-links branch 2 times, most recently from 0d3e69d to 6125f37 Compare July 21, 2026 08:14
@czechian czechian changed the title POC: Footer AI provider links and visual parity with gooddata.ai WEB-4512 Footer AI provider links Jul 21, 2026
The footer banner adds icon links that open ChatGPT, Claude, Gemini,
Grok, or Perplexity prefilled with a GoodData overview prompt, plus
layout and a11y tweaks: logo/subtitle wrap, subscribe-action sublinks
filtered out, aria-labels on icon-only social buttons.

The learn-assets Footer.css the theme loads is older than the live
site's footer styles, so local overrides bring visuals in line with
www.gooddata.ai: 48px icon buttons in a 12px-gap left-aligned row,
live text rhythm for the subtitle, and a full-width banner item with
80px vertical padding.
@czechian
czechian force-pushed the poc/footer-ai-links branch from 6125f37 to a9aa49c Compare July 21, 2026 08:14
@czechian
czechian marked this pull request as ready for review July 21, 2026 08:18

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@layouts/partials/footer.html`:
- Around line 24-31: Update the footer sublinks wrapper condition around the
`$link.items` loop so it renders only when at least one item passes the existing
`$sublink` eligibility checks: action is not "subscribe", and both link and
title are present. Preserve the current filtering and rendering for eligible
entries, while preventing the `<ul>` and collapse target from being emitted when
none remain.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 51af8a08-2f77-47ff-8d0a-974c3cb712e7

📥 Commits

Reviewing files that changed from the base of the PR and between 7881b5c and a9aa49c.

⛔ Files ignored due to path filters (5)
  • assets/icons/chatgpt.svg is excluded by !**/*.svg
  • assets/icons/claude.svg is excluded by !**/*.svg
  • assets/icons/gemini.svg is excluded by !**/*.svg
  • assets/icons/grok.svg is excluded by !**/*.svg
  • assets/icons/perplexity.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • assets/scss/_styles_project.scss
  • layouts/partials/footer.html
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/scss/_styles_project.scss

Comment on lines 24 to +31
{{ if and $link.items (gt (len $link.items) 0) }}
<ul class="gd-footer-banner-sublinks gd-footer-sublinks collapse d-lg-flex" id="gd-footer-banner-sublinks-item-{{ $index }}">
<ul class="gd-footer-banner-sublinks gd-footer-sublinks collapse d-lg-flex w-100 justify-content-lg-end" id="gd-footer-banner-sublinks-item-{{ $index }}">
{{ range $sublink := $link.items }}
<li class="gd-footer-banner-sublinks-item gd-footer-sublinks-item">
{{ if and $sublink.link $sublink.title }}
{{ template "absolute-link" (dict "url" $sublink.link "text" $sublink.title "class" "gd-footer-sublinks-item-link" "idPrefix" "footer-link-") }}
{{ else }}
<span class="gd-footer-sublinks-item-link">&nbsp;</span>
{{ end }}
</li>
{{ if and (ne $sublink.action "subscribe") $sublink.link $sublink.title }}
<li class="gd-footer-banner-sublinks-item gd-footer-sublinks-item">
{{ template "absolute-link" (dict "url" $sublink.link "text" $sublink.title "class" "gd-footer-banner-sublinks-item-link gd-footer-sublinks-item-link" "idPrefix" "footer-sublink-") }}
</li>
{{ end }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Avoid emitting an empty sublinks list after filtering.

The condition on Line 24 checks raw $link.items, while Line 27 filters out subscribe and invalid entries. If none remain, the template still emits an empty <ul> and collapse target, which can leave blank full-width spacing. Gate the wrapper on at least one eligible sublink.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@layouts/partials/footer.html` around lines 24 - 31, Update the footer
sublinks wrapper condition around the `$link.items` loop so it renders only when
at least one item passes the existing `$sublink` eligibility checks: action is
not "subscribe", and both link and title are present. Preserve the current
filtering and rendering for eligible entries, while preventing the `<ul>` and
collapse target from being emitted when none remain.

@czechian
czechian merged commit bfbbbba into master Jul 21, 2026
2 checks passed
@czechian
czechian deleted the poc/footer-ai-links branch July 21, 2026 08:25
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.

2 participants