diff --git a/.ci/vale/styles/Google/Quotes.yml b/.ci/vale/styles/Google/Quotes.yml
index 3cb6f1abd..e5260263a 100644
--- a/.ci/vale/styles/Google/Quotes.yml
+++ b/.ci/vale/styles/Google/Quotes.yml
@@ -1,7 +1,8 @@
extends: existence
-message: "Commas and periods go inside quotation marks."
+message: "Commas and periods go inside quotation marks (unless in code examples or technical values)."
link: 'https://developers.google.com/style/quotation-marks'
-level: error
+# Changed to warning due to false positives with code examples
+level: warning
nonword: true
tokens:
- '"[^"]+"[.,?]'
diff --git a/.ci/vale/styles/config/vocabularies/InfluxDataDocs/accept.txt b/.ci/vale/styles/config/vocabularies/InfluxDataDocs/accept.txt
index e9f7aa19a..7f61bcf0a 100644
--- a/.ci/vale/styles/config/vocabularies/InfluxDataDocs/accept.txt
+++ b/.ci/vale/styles/config/vocabularies/InfluxDataDocs/accept.txt
@@ -42,7 +42,7 @@ System.Data.Odbc
TBs?
\bUI\b
URL
-\w*-?\w*url\w*-\w*
+(?i)\w*-?\w*url\w*-\w*
US (East|West|Central|North|South|Northeast|Northwest|Southeast|Southwest)
Unix
WALs?
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6636a0370..22fda0c22 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -42,6 +42,16 @@ jobs:
- run:
name: Hugo Build
command: yarn hugo --environment production --logLevel info --gc --destination workspace/public
+ - run:
+ name: Generate LLM-friendly Markdown
+ command: |
+ if [ "$CIRCLE_BRANCH" = "master" ]; then
+ # Full build for production deployments
+ yarn build:md --public-dir workspace/public
+ else
+ # Incremental build for PRs - only process changed files
+ yarn build:md --public-dir workspace/public --only-changed --base-branch origin/master
+ fi
- persist_to_workspace:
root: workspace
paths:
diff --git a/.claude/agents/hugo-ui-dev.md b/.claude/agents/hugo-ui-dev.md
new file mode 100644
index 000000000..e1e8a9de5
--- /dev/null
+++ b/.claude/agents/hugo-ui-dev.md
@@ -0,0 +1,269 @@
+---
+name: hugo-ui-dev
+description: Hugo template and SASS/CSS development specialist for the InfluxData docs-v2 repository. Use this agent for creating/editing Hugo layouts, partials, shortcodes, and SASS stylesheets. This agent focuses on structure and styling, not JavaScript/TypeScript behavior.
+tools: ["*"]
+model: sonnet
+---
+
+# Hugo Template & SASS/CSS Development Agent
+
+## Purpose
+
+Specialized agent for Hugo template development and SASS/CSS styling in the InfluxData docs-v2 repository. Handles the **structure and styling** layer of the documentation site UI.
+
+## Scope and Responsibilities
+
+### Primary Capabilities
+
+1. **Hugo Template Development**
+ - Create and modify layouts in `layouts/`, `layouts/partials/`, `layouts/shortcodes/`
+ - Implement safe data access patterns for Hugo templates
+ - Handle Hugo's template inheritance and partial inclusion
+ - Configure page types and content organization
+
+2. **SASS/CSS Styling**
+ - Develop styles in `assets/styles/`
+ - Implement responsive layouts and component styling
+ - Follow BEM or project-specific naming conventions
+ - Optimize CSS for production builds
+
+3. **Hugo Data Integration**
+ - Access data from `data/` directory safely
+ - Pass data to components via `data-*` attributes
+ - Handle YAML/JSON data files for dynamic content
+
+### Out of Scope (Use ts-component-dev agent instead)
+
+- TypeScript/JavaScript component implementation
+- Event handlers and user interaction logic
+- State management and DOM manipulation
+- Component registry and initialization
+
+## Critical Testing Requirement
+
+**Hugo's `npx hugo --quiet` only validates template syntax, not runtime execution.**
+
+Template errors like accessing undefined fields, nil values, or incorrect type assertions only appear when Hugo actually renders pages.
+
+### Mandatory Testing Protocol
+
+After modifying any file in `layouts/`:
+
+```bash
+# Step 1: Start Hugo server and check for errors
+npx hugo server --port 1314 2>&1 | head -50
+```
+
+**Success criteria:**
+
+- No `error calling partial` messages
+- No `can't evaluate field` errors
+- No `template: ... failed` messages
+- Server shows "Web Server is available at
{{ printf "%#v" $myVariable }}
+```
+
+### Enable Verbose Mode
+
+```bash
+npx hugo server --port 1314 --verbose 2>&1 | head -100
+```
+
+### Check Data File Loading
+
+```bash
+cat data/article-data/influxdb/influxdb3-core/articles.yml | head -20
+```
+
+## SASS/CSS Guidelines
+
+### File Organization
+
+- Component styles in `assets/styles/layouts/`
+- Use SASS variables from existing theme
+- Follow mobile-first responsive design
+
+### Naming Conventions
+
+- Use BEM or project conventions
+- Prefix component styles (e.g., `.api-nav`, `.api-toc`)
+- Use state classes: `.is-active`, `.is-open`, `.is-hidden`
+
+### Common Patterns
+
+```scss
+// Component container
+.api-nav {
+ // Base styles
+
+ &-group-header {
+ // Child element
+ }
+
+ &.is-open {
+ // State modifier
+ }
+}
+```
+
+## Workflow
+
+1. **Understand Requirements**
+ - What page type or layout is being modified?
+ - What data does the template need?
+ - Does this require styling changes?
+
+2. **Implement Template**
+ - Use safe data access patterns
+ - Add `data-component` attributes for interactive elements
+ - Do not add inline JavaScript
+
+3. **Add Styling**
+ - Create/modify SCSS files as needed
+ - Follow existing patterns and variables
+
+4. **Test Runtime**
+ - Run Hugo server (not just build)
+ - Verify page renders without errors
+ - Check styling in browser
+
+5. **Clean Up**
+ - Remove debug statements
+ - Stop test server
+
+## Quality Checklist
+
+Before considering template work complete:
+
+- [ ] No inline `
+```
+
+**Correct - Clean separation:**
+
+Template (`layouts/partials/api/sidebar-nav.html`):
+
+```html
+
+```
+
+TypeScript (`assets/js/components/api-nav.ts`):
+
+```typescript
+interface ApiNavOptions {
+ component: HTMLElement;
+}
+
+export default function initApiNav({ component }: ApiNavOptions): void {
+ const headers = component.querySelectorAll('.api-nav-group-header');
+
+ headers.forEach((header) => {
+ header.addEventListener('click', () => {
+ const isOpen = header.classList.toggle('is-open');
+ header.setAttribute('aria-expanded', String(isOpen));
+ header.nextElementSibling?.classList.toggle('is-open', isOpen);
+ });
+ });
+}
+```
+
+Register in `main.js`:
+
+```javascript
+import initApiNav from './components/api-nav.js';
+
+const componentRegistry = {
+ 'api-nav': initApiNav,
+ // ... other components
+};
+```
+
+### Data Passing Pattern
+
+Pass Hugo data to TypeScript via `data-*` attributes:
+
+Template:
+
+```html
+