Skip to content

feat(website): improve Envilder discoverability - #474

Merged
macalbert merged 13 commits into
mainfrom
macalbert-audit-envilder-growth
Jul 31, 2026
Merged

feat(website): improve Envilder discoverability#474
macalbert merged 13 commits into
mainfrom
macalbert-audit-envilder-growth

Conversation

@macalbert

@macalbert macalbert commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Summary

Improves Envilder's discoverability and trust surface by fixing a CloudFront asset rewrite defect, aligning public claims with shipped behavior, and expanding the documentation into focused localized routes.
Adds privacy-safe conversion tracking, Marketplace-ready GitHub Action metadata, and canonical registry metadata for all runtime SDKs.

Changes

  • Fix WebP requests so CloudFront preserves asset paths and query strings.
  • Replace unsupported product claims and unsafe example values across website and documentation surfaces.
  • Publish 33 localized documentation routes with manifest-derived sitemap, canonical, hreflang, and legacy-fragment compatibility.
  • Add delegated analytics events that never send code snippets, secrets, or secret paths.
  • Add a generated root GitHub Action manifest while retaining the existing subdirectory Action reference.
  • Point SDK package metadata to their new canonical Envilder documentation pages.

Testing

  • pnpm test passes
  • pnpm lint passes
  • pnpm verify:gha passes

Related

N/A

Summary by CodeRabbit

  • New Features

    • Added a reorganized documentation hub with dedicated, localized pages in English, Catalan, and Spanish.
    • Improved documentation navigation with grouped menus, breadcrumbs, mobile support, and legacy-link redirection.
    • Added analytics for navigation, downloads, SDK selections, and code-copy actions.
    • Added WebP asset support for URL rewriting.
    • Added a roadmap link for GCP support.
  • Bug Fixes

    • Improved GitHub Action packaging and manifest consistency.
    • Replaced realistic secret examples with safe placeholders.
    • Preserved WebP request paths and query strings.

macalbert and others added 7 commits July 31, 2026 12:13
Treat WebP files as static assets so CloudFront does not redirect poster requests to directory URLs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Remove unsupported Marketplace and GCP examples.

Correct rotation and audit semantics.

Keep public docs synchronized with current CLI and Action behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 31, 2026 10:50
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@macalbert, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 27 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 8698a8a4-2a05-4e20-9bc3-acaaf131884d

📥 Commits

Reviewing files that changed from the base of the PR and between f15d1ff and 6fe7064.

📒 Files selected for processing (5)
  • docs/github-action.md
  • src/website/src/components/CodeBlock.astro
  • src/website/src/components/Footer.astro
  • src/website/src/components/Providers.astro
  • tests/website/static-site.test.ts

Walkthrough

The PR restructures localized documentation into route-based pages, adds delegated analytics and copy handling, updates GitHub Action publishing, refreshes translations and package metadata, adds WebP routing support, and expands website and manifest validation.

Changes

GitHub Action publishing

Layer / File(s) Summary
Build, release documentation, and manifest validation
scripts/build-github-action.mjs, docs/github-action.md, docs/CHANGELOG.md, tests/envilder/apps/gha/ActionManifest.test.ts
The build rewrites the root action manifest to reference the bundled path. Documentation uses the floating @v0 tag and updated release steps. Tests compare both manifests.

Localized documentation platform

