Conversation
* feat: refresh community website content * docs: align release and contribution guides * fix: address release review findings * feat: show blog commit contributors * feat: link latest article commit * fix: simplify homepage repository card * feat: improve SEO analytics and AI discovery * feat: add draft previews and release polish * fix: preserve blog commit contributors
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
indopensource-org | ab7bc84 | Commit Preview URL Branch Preview URL |
Jul 20 2026, 04:53 PM |
There was a problem hiding this comment.
Code Review
This pull request migrates the deployment target from GitHub Pages to Cloudflare Workers Static Assets, updates contribution guidelines and release documentation, and introduces several new pages including a dedicated roadmap, a community directory, and a top users ranking page. Additionally, it integrates Google Analytics and Cloudflare Web Analytics, refactors structured data, and updates the blog sync script to support multiple authors. The review feedback highlights three key areas for improvement: defensively filtering out falsy values in the blog sync script to prevent runtime errors, normalizing line endings in the inline Google Analytics script to avoid CSP hash mismatches on Windows/CI environments, and dynamically resolving the sitemap URL in robots.txt using BASE_URL to support subpath deployments.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
I am having trouble creating individual review comments. Click here to see my feedback.
scripts/sync-blog-posts.mjs (264-271)
If resolvedAuthor.author is null or undefined, it will be added as the first element of the resolvedAuthors array, resulting in [null, ...] or [undefined, ...]. This can cause runtime errors when rendering author details in Astro templates. Filtering out falsy values defensively prevents this issue.
const resolvedAuthors = (resolvedAuthor.fromFrontmatter\n ? [\n resolvedAuthor.author,\n ...commitMeta.authors.filter(\n (author) => author.name.toLowerCase() !== (resolvedAuthor.author?.name || '').toLowerCase()\n )\n ]\n : commitMeta.authors.length ? commitMeta.authors : [resolvedAuthor.author]\n ).filter(Boolean);src/layouts/BaseLayout.astro (53-58)
If the source file is checked out with CRLF line endings (e.g., on Windows or certain CI environments), the template literal for googleAnalyticsScript will contain \r\n. However, the HTML generator/compiler might normalize it to \n when emitting the inline script. This mismatch between the hashed string and the emitted script will cause the CSP SHA-256 hash check to fail and block Google Analytics. Normalizing the line endings to \n before hashing and emitting ensures consistency across all platforms.
const googleAnalyticsScript = googleAnalyticsId\n ? `window.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', ${JSON.stringify(googleAnalyticsId)});`.replace(/\r\n/g, '\n')\n : '';
src/pages/robots.txt.ts (10-11)
If the site is configured to be served under a subpath via import.meta.env.BASE_URL, hardcoding /sitemap.xml relative to the origin will point to the root domain instead of the correct subpath sitemap. Using BASE_URL ensures sitemap resolution is correct across all deployment environments.
const origin = site ?? new URL('https://indopensource.org');\n const baseUrl = import.meta.env.BASE_URL.replace(/\/?$/, '/');\n const sitemapUrl = new URL(baseUrl + 'sitemap.xml', origin).toString();
What changed
<head>PUBLIC_GOOGLE_ANALYTICS_IDWhy
The production bundle contained the Measurement ID, but dynamically injecting the tag could prevent Google installation checks from detecting the standard snippet reliably.
Validation
npm test(20 passed)npm run check(0 errors, warnings, or hints)PUBLIC_GOOGLE_ANALYTICS_ID=G-KT6W59QLYP npm run build(107 pages)<head>and its CSP hash matches