Refresh community pages, roadmap, and donation flow#42
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
indopensource-org | 10a1406 | Commit Preview URL Branch Preview URL |
Jul 20 2026, 03:20 PM |
|
Warning Review limit reached
Next review available in: 48 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe PR expands the site with donation, roadmap, community, and user-ranking pages; updates blog provenance, SEO, analytics, navigation, and project discovery; revises editorial and policy content; and adds redirects, sitemap entries, and release documentation. ChangesSite expansion and content restructuring
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ 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 |
There was a problem hiding this comment.
Code Review
This pull request introduces several new pages and components, including a dedicated DonationPage component, a roadmap page with local timeline data, and a users page ranking top contributors. It also refactors the site navigation, footer, and community directory to pull data dynamically, while refining content across legal, FAQ, and press pages. The code review feedback recommends avoiding hardcoded sponsor logos in DonationPage.astro by defining them in the data array, and suggests extracting the duplicated logic for grouping projects and calculating top users across multiple pages into a shared utility function.
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.
|
@codex review |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (3)
src/pages/index.astro (1)
20-32: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick winNormalize the owner key for robust aggregation.
GitHub usernames are case-insensitive. If
projects.jsonrecords the same owner with different casing across different projects (e.g.,Ownervsowner), the exact string match in theMapwill split their stats into multiple entries.Consider normalizing the Map key with
.toLowerCase()while preserving the original casing for display.♻️ Proposed refactor
const usersByOwner = new Map<string, { owner: string; avatarUrl: string; repositories: number; stars: number }>(); for (const project of projects.filter((item) => !item.syncFailed && item.owner)) { const owner = project.owner as string; - const user = usersByOwner.get(owner) || { + const ownerKey = owner.toLowerCase(); + const user = usersByOwner.get(ownerKey) || { owner, avatarUrl: project.ownerAvatarUrl || `https://avatars.githubusercontent.com/${encodeURIComponent(owner)}?size=80`, repositories: 0, stars: 0 }; user.repositories += 1; user.stars += project.stars; - usersByOwner.set(owner, user); + usersByOwner.set(ownerKey, user); }🤖 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/pages/index.astro` around lines 20 - 32, Normalize the owner key used by usersByOwner to lowercase before Map lookup and storage, while retaining the original project.owner value in the user object for display. Ensure differently cased GitHub usernames aggregate into the same repositories and stars totals.src/pages/projects.astro (1)
31-49: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winExtract user ranking computation to a shared helper.
This aggregation logic for
usersByOwnerandtopUsersis nearly identical to the logic introduced insrc/pages/users.astro. Consider extracting this into a shared helper function (e.g., insrc/lib/projects.tsor a newsrc/lib/users.ts) to avoid duplication and ensure consistency between the pages.🤖 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/pages/projects.astro` around lines 31 - 49, Extract the usersByOwner aggregation and topUsers sorting logic from the page into a shared helper, colocated in an appropriate library module such as projects or users. Update both projects.astro and users.astro to call this helper so owner grouping, avatar fallback, ranking order, and five-user limit remain consistent.src/pages/legal.astro (1)
8-29: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider opening external policy links in a new tab.
The
policiesarray definesisExternal: truefor the new external links, but the rendering logic below (Line 70) does not applytarget="_blank"andrel="noopener noreferrer". For consistency with other pages, consider updating the link element to open external policies in a new tab.♻️ Proposed fix
Apply this change to the anchor tag around Line 70:
- <a class="meta-row mt-4 inline-block font-semibold text-brand underline decoration-2 underline-offset-4 hover:text-accent" href={href}>Selengkapnya →</a> + <a class="meta-row mt-4 inline-block font-semibold text-brand underline decoration-2 underline-offset-4 hover:text-accent" href={href} {...(p.isExternal ? { target: '_blank', rel: 'noopener noreferrer' } : {})}>Selengkapnya →</a>🤖 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/pages/legal.astro` around lines 8 - 29, Update the policy anchor rendering logic to use the existing policies.isExternal flag: external links must open in a new tab with target="_blank" and rel="noopener noreferrer", while internal links retain their current behavior.
🤖 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 `@src/pages/contact.astro`:
- Around line 20-22: Update the roadmap card rendering loop to apply
external-link attributes only when c.href starts with "http": conditionally set
rel to "noopener noreferrer" and render the "(situs eksternal)" screen-reader
text only for those URLs, leaving the internal /roadmap/ link without either.
In `@src/pages/sitemap.xml.ts`:
- Around line 40-44: Add /users/, /faq/, /kode-etik/, /legal/, and /press/ to
the staticPages array alongside the existing public routes, ensuring all
specified pages are included in sitemap generation.
In `@src/pages/sponsors.astro`:
- Around line 1-3: Update the redirect target in the sponsors page frontmatter
to pass the donation path through the existing withBase helper before calling
Astro.redirect, preserving the 301 status and ensuring the target respects the
configured ASTRO_BASE.
---
Nitpick comments:
In `@src/pages/index.astro`:
- Around line 20-32: Normalize the owner key used by usersByOwner to lowercase
before Map lookup and storage, while retaining the original project.owner value
in the user object for display. Ensure differently cased GitHub usernames
aggregate into the same repositories and stars totals.
In `@src/pages/legal.astro`:
- Around line 8-29: Update the policy anchor rendering logic to use the existing
policies.isExternal flag: external links must open in a new tab with
target="_blank" and rel="noopener noreferrer", while internal links retain their
current behavior.
In `@src/pages/projects.astro`:
- Around line 31-49: Extract the usersByOwner aggregation and topUsers sorting
logic from the page into a shared helper, colocated in an appropriate library
module such as projects or users. Update both projects.astro and users.astro to
call this helper so owner grouping, avatar fallback, ranking order, and
five-user limit remain consistent.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 6b12bbaf-c409-4fa9-94cd-00596b57e184
⛔ Files ignored due to path filters (1)
public/brand/tokengratis-icon.pngis excluded by!**/*.png
📒 Files selected for processing (24)
src/components/DonationPage.astrosrc/components/HomeHero.astrosrc/components/ProjectsDirectory.astrosrc/components/SiteFooter.astrosrc/components/SiteHeader.astrosrc/data/communities.jsonsrc/data/roadmap.tssrc/layouts/BaseLayout.astrosrc/pages/contact.astrosrc/pages/donasi.astrosrc/pages/falsafah.astrosrc/pages/faq.astrosrc/pages/forum.astrosrc/pages/index.astrosrc/pages/kode-etik.astrosrc/pages/komunitas.astrosrc/pages/legal.astrosrc/pages/press.astrosrc/pages/projects.astrosrc/pages/roadmap.astrosrc/pages/sitemap.xml.tssrc/pages/sponsors.astrosrc/pages/tentang.astrosrc/pages/users.astro
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bb5e3a9240
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
/gemini review |
|
@codex review |
There was a problem hiding this comment.
Code Review
This pull request updates the IndopenSource website by transitioning to Cloudflare Workers, introducing a release checklist, and updating contribution guidelines. It also adds a 'Top User' ranking page, a dedicated 'Roadmap' page, a redesigned 'Donasi' page, and refactors the 'Komunitas' page to load data from a local JSON file. Review feedback suggests sanitizing external community URLs with safeHref to prevent XSS vulnerabilities, tightening the CSP script-src directive in BaseLayout.astro to adhere to the principle of least privilege, and improving accessibility by removing redundant words like 'avatar' from image alt attributes.
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.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a7e0944cd3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/pages/index.astro (1)
224-242: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winInconsistent usage of
withBasefor internal links.The links in this section use
withBase('/blog/'),withBase('/users/'), andwithBase('/donasi/'), whereas other internal links in this file (e.g.,href="/falsafah/"on line 82,href="/cara-berkontribusi/"on line 111,href="/roadmap/"on line 132, etc.) are written as raw strings. If the site relies on a base path configuration, ensure thatwithBaseis applied consistently across all internal links to prevent broken navigation.🤖 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/pages/index.astro` around lines 224 - 242, Standardize internal-link handling in the `index.astro` page by applying `withBase` consistently to the other internal `href` values, including links such as `/falsafah/`, `/cara-berkontribusi/`, and `/roadmap/`, while preserving the existing `withBase` usage in the Blog, Top User, and donation cards.
🧹 Nitpick comments (4)
README.md (1)
75-79: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsider removing the legacy GitHub Pages workflow entirely.
Instead of leaving warnings in the public
README.mdabout the legacy GitHub Pages deployment, consider deleting.github/workflows/deploy-pages.ymlcompletely if Cloudflare is now the sole production environment. This reduces technical debt and prevents confusion for new contributors.
README.md#L75-L79: Remove this warning once the legacy file is deleted.README.md#L116-L118: Remove this related warning in the auto-sync section.🤖 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 `@README.md` around lines 75 - 79, Remove the legacy .github/workflows/deploy-pages.yml workflow if Cloudflare is the sole production deployment path, then remove the related warning text at README.md lines 75-79 and 116-118. Ensure the README no longer presents GitHub Pages as an active or fallback deployment path.src/pages/blog/[...slug].astro (1)
29-31: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winHardcoded per-slug SEO title override doesn't scale.
A one-off slug check (
post.slug === 'bagaimana-open-source-mampu-bertahan') is used to override the SEO title instead of a data-driven field.src/lib/learning.tsjust introduced exactly this pattern as anseoTitle?: stringfield onLearningResource— following the same approach here (addingseoTitleto the blog-post schema/JSON and usingpost.seoTitle ||${post.title} - IndopenSource\) avoids accumulating slug-specific branches as more articles need custom SEO titles.🤖 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/pages/blog/`[...slug].astro around lines 29 - 31, Replace the slug-specific condition in the blog page SEO title logic with a data-driven optional seoTitle field on blog-post data, schema, and JSON; use post.seoTitle when present and otherwise fall back to `${post.title} - IndopenSource`, following the existing LearningResource pattern in src/lib/learning.ts.src/layouts/BaseLayout.astro (1)
251-273: 🔒 Security & Privacy | 🔵 TrivialAnalytics scripts load unconditionally with no consent gate.
Cloudflare Insights and GA
gtag.jsare injected on every page load whenever the corresponding env vars are set, with no cookie/consent-management check beforehand. Consider gating this behind a consent mechanism if the site expects EU visitors or falls under Indonesia's UU PDP, since GA in particular sets cookies and processes IP-based data.🤖 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/layouts/BaseLayout.astro` around lines 251 - 273, Gate both analytics initialization blocks in BaseLayout.astro behind the site’s existing cookie/consent-management mechanism, requiring affirmative consent before creating or appending the Cloudflare beacon or Google Analytics scripts and before calling gtag. Preserve the environment-token checks and ensure analytics remain disabled when consent is absent or declined.src/pages/projects/[slug].astro (1)
25-28: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winBrittle exact-string match for a boilerplate description.
Substituting
metaDescriptiononly when it exactly equals'Proyek dari daftar awesome-indonesia.'is fragile — any change to that placeholder upstream (data regeneration, wording tweak, trailing whitespace) silently stops the override from firing, and affected project pages quietly revert to the shared boilerplate meta description (an SEO regression that won't surface until manually checked). Consider fixing the placeholder at its source (whereverproject.metaDescription/descriptiongets set to this generic text) rather than pattern-matching it per page render.🤖 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/pages/projects/`[slug].astro around lines 25 - 28, Remove the exact-string placeholder handling from the `sourceDescription`/`metaDescription` logic in the page and fix the generic “awesome-indonesia” description at the source where `project.metaDescription` or `project.description` is populated. Ensure the source emits the intended project-specific description directly, so rendering does not depend on brittle text matching.
🤖 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 `@scripts/sync-blog-posts.mjs`:
- Around line 264-266: Update the resolvedAuthors assignment near
resolvedAuthor.fromFrontmatter to always use commitMeta.authors when it contains
contributors, regardless of frontmatter attribution; fall back to
[resolvedAuthor.author] only when commitMeta.authors is empty. Preserve the
existing commit-derived author ordering and avoid discarding contributors when
fromFrontmatter is true.
---
Outside diff comments:
In `@src/pages/index.astro`:
- Around line 224-242: Standardize internal-link handling in the `index.astro`
page by applying `withBase` consistently to the other internal `href` values,
including links such as `/falsafah/`, `/cara-berkontribusi/`, and `/roadmap/`,
while preserving the existing `withBase` usage in the Blog, Top User, and
donation cards.
---
Nitpick comments:
In `@README.md`:
- Around line 75-79: Remove the legacy .github/workflows/deploy-pages.yml
workflow if Cloudflare is the sole production deployment path, then remove the
related warning text at README.md lines 75-79 and 116-118. Ensure the README no
longer presents GitHub Pages as an active or fallback deployment path.
In `@src/layouts/BaseLayout.astro`:
- Around line 251-273: Gate both analytics initialization blocks in
BaseLayout.astro behind the site’s existing cookie/consent-management mechanism,
requiring affirmative consent before creating or appending the Cloudflare beacon
or Google Analytics scripts and before calling gtag. Preserve the
environment-token checks and ensure analytics remain disabled when consent is
absent or declined.
In `@src/pages/blog/`[...slug].astro:
- Around line 29-31: Replace the slug-specific condition in the blog page SEO
title logic with a data-driven optional seoTitle field on blog-post data,
schema, and JSON; use post.seoTitle when present and otherwise fall back to
`${post.title} - IndopenSource`, following the existing LearningResource pattern
in src/lib/learning.ts.
In `@src/pages/projects/`[slug].astro:
- Around line 25-28: Remove the exact-string placeholder handling from the
`sourceDescription`/`metaDescription` logic in the page and fix the generic
“awesome-indonesia” description at the source where `project.metaDescription` or
`project.description` is populated. Ensure the source emits the intended
project-specific description directly, so rendering does not depend on brittle
text matching.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 57542806-a0c5-4af4-9f64-0b1bf50ae43e
⛔ Files ignored due to path filters (3)
public/brand/apple-touch-icon.pngis excluded by!**/*.pngpublic/brand/favicon-96.pngis excluded by!**/*.pngpublic/brand/favicon.icois excluded by!**/*.ico
📒 Files selected for processing (30)
.env.example.github/PULL_REQUEST_TEMPLATE.mdCONTRIBUTING.mdREADME.mddocs/release-checklist.mdpublic/_redirectsscripts/sync-blog-posts.mjssrc/components/DonationPage.astrosrc/components/HomeHero.astrosrc/components/SiteHeader.astrosrc/data/blog-posts.jsonsrc/layouts/BaseLayout.astrosrc/lib/content.tssrc/lib/learning.tssrc/lib/projects.tssrc/pages/belajar/[slug].astrosrc/pages/blog.astrosrc/pages/blog/[...slug].astrosrc/pages/contact.astrosrc/pages/falsafah.astrosrc/pages/index.astrosrc/pages/komunitas.astrosrc/pages/legal.astrosrc/pages/projects.astrosrc/pages/projects/[slug].astrosrc/pages/robots.txt.tssrc/pages/sitemap.xml.tssrc/pages/sponsors.astrosrc/pages/users.astrotest/lib.test.mjs
🚧 Files skipped from review as they are similar to previous changes (8)
- src/pages/sponsors.astro
- src/pages/legal.astro
- src/components/DonationPage.astro
- src/pages/komunitas.astro
- src/components/SiteHeader.astro
- src/pages/falsafah.astro
- src/pages/projects.astro
- src/components/HomeHero.astro
* Sync content data * Sync content data * Refresh community pages, roadmap, and donation flow (#42) * 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 * docs: add README banner * fix: finalize Cloudflare release setup --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Ringkasan
/donasi/dan mempertahankan redirect/sponsors/mainkereleaseValidasi
npm run sync:blog- data terbaru dari repo sumbernpm test- 20 test lulusnpm run build- 107 halaman, 0 error, 0 warning, 0 hintASTRO_BASE=/indopensource.org- redirect tetap menggunakan base pathgit diff --check- bersihSummary by CodeRabbit