Layer / File(s) Summary
Route registry and page rendering
src/website/src/i18n/docs-routes.ts, src/website/src/i18n/localized-routes.ts, src/website/src/i18n/types.ts, src/website/src/components/Docs*.astro, src/website/src/pages/*/docs*
The site uses typed documentation routes, localized catch-all pages, a documentation hub, and a reusable shell. Articles render by route key with manifest-driven navigation.
Localized content
src/website/src/i18n/en.ts, src/website/src/i18n/ca.ts, src/website/src/i18n/es.ts
Translations add documentation metadata and navigation. Provider availability, prerequisites, logging, and GitHub Action text are updated.

Website analytics and content controls

Layer / File(s) Summary
Analytics and copy interactions
src/website/src/scripts/analytics.ts, src/website/src/layouts/BaseLayout.astro, src/website/src/components/CodeBlock.astro, src/website/src/components/GetStarted.astro, src/website/src/components/Sdks.astro, src/website/src/components/HowItWorks.astro, src/website/src/components/Navbar.astro, src/website/src/components/Footer.astro, src/website/src/components/Hero.astro
The site dispatches allowlisted analytics events through delegated click handling. Copy controls use command metadata and emit analytics:copied. Navigation, SDK, package, hero, footer, and setup elements include event metadata.
Provider and example updates
src/website/src/components/Providers.astro, src/website/src/components/GitHubAction.astro
Code examples receive stable content IDs. GCP command examples are removed and replaced with a roadmap link. Example secrets use a non-secret placeholder.

Supporting fixes and validation

Layer / File(s) Summary
Routing, metadata, and regression tests
src/iac/lib/stacks/cloudfront-url-rewrite.js, tests/iac/lib/stacks/cloudfrontUrlRewrite.test.ts, src/sdks/dotnet/Envilder.csproj, src/sdks/nodejs/package.json, src/sdks/python/pyproject.toml, tests/website/static-site.test.ts
WebP assets bypass route rewriting. SDK package metadata points to documentation resources. Static-site tests cover localized routes, duplicate IDs, unavailable claims, credential-like strings, and analytics markup.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: bug

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary website and discoverability improvements in the pull request.
Description check ✅ Passed The description covers the main changes, testing, and related issues, but it omits the template’s Type of change and Notes sections.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch macalbert-audit-envilder-growth

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR improves Envilder’s public “trust surface” and discoverability by fixing CloudFront static asset rewrites, restructuring the website docs into localized, route-based pages, and aligning marketing/docs claims with shipped behavior. It also adds privacy-safe analytics instrumentation, generates a root GitHub Action manifest for Marketplace-friendly usage, and points SDK package metadata to canonical docs pages.

Changes:

  • Fix CloudFront URL rewrite handling for .webp assets (preserving paths/query strings).
  • Replace fragment-based docs with a manifest-driven, localized docs route structure (sitemap/SEO coverage via tests).
  • Add delegated, privacy-safe analytics attributes + generate a root action.yml and update docs/metadata accordingly.

Reviewed changes

Copilot reviewed 44 out of 44 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/website/static-site.test.ts Expand SEO coverage for docs routes
tests/iac/lib/stacks/cloudfrontUrlRewrite.test.ts Add .webp rewrite regression test
tests/iac/lib/stacks/snapshots/staticWebsiteStack.test.ts.snap Snapshot update: include .webp extension
tests/envilder/apps/gha/ActionManifest.test.ts Assert root manifest matches subdir
src/website/src/scripts/analytics.ts Delegated analytics + safe copy handler
src/website/src/pages/es/docs/[...slug].astro ES docs article routing
src/website/src/pages/es/docs.astro ES docs hub uses DocsPage
src/website/src/pages/docs/[...slug].astro EN docs article routing
src/website/src/pages/docs.astro EN docs hub uses DocsPage
src/website/src/pages/ca/docs/[...slug].astro CA docs article routing
src/website/src/pages/ca/docs.astro CA docs hub uses DocsPage
src/website/src/layouts/BaseLayout.astro Load delegated analytics script
src/website/src/i18n/types.ts Extend i18n types for docs/providers
src/website/src/i18n/localized-routes.ts Add localized docs route map
src/website/src/i18n/es.ts Align ES claims + add docs strings
src/website/src/i18n/en.ts Align EN claims + add docs strings
src/website/src/i18n/docs-routes.ts New docs route manifest + legacy hashes
src/website/src/i18n/ca.ts Align CA claims + add docs strings
src/website/src/components/ThemeSwitcher.astro Remove old GA theme event
src/website/src/components/Sdks.astro Add analytics attrs + content IDs
src/website/src/components/Providers.astro Remove GCP examples; add roadmap link
src/website/src/components/Navbar.astro Route-based docs dropdown + analytics
src/website/src/components/HowItWorks.astro Add runtime/package analytics + content IDs
src/website/src/components/Hero.astro Replace unsafe example secret + analytics
src/website/src/components/GitHubAction.astro Add content IDs for copy tracking
src/website/src/components/GetStarted.astro Copy-to-clipboard install buttons + analytics
src/website/src/components/Footer.astro Route-based docs links; remove inline tracking
src/website/src/components/DocsShell.astro New docs shell layout/navigation
src/website/src/components/DocsPage.astro Page wrapper for hub/articles
src/website/src/components/DocsHub.astro Docs hub cards + legacy hash redirect
src/website/src/components/DocsArticle.astro Split docs into route-specific articles
src/website/src/components/CodeBlock.astro Delegate copy + analytics metadata
src/sdks/python/pyproject.toml Point metadata to canonical docs
src/sdks/nodejs/package.json Update homepage/tags for discoverability
src/sdks/dotnet/Envilder.csproj Update package URL/tags/description
src/iac/lib/stacks/cloudfront-url-rewrite.js Treat .webp as static extension
scripts/build-github-action.mjs Generate root action.yml on build
README.md Update claims + use @v0 action tag
package.json Verify action bundle + root manifest
github-action/README.md Update usage/examples and claims
docs/github-action.md Update docs for tagged/prebuilt action
docs/CHANGELOG.md Update GHA “package” link wording
action.yml New root composite action manifest
.github/skills/website-content-strategy/SKILL.md Align website messaging guidance

Comment thread src/website/src/components/Footer.astro
Comment thread src/website/src/components/Providers.astro

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (5)
src/website/src/components/DocsShell.astro (1)

28-40: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Do not navigate on every change event of the select.

onchange="window.location.assign(this.value)" navigates as soon as the value changes. When a keyboard user moves through the options with arrow keys, the browser fires change for each option and the page navigates before the user commits a choice. The inline handler also requires unsafe-inline if a script-src CSP is added later.

Replace the select with the same link list used in the sidebar, or attach a script that navigates only after an explicit commit.

♻️ Option: render a link list on mobile instead of a select
     <div class="docs-mobile-select">
-      <label class="sr-only" for="docs-route-select">{t.docs.mobileNavigation}</label>
-      <select id="docs-route-select" onchange="window.location.assign(this.value)">
-        {articleRoutes.map((route) => (
-          <option
-            value={localizedPath(lang, route.path)}
-            selected={route.key === routeKey}
-          >
-            {t.docs.pages[route.key].navLabel}
-          </option>
-        ))}
-      </select>
+      <nav aria-label={t.docs.mobileNavigation}>
+        <ul>
+          {articleRoutes.map((route) => (
+            <li>
+              <a
+                href={localizedPath(lang, route.path)}
+                aria-current={route.key === routeKey ? 'page' : undefined}
+              >
+                {t.docs.pages[route.key].navLabel}
+              </a>
+            </li>
+          ))}
+        </ul>
+      </nav>
     </div>
🤖 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 `@src/website/src/components/DocsShell.astro` around lines 28 - 40, Replace the
mobile select and its inline onchange handler in DocsShell with the existing
sidebar-style link list, using localizedPath(lang, route.path) for each
destination and preserving the current route indication and navigation labels.
src/website/src/components/DocsArticle.astro (1)

1185-1195: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Restore keyboard access to horizontally scrollable tables.

The removed client script previously wrapped tables in an accessible scroll container. On viewports under 769px the table itself scrolls horizontally, and a scrollable region without focus cannot be reached by keyboard. Wrap wide tables in a container with tabindex="0" and role="region", then move the overflow rule to that container.

♻️ Suggested markup and style change
   `@media` (max-width: 768px) {
-    .docs-table {
-      display: block;
-      overflow-x: auto;
-      white-space: nowrap;
-    }
+    .table-scroll {
+      display: block;
+      overflow-x: auto;
+      white-space: nowrap;
+    }

Then wrap each <table class="docs-table"> in the markup:

<div class="table-scroll" role="region" tabindex="0" aria-label={t.docs.tableScrollLabel}>
  <table class="docs-table"></table>
</div>
🤖 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 `@src/website/src/components/DocsArticle.astro` around lines 1185 - 1195,
Update the table markup in DocsArticle to wrap each table.docs-table in a
.table-scroll container with role="region", tabindex="0", and the localized
t.docs.tableScrollLabel aria-label. Move the mobile horizontal overflow and
related scrolling styles from .docs-table to .table-scroll, while preserving the
existing table layout and responsive behavior.
src/website/src/components/DocsHub.astro (1)

13-46: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Derive the fallback path and the locale list at build time.

The script hard-codes /docs/github-action/ and the locales ca|es. If the manifest path changes or a locale is added, legacy hash redirects break with no build error. Pass both values through define:vars, which already serializes plain data.

♻️ Proposed change
-const legacyHashes = Object.fromEntries(
+const ghaPath = docsRouteManifest.find((route) => route.key === 'github-action')?.path;
+const localePrefixes = ['ca', 'es'];
+const legacyHashes = Object.fromEntries(
   docsRouteManifest.flatMap((route) =>
     route.legacyHashes.map((hash) => [hash, route.path]),
   ),
 );
-<script define:vars={{ legacyHashes }}>
+<script define:vars={{ legacyHashes, ghaPath, localePrefixes }}>
   const hash = window.location.hash.slice(1).toLowerCase();
   const targetPath =
-    legacyHashes[hash] ?? (hash.startsWith('gha-') ? '/docs/github-action/' : null);
+    legacyHashes[hash] ?? (hash.startsWith('gha-') ? ghaPath : null);
 
   if (targetPath) {
-    const locale = window.location.pathname.match(/^\/(ca|es)(?=\/|$)/)?.[1];
+    const locale = localePrefixes.find(
+      (prefix) =>
+        window.location.pathname === `/${prefix}` ||
+        window.location.pathname.startsWith(`/${prefix}/`),
+    );

Replace localePrefixes with the shared locale list from the i18n module if one is exported.

🤖 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 `@src/website/src/components/DocsHub.astro` around lines 13 - 46, Update
DocsHub.astro to derive the GitHub Action fallback path and locale prefixes at
build time instead of hard-coding them in the client script. Use the manifest’s
existing route path for the gha- fallback, obtain the shared locale list from
the i18n module (exporting it if needed), and pass both plain values through
define:vars for runtime redirect construction.
src/website/src/pages/ca/docs/[...slug].astro (1)

8-24: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Unused routeKey prop from getStaticPaths.

getStaticPaths returns props: { routeKey: route.key }, but this file never reads Astro.props. Instead, it re-derives the route from Astro.params.slug with getDocsArticleRoute. Remove the unused prop, or use it directly instead of performing a second lookup.

♻️ Proposed simplification
 export function getStaticPaths() {
   return docsRouteManifest
     .filter((route) => route.key !== 'hub')
     .map((route) => ({
       params: { slug: route.path.replace(/^\/docs\/|\/$/g, '') },
-      props: { routeKey: route.key },
     }));
 }
🤖 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 `@src/website/src/pages/ca/docs/`[...slug].astro around lines 8 - 24, Remove
the unused routeKey value from getStaticPaths, or update the page to consume
Astro.props.routeKey and avoid the duplicate getDocsArticleRoute lookup; keep
the existing route validation and DocsPage routeKey behavior intact.
src/website/src/pages/docs/[...slug].astro (1)

5-21: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Triplicated getStaticPaths and route-resolution logic across locale files. All three catch-all documentation route files repeat the same filter/map over docsRouteManifest and the same getDocsArticleRoute resolution with an identical error path; only the lang literal and import depth differ.

  • src/website/src/pages/docs/[...slug].astro#L5-L21: extract the getStaticPaths body and the route/throw resolution block into a shared helper in docs-routes.ts (for example getLocalizedDocsPaths() / resolveDocsRoute(slug)), then call it here.
  • src/website/src/pages/ca/docs/[...slug].astro#L8-L24: call the same shared helper here instead of repeating the logic; also drop the unused props: { routeKey: route.key } since it is never read from Astro.props in this file.
  • src/website/src/pages/es/docs/[...slug].astro#L8-L24: call the same shared helper here instead of repeating the logic.
🤖 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 `@src/website/src/pages/docs/`[...slug].astro around lines 5 - 21, Extract the
duplicated docsRouteManifest path generation and getDocsArticleRoute resolution
into shared helpers in docs-routes.ts, preserving the existing filtering, slug
mapping, and unknown-route error behavior. Update
src/website/src/pages/docs/[...slug].astro (lines 5-21),
src/website/src/pages/ca/docs/[...slug].astro (lines 8-24), and
src/website/src/pages/es/docs/[...slug].astro (lines 8-24) to use those helpers;
in the ca file, also remove the unused routeKey props.
🤖 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 `@docs/github-action.md`:
- Around line 347-358: Update the release procedure in the “Commit the action
bundle referenced by action.yml” section to stage the generated root action.yml
alongside github-action/dist/index.js. Ensure the documented commit includes
both the bundle and root manifest so generated metadata and runs.main remain
synchronized.

In `@src/website/src/components/CodeBlock.astro`:
- Around line 19-27: Remove the 'code-example' default from contentId in
CodeBlock.astro and make the prop required, then update every CodeBlock call
site—including the three non-SDK usages in HowItWorks.astro—to provide a
distinct stable contentId value.

In `@src/website/src/components/DocsArticle.astro`:
- Around line 853-866: Update the locale documentation translation definitions
used by DocsArticle and the docs shell so every docsRouteKeys entry has a pages
record, including getting-started, aws-ssm, azure-key-vault, map-file, cli-pull,
cli-push, github-action, sdk-dotnet, sdk-python, and sdk-nodejs for ca and es,
plus any missing entries for en. Provide each page’s navLabel while preserving
the existing hub entry and locale-specific translations.

In `@src/website/src/components/Footer.astro`:
- Around line 111-119: Move the conditional click_github analytics attribute
from the documentation link rendering to the community link map, using
l.href.includes('github.com') as the condition and retaining
data-analytics-placement="footer-community". Ensure links.community renders the
tracking metadata while links.docs remains without the GitHub event.

In `@src/website/src/i18n/docs-routes.ts`:
- Around line 110-120: Update DocsHub.astro to import and use
resolveLegacyDocsHash when handling legacy documentation hashes, replacing the
inline gha-* check and hard-coded GitHub Actions route. Preserve the undefined
fallback so non-hub routes continue rendering correctly, and derive redirects
from the shared docs route manifest.

In `@tests/website/static-site.test.ts`:
- Around line 252-263: Update the forbiddenClaims matching in the static-site
test to compare normalized lowercase values, converting both the combined html
content and each claim before checking inclusion. Preserve the existing actual
filtering and forbidden-claim assertions.

---

Nitpick comments:
In `@src/website/src/components/DocsArticle.astro`:
- Around line 1185-1195: Update the table markup in DocsArticle to wrap each
table.docs-table in a .table-scroll container with role="region", tabindex="0",
and the localized t.docs.tableScrollLabel aria-label. Move the mobile horizontal
overflow and related scrolling styles from .docs-table to .table-scroll, while
preserving the existing table layout and responsive behavior.

In `@src/website/src/components/DocsHub.astro`:
- Around line 13-46: Update DocsHub.astro to derive the GitHub Action fallback
path and locale prefixes at build time instead of hard-coding them in the client
script. Use the manifest’s existing route path for the gha- fallback, obtain the
shared locale list from the i18n module (exporting it if needed), and pass both
plain values through define:vars for runtime redirect construction.

In `@src/website/src/components/DocsShell.astro`:
- Around line 28-40: Replace the mobile select and its inline onchange handler
in DocsShell with the existing sidebar-style link list, using
localizedPath(lang, route.path) for each destination and preserving the current
route indication and navigation labels.

In `@src/website/src/pages/ca/docs/`[...slug].astro:
- Around line 8-24: Remove the unused routeKey value from getStaticPaths, or
update the page to consume Astro.props.routeKey and avoid the duplicate
getDocsArticleRoute lookup; keep the existing route validation and DocsPage
routeKey behavior intact.

In `@src/website/src/pages/docs/`[...slug].astro:
- Around line 5-21: Extract the duplicated docsRouteManifest path generation and
getDocsArticleRoute resolution into shared helpers in docs-routes.ts, preserving
the existing filtering, slug mapping, and unknown-route error behavior. Update
src/website/src/pages/docs/[...slug].astro (lines 5-21),
src/website/src/pages/ca/docs/[...slug].astro (lines 8-24), and
src/website/src/pages/es/docs/[...slug].astro (lines 8-24) to use those helpers;
in the ca file, also remove the unused routeKey props.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 64fa82e7-e607-4e90-8ebc-b6b07625e053

📥 Commits

Reviewing files that changed from the base of the PR and between c53581b and dca6e6d.

⛔ Files ignored due to path filters (6)
  • .github/skills/website-content-strategy/SKILL.md is excluded by none and included by none
  • README.md is excluded by none and included by none
  • action.yml is excluded by none and included by none
  • github-action/README.md is excluded by none and included by none
  • package.json is excluded by none and included by none
  • tests/iac/lib/stacks/__snapshots__/staticWebsiteStack.test.ts.snap is excluded by !**/*.snap and included by tests/**
📒 Files selected for processing (38)
  • docs/CHANGELOG.md
  • docs/github-action.md
  • scripts/build-github-action.mjs
  • src/iac/lib/stacks/cloudfront-url-rewrite.js
  • src/sdks/dotnet/Envilder.csproj
  • src/sdks/nodejs/package.json
  • src/sdks/python/pyproject.toml
  • src/website/src/components/CodeBlock.astro
  • src/website/src/components/DocsArticle.astro
  • src/website/src/components/DocsHub.astro
  • src/website/src/components/DocsPage.astro
  • src/website/src/components/DocsShell.astro
  • src/website/src/components/Footer.astro
  • src/website/src/components/GetStarted.astro
  • src/website/src/components/GitHubAction.astro
  • src/website/src/components/Hero.astro
  • src/website/src/components/HowItWorks.astro
  • src/website/src/components/Navbar.astro
  • src/website/src/components/Providers.astro
  • src/website/src/components/Sdks.astro
  • src/website/src/components/ThemeSwitcher.astro
  • src/website/src/i18n/ca.ts
  • src/website/src/i18n/docs-routes.ts
  • src/website/src/i18n/en.ts
  • src/website/src/i18n/es.ts
  • src/website/src/i18n/localized-routes.ts
  • src/website/src/i18n/types.ts
  • src/website/src/layouts/BaseLayout.astro
  • src/website/src/pages/ca/docs.astro
  • src/website/src/pages/ca/docs/[...slug].astro
  • src/website/src/pages/docs.astro
  • src/website/src/pages/docs/[...slug].astro
  • src/website/src/pages/es/docs.astro
  • src/website/src/pages/es/docs/[...slug].astro
  • src/website/src/scripts/analytics.ts
  • tests/envilder/apps/gha/ActionManifest.test.ts
  • tests/iac/lib/stacks/cloudfrontUrlRewrite.test.ts
  • tests/website/static-site.test.ts
💤 Files with no reviewable changes (1)
  • src/website/src/components/ThemeSwitcher.astro

Comment thread docs/github-action.md
Comment thread src/website/src/components/CodeBlock.astro
Comment thread src/website/src/components/DocsArticle.astro
Comment thread src/website/src/components/Footer.astro
Comment thread src/website/src/i18n/docs-routes.ts
Comment thread tests/website/static-site.test.ts Outdated
Copilot AI review requested due to automatic review settings July 31, 2026 11:17
@github-actions github-actions Bot added size/XL Very large change — 400+ lines / 25+ files; should be split enhancement New feature or request documentation Improvements or additions to documentation npm Pull requests that update npm/pnpm packages iac Infrastructure as Code (AWS CDK) dotnet Pull requests that update .NET / C# code skills Changes to .github/skills guidance shell Shell / PowerShell scripts labels Jul 31, 2026
@macalbert macalbert self-assigned this Jul 31, 2026
macalbert and others added 5 commits July 31, 2026 13:20
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 44 out of 44 changed files in this pull request and generated no new comments.

Suppressed comments (6)

src/website/src/components/DocsArticle.astro:26

  • These template literals use \ as a line-continuation escape, which removes the newline (and the backslash) from the resulting string. That means the docs code block will render as one long line instead of a multi-line command with visible \\ continuations.

This issue also appears in the following locations of the same file:

  • line 28
  • line 31
    src/website/src/components/DocsArticle.astro:29
  • Same line-continuation issue here: a single backslash at EOL escapes the newline inside the template literal, so the rendered snippet loses the intended formatting.
    src/website/src/components/DocsArticle.astro:34
  • Same line-continuation issue here: the single \ at end-of-line escapes the newline inside the template literal, so the code snippet will not render with line breaks/backslashes as intended.
    tests/website/static-site.test.ts:6
  • localizedRoutes is imported but never used in this test file, which can trigger unused-import lint failures and adds noise to the test setup.
    src/website/src/components/GetStarted.astro:253
  • The .install-code style block repeats padding and color assignments, which makes the CSS harder to maintain and can hide future edits (one of the duplicates may get updated while the other is missed).
    padding: 0;
    text-align: left;
    padding: 0;
    color: var(--color-text);

src/website/src/components/DocsShell.astro:35

  • When DocsShell is rendered for the docs hub (routeKey === 'hub'), none of the <option> entries can match routeKey, so the select defaults to the first item without reflecting the current page. This is confusing on mobile where the select is the primary navigation control.
        {articleRoutes.map((route) => (
          <option
            value={localizedPath(lang, route.path)}
            selected={route.key === routeKey}
          >

Copilot AI review requested due to automatic review settings July 31, 2026 11:24
@macalbert
macalbert merged commit 920bb0c into main Jul 31, 2026
28 checks passed
@macalbert
macalbert deleted the macalbert-audit-envilder-growth branch July 31, 2026 11:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 44 out of 44 changed files in this pull request and generated no new comments.

Suppressed comments (2)

src/website/src/components/DocsShell.astro:31

  • The mobile docs route <select> excludes the hub route, so when routeKey is 'hub' no <option> is marked selected and the browser will default to the first article, misrepresenting the current page. Including the hub route in the options keeps the selection accurate.
        {articleRoutes.map((route) => (

tests/website/static-site.test.ts:10

  • localizedDocsPages hard-codes the language list (['en','ca','es']) even though the test already depends on localizedLanguages() for hreflang expectations. This can silently diverge if localizedRoutes changes (e.g., adding/removing locales for a docs path), causing the test to miss/over-report missing pages.

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

Labels

documentation Improvements or additions to documentation dotnet Pull requests that update .NET / C# code enhancement New feature or request iac Infrastructure as Code (AWS CDK) npm Pull requests that update npm/pnpm packages shell Shell / PowerShell scripts size/XL Very large change — 400+ lines / 25+ files; should be split skills Changes to .github/skills guidance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants