Add Cloudflare AI runtime translations for marketing pages#556
Add Cloudflare AI runtime translations for marketing pages#556
Conversation
📝 WalkthroughWalkthroughThis PR comprehensively restructures the website by consolidating agent instructions (AGENT.md into AGENTS.md), removing extensive blog automation infrastructure (translation, cleanup, and content generation scripts), deleting German blog content, refactoring locale handling in components to use runtime translation logic, updating build configuration and dependencies, and removing template/documentation references. Changes
Sequence Diagram(s)This PR does not meet the criteria for sequence diagram generation. The changes are primarily file deletions, configuration updates, and component refactoring—without introducing new multi-component interaction patterns or control flow requiring visualization. Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
⚔️ Resolve merge conflicts
Comment |
|
💡 Codex Reviewwebsite/src/services/runtimeTranslation.ts Line 421 in fcbb342 On translated requests (for example https://github.com/Cap-go/website/blob/fcbb342566edd4b4b559d1e11eac05b268cfeae2/scripts/fix_code_languages_all.tsx#L1 This file is removed, but ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/doc/LanguageSelect.astro`:
- Around line 29-38: The locale switch currently renders as buttons inside the
locales.map in LanguageSelect.astro and uses a JS pathname rewrite that removes
the first "/{currentLocale}/" and drops search/hash, breaking routes and no-JS
fallback; change the button to a real anchor (<a>) with an href that preserves
the full target URL (replace only the locale path segment, keep the rest of
pathname plus search and hash) so users without JS still work, or if you must
keep JS navigation, update the click handler to compute the new URL by swapping
just the locale path segment in Astro.locals.locale within the current
location.pathname and then append location.search and location.hash before
calling history.pushState or navigate — ensure aria-current logic remains based
on Astro.locals.locale and that ids (language_{j}) and display (j.toUpperCase())
stay the same.
In `@src/components/Footer.astro`:
- Line 324: Replace the deprecated Tailwind utility in the Footer.astro
component: update the class string on the element that currently contains
"ring-opacity-5 absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md
bg-[`#1c1c1f`] shadow-lg ring-1 ring-black focus:outline-none" by removing
"ring-opacity-5" and using the modern opacity syntax "ring-black/5" so the
element (in Footer.astro) keeps the same 5% ring opacity effect.
🪄 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: 2c6de1e8-f160-4c8d-b66c-04b5305930fa
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (299)
.templates/PLUGIN_DOCUMENTATION_TEMPLATE.md.templates/PLUGIN_ICONS_REFERENCE.mdAGENT.mdAGENTS.mdCLAUDE.md_typos.tomlastro.config.mjsdocs/PR_PREVIEW_SETUP.mddocs/expo-marketing-reference.mdloadedVectorStore/docstore.jsonloadedVectorStore/faiss.indexmessages/de.jsonmessages/es.jsonmessages/fr.jsonmessages/id.jsonmessages/it.jsonmessages/ja.jsonmessages/ko.jsonmessages/zh.jsonpackage.jsonproject.inlang/.gitignoreproject.inlang/project_idscripts/blogs/delete_broken_all.tsxscripts/blogs/fix_locales_all.tsxscripts/blogs/remove_mismatching_locales.tsxscripts/blogs/sync_seobot.jsscripts/blogs/translate_all.tsxscripts/blogs/translate_untranslated.tsxscripts/check_image_links.jsscripts/check_sitemap_404.jsscripts/clean_not_used.tsxscripts/cleanup_doc_translate.tsxscripts/commonReplacements.tsscripts/create-missing-translations.shscripts/fix_code_languages_all.tsxscripts/generate-plugins-readme.tsscripts/generateTutorials.mjsscripts/generate_docs_translations.tsxscripts/generate_plugin_icons.mjsscripts/generate_plugin_translations.tsxscripts/patch-astro-rolldown.jsscripts/repair_sitemap.tsxscripts/setup_new_locale.tsxscripts/trainOpenAI.mjsscripts/translate.tsxscripts/verify_missing_html_elements.jsscripts/yaml-to-json.jssrc/components/Footer.astrosrc/components/SEO.astrosrc/components/doc/LanguageSelect.astrosrc/content/blog/de/2-way-communication-in-capacitor-apps.mdsrc/content/blog/de/5-common-ota-update-mistakes-to-avoid.mdsrc/content/blog/de/5-security-best-practices-for-mobile-app-live-updates.mdsrc/content/blog/de/5-steps-for-resolving-version-conflicts-in-capacitor-apps.mdsrc/content/blog/de/5-steps-to-deploy-hotfixes-with-capgo.mdsrc/content/blog/de/5-steps-to-distribute-custom-capacitor-plugins.mdsrc/content/blog/de/5-steps-to-implement-oauth2-in-capacitor-apps.mdsrc/content/blog/de/a-brand-new-organization-system.mdsrc/content/blog/de/account-deletion-compliance-apple-guidelines.mdsrc/content/blog/de/alternative-to-appflow.mdsrc/content/blog/de/alternative-to-expo.mdsrc/content/blog/de/alternative-to-voltbuilder.mdsrc/content/blog/de/android-16kb-page-size-capacitor-plugins.mdsrc/content/blog/de/android-setup-for-capacitor-apps.mdsrc/content/blog/de/angular-mobile-app-capacitor.mdsrc/content/blog/de/api-key-security-for-app-store-compliance.mdsrc/content/blog/de/api-rate-limiting-for-app-store-compliance.mdsrc/content/blog/de/app-store-metadata-what-developers-must-know.mdsrc/content/blog/de/app-store-vs-direct-updates-what-developers-need-to-know.mdsrc/content/blog/de/appcenter-migration.mdsrc/content/blog/de/appflow-cicd-integration-best-practices.mdsrc/content/blog/de/appflow-shutdown-alternative.mdsrc/content/blog/de/apple-policy-updates-for-capacitor-apps-2025.mdsrc/content/blog/de/apple-privacy-rules-for-capacitor-apps.mdsrc/content/blog/de/apple-vs-google-privacy-compliance-for-third-party-data.mdsrc/content/blog/de/automated-consent-tracking-for-capacitor-apps.mdsrc/content/blog/de/automatic-build-and-release-with-github-actions.mdsrc/content/blog/de/automatic-build-and-release-with-gitlab.mdsrc/content/blog/de/automatic-capacitor-android-build-github-action.mdsrc/content/blog/de/automatic-capacitor-android-build-gitlab.mdsrc/content/blog/de/automatic-capacitor-ios-build-codemagic.mdsrc/content/blog/de/automatic-capacitor-ios-build-github-action-with-match.mdsrc/content/blog/de/automatic-capacitor-ios-build-github-action.mdsrc/content/blog/de/basic-js-css-config-for-native-app-look.mdsrc/content/blog/de/best-practices-for-capacitor-code-sharing.mdsrc/content/blog/de/best-practices-for-capacitor-script-automation.mdsrc/content/blog/de/biometric-authentication-in-capacitor-apps.mdsrc/content/blog/de/birth-of-capgo-revolutionizing-capacitor-app-updates.mdsrc/content/blog/de/building-a-native-mobile-app-with-nextjs-and-capacitor.mdsrc/content/blog/de/capacitor-app-initialization-step-by-step-guide.mdsrc/content/blog/de/capacitor-apps-and-data-sharing-policies.mdsrc/content/blog/de/capacitor-apps-and-russias-data-laws-compliance-tips.mdsrc/content/blog/de/capacitor-changelog-management-ultimate-guide.mdsrc/content/blog/de/capacitor-cicd-pipeline-setup-guide.mdsrc/content/blog/de/capacitor-cicd-plugins-vs-appflow-key-differences.mdsrc/content/blog/de/capacitor-cli-commands-common-issues-and-fixes.mdsrc/content/blog/de/capacitor-cli-commands-for-version-updates.mdsrc/content/blog/de/capacitor-cli-plugin-commands-overview.mdsrc/content/blog/de/capacitor-cli-project-setup-guide.mdsrc/content/blog/de/capacitor-community-forums-for-plugin-developers.mdsrc/content/blog/de/capacitor-comprehensive-guide.mdsrc/content/blog/de/capacitor-live-updates-handling-version-conflicts.mdsrc/content/blog/de/capacitor-live-updates-staying-compliant-with-apple.mdsrc/content/blog/de/capacitor-native-bridge-android-plugin-basics.mdsrc/content/blog/de/capacitor-native-bridge-web-to-android-data-transfer.mdsrc/content/blog/de/capacitor-ota-updates-app-store-approval-guide.mdsrc/content/blog/de/capacitor-ota-updates-best-practices-for-performance.mdsrc/content/blog/de/capacitor-ota-updates-boosting-low-end-device-performance.mdsrc/content/blog/de/capacitor-ota-updates-cicd-integration-guide.mdsrc/content/blog/de/capacitor-ota-updates-cloud-hosting-options-compared.mdsrc/content/blog/de/capacitor-ota-updates-debugging-issues.mdsrc/content/blog/de/capacitor-ota-updates-security-tips.mdsrc/content/blog/de/capacitor-ota-updates-staying-compliant.mdsrc/content/blog/de/capacitor-ota-updates-targeting-ios-vs-android.mdsrc/content/blog/de/capacitor-ota-updates-version-targeting-explained.mdsrc/content/blog/de/capacitor-ota-updates-versioning-best-practices.mdsrc/content/blog/de/capacitor-ota-updates-vs-app-store-restrictions.mdsrc/content/blog/de/capacitor-ota-updates-vs-traditional-testing-methods.mdsrc/content/blog/de/capacitor-ota-updates-vs-traditional-versioning.mdsrc/content/blog/de/capacitor-plugin-contribution-guide.mdsrc/content/blog/de/capacitor-plugin-options-for-ota-updates.mdsrc/content/blog/de/capacitor-plugins-for-secure-session-management.mdsrc/content/blog/de/capacitor-plugins-what-you-need-to-know.mdsrc/content/blog/de/capacitor-social-login-release.mdsrc/content/blog/de/capacitor-vs-appflow-ota-update-solutions-compared.mdsrc/content/blog/de/capacitor-vs-appflow-versioning-differences.mdsrc/content/blog/de/capgo-for-app-store-safe-ota-updates.mdsrc/content/blog/de/capgo-integration-with-github-actions-guide.mdsrc/content/blog/de/capgo-price-reduction.mdsrc/content/blog/de/capgo-purpose.mdsrc/content/blog/de/capgo-vs-appflow-deployment-solutions-compared.mdsrc/content/blog/de/ccpa-compliance-for-mobile-apps.mdsrc/content/blog/de/checklist-for-cybersecurity-compliance-in-china.mdsrc/content/blog/de/checklist-for-google-play-ota-compliance.mdsrc/content/blog/de/checklist-for-ota-updates-under-australias-privacy-act.mdsrc/content/blog/de/checklist-for-token-signing-in-capacitor-apps.mdsrc/content/blog/de/checklist-for-validating-capacitor-app-updates.mdsrc/content/blog/de/chinas-cybersecurity-law-impact-on-app-updates.mdsrc/content/blog/de/chinas-data-privacy-laws-impact-on-mobile-apps.mdsrc/content/blog/de/code-integrity-in-capacitor-apps-key-techniques.mdsrc/content/blog/de/common-cicd-bottlenecks-in-ota-pipelines.mdsrc/content/blog/de/common-live-update-issues-and-solutions-for-developers.mdsrc/content/blog/de/common-mistakes-in-custom-attribute-segmentation.mdsrc/content/blog/de/comparing-react-native-vs-capacitor.mdsrc/content/blog/de/compliance-checks-in-cicd-for-capacitor-apps.mdsrc/content/blog/de/configuring-rollback-for-capacitor-updates.mdsrc/content/blog/de/cordova-hybrid-app-development.mdsrc/content/blog/de/cpra-compliance-for-app-developers.mdsrc/content/blog/de/create-offline-screen-in-vue-angular-react.mdsrc/content/blog/de/create-react-mobile-apps-with-capacitor.mdsrc/content/blog/de/creating-and-deleting-update-channels-in-capacitor.mdsrc/content/blog/de/creating-mobile-apps-with-react-and-capacitor.mdsrc/content/blog/de/creating-mobile-apps-with-sveltekit-and-capacitor.mdsrc/content/blog/de/cross-platform-mobile-app-development-guide-2024.mdsrc/content/blog/de/cross-platform-uiux-best-practices-for-capacitor-apps.mdsrc/content/blog/de/custom-ios-plugin-optimization-best-practices.mdsrc/content/blog/de/developing-cross-platform-apps-with-capacitorjs.md.mdsrc/content/blog/de/development-vs-production-key-differences-in-capacitor-apps.mdsrc/content/blog/de/do-apple-allow-live-updates.mdsrc/content/blog/de/do-capgo-work-for-cordova.mdsrc/content/blog/de/do-google-allow-live-updates.mdsrc/content/blog/de/enable-ios-developer-mode-ios16.mdsrc/content/blog/de/error-handling-in-capacitor-apps-ux-best-practices.mdsrc/content/blog/de/error-logging-tools-for-capacitor-ota-updates.mdsrc/content/blog/de/firebase-crashlytics-for-capacitor-apps.mdsrc/content/blog/de/fix-capacitor-version-mismatch-errors.mdsrc/content/blog/de/fixing-build-failures-in-capacitor-ci-cd-pipelines.mdsrc/content/blog/de/git-flow-vs-trunk-based-for-cicd.mdsrc/content/blog/de/google-play-compliance-key-update-strategies.mdsrc/content/blog/de/google-play-staged-rollouts-how-it-works.mdsrc/content/blog/de/how-I-manage-semantic-release-with-CapGo-CapacitorUpdater.mdsrc/content/blog/de/how-capacitor-bridges-web-and-native-code.mdsrc/content/blog/de/how-capacitor-handles-platform-differences.mdsrc/content/blog/de/how-capgo-is-born.mdsrc/content/blog/de/how-ccpa-enforcement-impacts-apps.mdsrc/content/blog/de/how-chinas-cybersecurity-law-impacts-app-developers.mdsrc/content/blog/de/how-chinas-data-laws-impact-app-store-submissions.mdsrc/content/blog/de/how-cicd-tools-trigger-ota-updates.mdsrc/content/blog/de/how-delta-updates-reduce-payload-size.mdsrc/content/blog/de/how-end-to-end-encryption-secures-updates.mdsrc/content/blog/de/how-live-updates-for-capacitor-work.mdsrc/content/blog/de/how-mobile-apps-stay-compliant-with-us-privacy-laws.mdsrc/content/blog/de/how-native-bridge-works-in-capacitor-android-apps.mdsrc/content/blog/de/how-ota-encryption-meets-app-store-compliance.mdsrc/content/blog/de/how-ota-updates-affect-app-store-security.mdsrc/content/blog/de/how-rbac-secures-ota-updates-in-capacitor-apps.mdsrc/content/blog/de/how-to-add-dependencies-in-capacitor-plugins.mdsrc/content/blog/de/how-to-add-geolocation-targeting-to-ota-updates.mdsrc/content/blog/de/how-to-add-third-party-plugins-in-capacitor-apps.mdsrc/content/blog/de/how-to-build-capacitor-app-in-xcode-cloud.mdsrc/content/blog/de/how-to-bypass-app-store-review.mdsrc/content/blog/de/how-to-customize-build-scripts-with-capacitor-cli.mdsrc/content/blog/de/how-to-handle-user-data-in-capacitor-apps.mdsrc/content/blog/de/how-to-handle-user-data-requests-under-ccpa.mdsrc/content/blog/de/how-to-monitor-capacitor-app-updates.mdsrc/content/blog/de/how-to-profile-cross-platform-apps-with-capacitor.mdsrc/content/blog/de/how-to-release-major-version-in-capgo.mdsrc/content/blog/de/how-to-resolve-android-build-errors-in-capacitor.mdsrc/content/blog/de/how-to-schedule-ota-updates-for-capacitor-apps.mdsrc/content/blog/de/how-to-secure-ota-updates-with-key-management.mdsrc/content/blog/de/how-to-segment-users-by-plan-and-channels.mdsrc/content/blog/de/how-to-send-specific-version-to-users.mdsrc/content/blog/de/how-to-track-ota-update-success-in-capacitor-apps.mdsrc/content/blog/de/how-to-use-aar-files-in-capacitor-plugins.mdsrc/content/blog/de/how-to-use-capacitor-cli-for-ota-updates.mdsrc/content/blog/de/how-to-use-capgo-documentation-for-ota-updates.mdsrc/content/blog/de/how-to-use-semantic-versioning-with-capgo-ota-updates.mdsrc/content/blog/de/how-version-work-in-capgo.mdsrc/content/blog/de/how-your-usage-is-counted.mdsrc/content/blog/de/icp-filing-for-mobile-apps-in-china-step-by-step-guide.mdsrc/content/blog/de/in-app-purchases-capacitor.mdsrc/content/blog/de/installing-capacitor-cli-step-by-step-guide.mdsrc/content/blog/de/integrate-universal-links-capacitor-nextjs.mdsrc/content/blog/de/integrity-checks-for-capacitor-updates.mdsrc/content/blog/de/introducing-end-to-end-security-to-capacitor-updater-with-code-signing.mdsrc/content/blog/de/ionic-capacitor-push-notifications-firebase.mdsrc/content/blog/de/key-management-under-chinas-encryption-rules.mdsrc/content/blog/de/live-updates-faq-answers-for-app-developers.mdsrc/content/blog/de/manage-dev-and-prod-build-with-github-actions.mdsrc/content/blog/de/managing-dependencies-in-capacitor-projects.mdsrc/content/blog/de/managing-secrets-in-cicd-pipelines.mdsrc/content/blog/de/merge-policies-for-teams-using-capacitor-apps.mdsrc/content/blog/de/migrating-cordova-to-capacitor.mdsrc/content/blog/de/mobile-app-update-strategies-a-developers-checklist.mdsrc/content/blog/de/monitor-ota-updates-in-capacitor-apps.mdsrc/content/blog/de/moving-from-microsoft-app-center-to-capgo.mdsrc/content/blog/de/npm-scripts-for-capacitor-ota-updates-explained.mdsrc/content/blog/de/open-source-licence.mdsrc/content/blog/de/open-source-vs-proprietary-app-update-solutions.mdsrc/content/blog/de/open-source.mdsrc/content/blog/de/optimise-your-images-for-updates.mdsrc/content/blog/de/ota-security-checklist-for-capacitor-apps.mdsrc/content/blog/de/ota-updates-in-beta-staying-policy-compliant.mdsrc/content/blog/de/ota-updates-in-cicd-security-and-compliance-tips.mdsrc/content/blog/de/payment-data-security-for-app-store-approval.mdsrc/content/blog/de/pci-dss-compliance-for-mobile-apps-key-requirements.mdsrc/content/blog/de/phased-rollouts-for-capacitor-live-updates.mdsrc/content/blog/de/pipeda-compliance-for-mobile-apps-in-canada.mdsrc/content/blog/de/pipeline-security-for-capacitor-apps-key-insights.mdsrc/content/blog/de/privacy-manifest-for-capacitor-apps-guide.mdsrc/content/blog/de/quasar-mobile-app-capacitor.mdsrc/content/blog/de/real-time-update-metrics-for-capacitor-apps.mdsrc/content/blog/de/real-time-updates-with-user-segmentation.mdsrc/content/blog/de/refresh-token-rotation-in-cicd-workflows.mdsrc/content/blog/de/rollback-mechanisms-in-capacitor-plugins.mdsrc/content/blog/de/rollback-strategies-for-capacitor-live-updates.mdsrc/content/blog/de/rollback-strategies-for-cicd-workflows.mdsrc/content/blog/de/secure-storage-for-offline-tokens-in-capacitor.mdsrc/content/blog/de/self-hosted-capgo.mdsrc/content/blog/de/self-hosted-live-updates.mdsrc/content/blog/de/set-up-performance-monitoring-in-capacitor.mdsrc/content/blog/de/setting-up-capacitor-local-environment.mdsrc/content/blog/de/setting-up-cicd-for-capacitor-apps.mdsrc/content/blog/de/setup-ci-and-cd-in-gitlab.mdsrc/content/blog/de/setup-stripe-payment-in-us-capacitor.mdsrc/content/blog/de/ssl-pinning-for-capacitor-apps.mdsrc/content/blog/de/staged-rollouts-vs-full-releases-comparison.mdsrc/content/blog/de/staging-ota-updates-best-practices.mdsrc/content/blog/de/state-privacy-laws-for-mobile-apps-comparison.mdsrc/content/blog/de/testing-capacitor-ota-updates-with-mock-scenarios.mdsrc/content/blog/de/testing-capacitor-ota-updates.mdsrc/content/blog/de/token-revocation-in-capacitor-apps-guide.mdsrc/content/blog/de/top-6-tools-for-managing-app-updates-in-2025.mdsrc/content/blog/de/top-api-security-standards-for-app-store-compliance.mdsrc/content/blog/de/top-tools-for-debugging-ota-updates-in-capacitor.mdsrc/content/blog/de/top-tools-for-debugging-platform-specific-code-in-capacitor.mdsrc/content/blog/de/turn-off-android-talkback.mdsrc/content/blog/de/ultimate-guide-to-app-store-compliant-ota-updates.mdsrc/content/blog/de/ultimate-guide-to-capacitor-ota-updates.mdsrc/content/blog/de/ultimate-guide-to-debugging-capacitor-apps.mdsrc/content/blog/de/ultimate-guide-to-ota-update-security-for-capacitor-apps.mdsrc/content/blog/de/understanding-apples-privacy-manifest.mdsrc/content/blog/de/update-your-capacitor-apps-seamlessly-using-capacitor-updater.mdsrc/content/blog/de/updating-from-capacitor-4-to-capacitor-5.mdsrc/content/blog/de/us-privacy-laws-mobile-app-checklist.mdsrc/content/blog/de/usage-frequency-segmentation-for-app-updates.mdsrc/content/blog/de/user-consent-for-ota-updates-best-practices.mdsrc/content/blog/de/version-control-tips-for-mobile-ci-cd.mdsrc/content/blog/de/version-tagging-in-capacitor-apps.mdsrc/content/blog/de/vue-mobile-app-capacitor.mdsrc/content/blog/de/what-is-native-bridge-in-capacitor.mdsrc/content/blog/de/why-consent-management-matters-for-app-compliance.mdsrc/content/blog/en/capacitor-ota-updates-app-store-approval-guide.mdsrc/content/blog/en/capacitor-ota-updates-cloud-hosting-options-compared.mdsrc/content/blog/en/capacitor-ota-updates-security-tips.mdsrc/content/blog/en/capacitor-ota-updates-version-targeting-explained.mdsrc/content/blog/en/capacitor-ota-updates-versioning-best-practices.mdsrc/content/blog/en/capacitor-ota-updates-vs-app-store-restrictions.mdsrc/content/blog/en/capacitor-ota-updates-vs-traditional-testing-methods.mdsrc/content/blog/en/capacitor-ota-updates-vs-traditional-versioning.mdsrc/content/blog/en/error-logging-tools-for-capacitor-ota-updates.mdsrc/content/blog/en/npm-scripts-for-capacitor-ota-updates-explained.mdsrc/content/blog/en/server-setup-for-capacitor-ota-updates.mdsrc/content/blog/en/testing-capacitor-ota-updates-with-mock-scenarios.mdsrc/content/blog/en/testing-capacitor-ota-updates.mdsrc/content/blog/en/top-tools-for-debugging-ota-updates-in-capacitor.mdsrc/content/blog/es/2-way-communication-in-capacitor-apps.mdsrc/content/blog/es/5-common-ota-update-mistakes-to-avoid.mdsrc/content/blog/es/5-security-best-practices-for-mobile-app-live-updates.md
💤 Files with no reviewable changes (94)
- project.inlang/.gitignore
- .templates/PLUGIN_ICONS_REFERENCE.md
- _typos.toml
- docs/PR_PREVIEW_SETUP.md
- scripts/blogs/delete_broken_all.tsx
- scripts/yaml-to-json.js
- src/content/blog/de/a-brand-new-organization-system.md
- src/content/blog/de/2-way-communication-in-capacitor-apps.md
- docs/expo-marketing-reference.md
- scripts/blogs/fix_locales_all.tsx
- scripts/check_sitemap_404.js
- scripts/repair_sitemap.tsx
- src/content/blog/de/5-security-best-practices-for-mobile-app-live-updates.md
- src/content/blog/de/5-steps-to-distribute-custom-capacitor-plugins.md
- src/content/blog/de/app-store-vs-direct-updates-what-developers-need-to-know.md
- src/content/blog/de/5-common-ota-update-mistakes-to-avoid.md
- scripts/blogs/sync_seobot.js
- src/content/blog/de/5-steps-to-deploy-hotfixes-with-capgo.md
- scripts/clean_not_used.tsx
- .templates/PLUGIN_DOCUMENTATION_TEMPLATE.md
- AGENT.md
- src/content/blog/de/automatic-capacitor-ios-build-github-action.md
- src/content/blog/de/birth-of-capgo-revolutionizing-capacitor-app-updates.md
- src/content/blog/de/alternative-to-voltbuilder.md
- src/content/blog/de/capacitor-live-updates-handling-version-conflicts.md
- scripts/fix_code_languages_all.tsx
- src/content/blog/de/automatic-capacitor-android-build-github-action.md
- src/content/blog/de/capacitor-cli-plugin-commands-overview.md
- CLAUDE.md
- scripts/check_image_links.js
- scripts/commonReplacements.ts
- scripts/generateTutorials.mjs
- scripts/patch-astro-rolldown.js
- scripts/trainOpenAI.mjs
- src/content/blog/de/alternative-to-expo.md
- src/content/blog/de/api-rate-limiting-for-app-store-compliance.md
- src/content/blog/de/alternative-to-appflow.md
- src/content/blog/de/android-16kb-page-size-capacitor-plugins.md
- src/content/blog/de/capacitor-ota-updates-best-practices-for-performance.md
- src/content/blog/de/api-key-security-for-app-store-compliance.md
- src/content/blog/de/apple-vs-google-privacy-compliance-for-third-party-data.md
- src/content/blog/de/appflow-cicd-integration-best-practices.md
- src/content/blog/de/apple-privacy-rules-for-capacitor-apps.md
- src/content/blog/de/biometric-authentication-in-capacitor-apps.md
- scripts/setup_new_locale.tsx
- src/content/blog/de/capacitor-cli-commands-common-issues-and-fixes.md
- src/content/blog/de/best-practices-for-capacitor-code-sharing.md
- scripts/generate-plugins-readme.ts
- src/content/blog/de/capacitor-changelog-management-ultimate-guide.md
- src/content/blog/de/capacitor-comprehensive-guide.md
- src/content/blog/de/capacitor-cicd-pipeline-setup-guide.md
- src/content/blog/de/capacitor-cicd-plugins-vs-appflow-key-differences.md
- src/content/blog/de/automatic-build-and-release-with-gitlab.md
- src/content/blog/de/capacitor-cli-commands-for-version-updates.md
- src/content/blog/de/capacitor-native-bridge-web-to-android-data-transfer.md
- scripts/cleanup_doc_translate.tsx
- src/content/blog/de/basic-js-css-config-for-native-app-look.md
- src/content/blog/de/apple-policy-updates-for-capacitor-apps-2025.md
- src/content/blog/de/capacitor-cli-project-setup-guide.md
- src/content/blog/de/capacitor-ota-updates-boosting-low-end-device-performance.md
- src/content/blog/de/capacitor-ota-updates-cicd-integration-guide.md
- src/content/blog/de/android-setup-for-capacitor-apps.md
- src/content/blog/de/capacitor-native-bridge-android-plugin-basics.md
- scripts/blogs/translate_all.tsx
- src/content/blog/de/best-practices-for-capacitor-script-automation.md
- scripts/verify_missing_html_elements.js
- src/content/blog/de/5-steps-to-implement-oauth2-in-capacitor-apps.md
- scripts/blogs/remove_mismatching_locales.tsx
- scripts/generate_plugin_icons.mjs
- scripts/generate_plugin_translations.tsx
- src/content/blog/de/5-steps-for-resolving-version-conflicts-in-capacitor-apps.md
- src/content/blog/de/appflow-shutdown-alternative.md
- src/content/blog/de/capacitor-ota-updates-cloud-hosting-options-compared.md
- src/content/blog/de/automatic-build-and-release-with-github-actions.md
- src/content/blog/de/automatic-capacitor-ios-build-codemagic.md
- src/content/blog/de/automatic-capacitor-android-build-gitlab.md
- src/content/blog/de/automatic-capacitor-ios-build-github-action-with-match.md
- src/content/blog/de/capacitor-apps-and-russias-data-laws-compliance-tips.md
- src/content/blog/de/capacitor-app-initialization-step-by-step-guide.md
- src/content/blog/de/capacitor-community-forums-for-plugin-developers.md
- src/content/blog/de/capacitor-ota-updates-app-store-approval-guide.md
- scripts/blogs/translate_untranslated.tsx
- src/content/blog/de/account-deletion-compliance-apple-guidelines.md
- src/content/blog/de/capacitor-apps-and-data-sharing-policies.md
- src/content/blog/de/appcenter-migration.md
- src/content/blog/de/building-a-native-mobile-app-with-nextjs-and-capacitor.md
- scripts/create-missing-translations.sh
- project.inlang/project_id
- src/content/blog/de/capacitor-live-updates-staying-compliant-with-apple.md
- scripts/generate_docs_translations.tsx
- src/content/blog/de/angular-mobile-app-capacitor.md
- scripts/translate.tsx
- src/content/blog/de/app-store-metadata-what-developers-must-know.md
- src/content/blog/de/automated-consent-tracking-for-capacitor-apps.md
| {locales.map((j) => ( | ||
| <button | ||
| id={`language_${j}`} | ||
| type="button" | ||
| class="block w-full cursor-pointer px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus-visible:bg-gray-100 focus-visible:text-gray-900 focus-visible:outline-none dark:text-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-100 dark:focus-visible:bg-gray-700 dark:focus-visible:text-gray-100" | ||
| role="menuitem" | ||
| aria-current={Astro.locals.locale === j ? 'true' : undefined} | ||
| > | ||
| {j.toUpperCase()} | ||
| </button> |
There was a problem hiding this comment.
Keep locale switches as real links, or at least stop rewriting the URL this way.
Because the options are buttons, every switch now depends on Lines 74-76. That rewrite removes the first /${currentLocale}/ anywhere in the pathname and drops search/hash, so a URL like /docs/en/guide/?tab=api#install becomes /docs/guide/. This can misroute docs pages and also removes the no-JS fallback that <a href> gave you.
🔧 Minimum fix if you keep the JS navigation
- item.addEventListener('click', () => {
- const tmp = new URL(window.location.href).pathname.replace(`/${currentLocale}/`, '/')
- if (j === 'en') window.location.href = tmp
- else window.location.href = `/${j}${tmp}`
- })
+ item.addEventListener('click', () => {
+ const nextUrl = new URL(window.location.href)
+ const localePrefix = `/${currentLocale}/`
+ const basePath = nextUrl.pathname.startsWith(localePrefix)
+ ? `/${nextUrl.pathname.slice(localePrefix.length)}`
+ : nextUrl.pathname
+ nextUrl.pathname = j === 'en' ? basePath : `/${j}${basePath}`
+ window.location.href = nextUrl.toString()
+ })Also applies to: 70-77
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/doc/LanguageSelect.astro` around lines 29 - 38, The locale
switch currently renders as buttons inside the locales.map in
LanguageSelect.astro and uses a JS pathname rewrite that removes the first
"/{currentLocale}/" and drops search/hash, breaking routes and no-JS fallback;
change the button to a real anchor (<a>) with an href that preserves the full
target URL (replace only the locale path segment, keep the rest of pathname plus
search and hash) so users without JS still work, or if you must keep JS
navigation, update the click handler to compute the new URL by swapping just the
locale path segment in Astro.locals.locale within the current location.pathname
and then append location.search and location.hash before calling
history.pushState or navigate — ensure aria-current logic remains based on
Astro.locals.locale and that ids (language_{j}) and display (j.toUpperCase())
stay the same.
| </button> | ||
| <div | ||
| id="language-dropdown" | ||
| class="ring-opacity-5 absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md bg-[#1c1c1f] shadow-lg ring-1 ring-black focus:outline-none" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Expected: Tailwind is v4-era syntax and edited templates should not contain `ring-opacity-*`.
rg -n --glob 'package.json' '"tailwindcss"\s*:\s*"[^"]+"' -C1
rg -n --glob '*.{astro,css,scss,jsx,tsx,html}' '\bring-opacity-\d+\b' -C1Repository: Cap-go/website
Length of output: 501
Replace the deprecated ring-opacity-5 utility with Tailwind v4 canonical syntax.
Line 324 uses ring-opacity-5, which was removed in Tailwind v4. Replace it with ring-black/5 to maintain the intended 5% opacity effect with the current syntax.
Suggested fix
- class="ring-opacity-5 absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md bg-[`#1c1c1f`] shadow-lg ring-1 ring-black focus:outline-none"
+ class="absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md bg-[`#1c1c1f`] shadow-lg ring-1 ring-black/5 focus:outline-none"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| class="ring-opacity-5 absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md bg-[#1c1c1f] shadow-lg ring-1 ring-black focus:outline-none" | |
| class="absolute bottom-full left-0 z-50 mb-2 hidden w-32 rounded-md bg-[`#1c1c1f`] shadow-lg ring-1 ring-black/5 focus:outline-none" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/Footer.astro` at line 324, Replace the deprecated Tailwind
utility in the Footer.astro component: update the class string on the element
that currently contains "ring-opacity-5 absolute bottom-full left-0 z-50 mb-2
hidden w-32 rounded-md bg-[`#1c1c1f`] shadow-lg ring-1 ring-black
focus:outline-none" by removing "ring-opacity-5" and using the modern opacity
syntax "ring-black/5" so the element (in Footer.astro) keeps the same 5% ring
opacity effect.



Summary
Notes
Validation
bunx paraglide-js compile --project ./project.inlang --outdir ./src/paraglide --emit-ts-declarationsbunx astro checkstill reports existing unrelated repo-wide diagnostics, but not in the touched translation filesCLOUDFLARE_ACCOUNT_ID=9ee3d7479a3c359681e3fab2c8cb22c0 bun run buildreaches Cloudflare prerender, then fails later with the existingTypeError: Invalid URL stringprerender-server issueSummary by CodeRabbit
Documentation
Chores