refactor: restructure documentation for screen-based navigation#62
Conversation
Major reorganization of the documentation structure to be more intuitive and aligned with the actual POS application screens. ## Changes ### New Structure - getting-started/ - Introduction, installation, Pro license, connect - pos/ - Main selling interface (product panel, cart, checkout) - products/ - Pro inventory management - orders/ - Pro order history - customers/ - Pro customer management - reports/ - Pro sales reports - settings/ - Store settings and WordPress admin settings - support/ - Discord, logs, troubleshooting - reference/ - Architecture docs ### Key Improvements - Settings moved from separate section into relevant screen docs - Clear distinction between POS Product Panel and Products screen - New pages: connect, variations, line-items, open-orders, receipts, logs - Added client-side redirects for all moved/renamed pages - Updated sidebar navigation ### Technical - Added @docusaurus/plugin-client-redirects - Updated navbar docId reference - Fixed broken links in i18n settings files
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughThis PR restructures docs and navigation (Getting Started, POS, Store Settings, Support, Reference), adds client-side redirects, expands i18n/locales, introduces automated translation tooling and CI, adds/removes many MDX pages, updates editorial style, and adds linting and workflow support. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
rect rgba(200,200,255,0.5)
participant Developer
end
rect rgba(200,255,200,0.5)
participant GitHub_Actions as "GitHub Actions\n(translate-pr.yml)"
end
rect rgba(255,230,200,0.5)
participant Repo as "Repo (PR branch)"
end
rect rgba(255,200,200,0.5)
participant TranslateScript as "Node script\n(scripts/translate-with-claude.js)"
end
rect rgba(255,255,200,0.5)
participant Anthropic as "Anthropic API\n(Claude)"
end
Developer->>GitHub_Actions: Comment "/translate" on PR
GitHub_Actions->>Repo: Checkout PR head
GitHub_Actions->>Repo: Diff changed English doc files
alt changes detected
GitHub_Actions->>TranslateScript: Run translation for changed files
TranslateScript->>Anthropic: Send translate requests (per-locale)
Anthropic-->>TranslateScript: Return translated content
TranslateScript->>Repo: Write translated files (i18n/*, versioned)
GitHub_Actions->>Repo: Commit & push translation changes to PR branch
GitHub_Actions->>Developer: Post PR comment (translations added)
else no changes
GitHub_Actions->>Developer: Post PR comment (no English doc changes)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
versioned_docs/version-1.x/pos/product-panel/search-filtering.mdx (1)
125-143: Use a relative link to ensure versioned docs routing works correctly.In versioned Docusaurus documentation, absolute paths like
/products/syncmay not resolve within the version context (e.g.,/version-1.x/). Since the target file exists atversioned_docs/version-1.x/products/sync.mdx, use the relative path instead:Suggested update
-This process ensures your POS remains fast and responsive even with thousands of products. Learn more about this in our [Product Synchronisation](/products/sync) guide. +This process ensures your POS remains fast and responsive even with thousands of products. Learn more about this in our [Product Synchronisation](../../products/sync) guide.
🤖 Fix all issues with AI agents
In `@i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx`:
- Line 9: Update the introductory sentence "WCPOS has two types of settings
organized by where they're configured." to reflect the actual number of
categories listed (change "two" to "three") so the intro matches Sections 1–3;
edit the line in
i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx where that
exact sentence appears.
In `@i18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx`:
- Line 9: The intro sentence "WCPOS has two types of settings organized by where
they're configured." is inconsistent with Sections 1–3 listing three categories;
update that sentence to reflect "three types" (or otherwise rephrase to match
the three listed sections) so the heading and content agree—replace the exact
sentence in the document with a corrected version that references three types or
a neutral phrasing that matches the subsequent sections.
In `@i18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx`:
- Line 9: The intro sentence "WCPOS has two types of settings organized by where
they're configured." is incorrect; update it to reflect three categories to
match Sections 1–3—replace the sentence with something like "WCPOS has three
types of settings organized by where they're configured." (Locate the line that
contains the exact sentence to change in index.mdx and swap in the corrected
phrasing.)
In `@i18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx`:
- Line 9: The intro sentence "WCPOS has two types of settings organized by where
they're configured." is inconsistent with the three listed sections; update that
sentence to reflect three types (e.g., "WCPOS has three types of settings
organized by where they're configured.") or reword to match the actual section
structure so the count aligns with Sections 1–3; locate the exact line
containing that sentence in index.mdx and correct it.
In `@versioned_docs/version-1.x/reference/architecture.mdx`:
- Around line 52-56: The table row contains the phrase "can not customise the
POS app" which uses the nonstandard split form; replace "can not" with the
single-word "cannot" in the row text (the cell containing "WordPress themes and
hooks can not customise the POS app") so the line reads "WordPress themes and
hooks cannot customise the POS app".
In `@versioned_docs/version-1.x/reports/index.mdx`:
- Line 7: The page currently passes a raw string path to the `@theme/IdealImage`
component; import the image file as a module and pass that imported symbol to
the Image component instead. Add an import like a unique name (e.g., heroImage)
for the local image file and update any <Image ...> usage to use that imported
symbol (e.g., pass heroImage to the prop the IdealImage expects) so the
IdealImage Webpack loader can process it for responsive/placeholder assets.
In `@versioned_docs/version-1.x/settings/store/general.mdx`:
- Around line 11-18: Replace JSX DOM attributes that use the HTML-only name
"class" with React/MDX-compatible "className" for the elements in this snippet:
the <div> with the image-container class and the <p> with the image-caption
class. Update the JSX attributes around the Image component (and its surrounding
elements) so they use className="image-container" and className="image-caption"
respectively to avoid invalid DOM prop warnings during MDX/React compilation.
In `@versioned_docs/version-1.x/settings/store/index.mdx`:
- Around line 22-28: The table uses absolute links like
[General](/settings/store/general), [Tax](/settings/store/tax),
[Barcode](/settings/store/barcode), [Keyboard
Shortcuts](/settings/store/hotkeys), and [Theme](/settings/store/theme) which
bypass Docusaurus versioning; update each link to a relative path (e.g., change
/settings/store/general → ./general, /settings/store/tax → ./tax,
/settings/store/barcode → ./barcode, /settings/store/hotkeys → ./hotkeys,
/settings/store/theme → ./theme) so the tabs remain within the current versioned
docs route.
In `@versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx`:
- Around line 13-14: The external anchor tag with target="_blank" (the <a>
element inside the <p class="image-caption"> that links to
https://woocommerce.com/document/finding-php-error-logs/) must include
rel="noopener noreferrer" to prevent tabnabbing; update that anchor and any
other external anchors mentioned (lines 24–25 equivalents) by adding
rel="noopener noreferrer" alongside target="_blank" so all new‑tab external
links are protected.
In `@versioned_docs/version-1.x/support/troubleshooting/response-error.mdx`:
- Line 42: Update the external anchor tag that opens in a new tab (the <a
target="_blank"
href="https://woocommerce.com/document/finding-php-error-logs/">WooCommerce
Fatal Errors Log</a> link) to include rel="noopener noreferrer" to prevent
tabnabbing; locate the anchor by its href or link text and add the rel attribute
alongside target="_blank".
🧹 Nitpick comments (6)
versioned_docs/version-1.x/orders/index.mdx (1)
85-92: UseclassNameinstead ofclassin JSX/MDX.In MDX files processed by React, the HTML
classattribute should beclassNameto avoid warnings.Suggested fix
-<div class="image-container"> +<div className="image-container"> <Image alt="Orders Settings" img="/img/orders-page-settings.png" style={{ maxHeight: 800 }} /> - <p class="image-caption">Orders Display Settings</p> + <p className="image-caption">Orders Display Settings</p> </div>versioned_docs/version-1.x/pos/checkout/receipts.mdx (1)
7-7: Unused import.The
Imagecomponent is imported but not used in this file (line 11 only has a comment placeholder). Consider removing it until the screenshot is added.Suggested fix
-import Image from "@theme/IdealImage"; - After successfully processing a payment, the receipt modal displays.versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx (1)
36-45: Consider a brief redaction reminder before sharing logs.
A short note helps avoid accidental sharing of sensitive data.✍️ Suggested tweak
-Share the error message with our support team: +Share the error message with our support team (please redact customer data, API keys, or other sensitive info first):versioned_docs/version-1.x/support/troubleshooting/response-error.mdx (1)
55-64: Consider a redaction reminder before sharing logs.
A short note helps avoid accidental sharing of sensitive data.✍️ Suggested tweak
-Share the error message with our support team: +Share the error message with our support team (please redact customer data, API keys, or other sensitive info first):versioned_docs/version-1.x/getting-started/connect.mdx (1)
1-75: Well-structured documentation page for the Connect screen.The content is comprehensive, covering all key user flows (adding stores, multiple users, troubleshooting). The structure follows a logical progression from overview to specific tasks.
One minor note from static analysis: Line 8 contains "only shown...only" which is slightly redundant. Consider rephrasing to:
-This screen is only shown in the Desktop and Mobile apps. Web users access the POS directly at `yourdomain.com/pos` and log in with their WordPress credentials. +This screen appears only in the Desktop and Mobile apps. Web users access the POS directly at `yourdomain.com/pos` and log in with their WordPress credentials.versioned_sidebars/version-1.x-sidebars.json (1)
1-315: Keep sidebars source-of-truth in sidebars.js to avoid drift.Edits in versioned sidebars typically get overwritten; please move these structural changes to sidebars.js and regenerate the versioned artifacts. Based on learnings, this repo expects sidebar configuration to live in sidebars.js.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (58)
docusaurus.config.jsi18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxpackage.jsonversioned_docs/version-1.x/cart/index.mdxversioned_docs/version-1.x/customers/index.mdxversioned_docs/version-1.x/error-codes/index.mdxversioned_docs/version-1.x/getting-started/connect.mdxversioned_docs/version-1.x/getting-started/index.mdxversioned_docs/version-1.x/getting-started/installation.mdxversioned_docs/version-1.x/getting-started/previous-versions.mdxversioned_docs/version-1.x/getting-started/pro-license.mdxversioned_docs/version-1.x/installation/woocommerce-pos-pro.mdxversioned_docs/version-1.x/introduction.mdxversioned_docs/version-1.x/orders/index.mdxversioned_docs/version-1.x/payment/index.mdxversioned_docs/version-1.x/pos/cart/index.mdxversioned_docs/version-1.x/pos/cart/line-items.mdxversioned_docs/version-1.x/pos/cart/open-orders.mdxversioned_docs/version-1.x/pos/cart/order-actions.mdxversioned_docs/version-1.x/pos/checkout/index.mdxversioned_docs/version-1.x/pos/checkout/receipts.mdxversioned_docs/version-1.x/pos/index.mdxversioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdxversioned_docs/version-1.x/pos/product-panel/index.mdxversioned_docs/version-1.x/pos/product-panel/search-filtering.mdxversioned_docs/version-1.x/pos/product-panel/variations.mdxversioned_docs/version-1.x/products/index.mdxversioned_docs/version-1.x/products/sync.mdxversioned_docs/version-1.x/reference/architecture.mdxversioned_docs/version-1.x/reports/index.mdxversioned_docs/version-1.x/settings/index.mdxversioned_docs/version-1.x/settings/pos/index.mdxversioned_docs/version-1.x/settings/pos/section/customers-settings.mdxversioned_docs/version-1.x/settings/pos/section/index.mdxversioned_docs/version-1.x/settings/pos/section/orders-settings.mdxversioned_docs/version-1.x/settings/pos/section/pos-cart-settings.mdxversioned_docs/version-1.x/settings/pos/section/pos-products-settings.mdxversioned_docs/version-1.x/settings/pos/section/products-settings.mdxversioned_docs/version-1.x/settings/pos/section/reports-settings.mdxversioned_docs/version-1.x/settings/pos/store/barcode-settings.mdxversioned_docs/version-1.x/settings/pos/store/hotkey-settings.mdxversioned_docs/version-1.x/settings/pos/store/index.mdxversioned_docs/version-1.x/settings/pos/store/tax-settings.mdxversioned_docs/version-1.x/settings/pos/store/theme-settings.mdxversioned_docs/version-1.x/settings/store/barcode.mdxversioned_docs/version-1.x/settings/store/general.mdxversioned_docs/version-1.x/settings/store/hotkeys.mdxversioned_docs/version-1.x/settings/store/index.mdxversioned_docs/version-1.x/settings/store/tax.mdxversioned_docs/version-1.x/settings/store/theme.mdxversioned_docs/version-1.x/support/index.mdxversioned_docs/version-1.x/support/logs.mdxversioned_docs/version-1.x/support/troubleshooting/critical-error.mdxversioned_docs/version-1.x/support/troubleshooting/response-error.mdxversioned_sidebars/version-1.x-sidebars.json
💤 Files with no reviewable changes (16)
- versioned_docs/version-1.x/settings/pos/store/barcode-settings.mdx
- versioned_docs/version-1.x/settings/pos/section/customers-settings.mdx
- versioned_docs/version-1.x/settings/pos/store/theme-settings.mdx
- versioned_docs/version-1.x/settings/pos/section/pos-products-settings.mdx
- versioned_docs/version-1.x/settings/pos/store/tax-settings.mdx
- versioned_docs/version-1.x/settings/pos/section/orders-settings.mdx
- versioned_docs/version-1.x/settings/pos/store/index.mdx
- versioned_docs/version-1.x/settings/pos/section/pos-cart-settings.mdx
- versioned_docs/version-1.x/cart/index.mdx
- versioned_docs/version-1.x/settings/pos/section/reports-settings.mdx
- versioned_docs/version-1.x/settings/pos/index.mdx
- versioned_docs/version-1.x/settings/pos/section/index.mdx
- versioned_docs/version-1.x/settings/pos/section/products-settings.mdx
- versioned_docs/version-1.x/introduction.mdx
- versioned_docs/version-1.x/settings/pos/store/hotkey-settings.mdx
- versioned_docs/version-1.x/installation/woocommerce-pos-pro.mdx
🧰 Additional context used
📓 Path-based instructions (1)
docusaurus.config.js
📄 CodeRabbit inference engine (.cursor/rules/docs.mdc)
Docusaurus configuration should be maintained in docusaurus.config.js
Files:
docusaurus.config.js
🧠 Learnings (3)
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docs/**/*.{md,mdx} : Documentation pages should use MDX format (Markdown + JSX) in the docs/ directory
Applied to files:
versioned_docs/version-1.x/settings/store/theme.mdx
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docusaurus.config.js : Docusaurus configuration should be maintained in docusaurus.config.js
Applied to files:
package.jsondocusaurus.config.jsi18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to sidebars.js : Configuration of documentation sidebars should be done in sidebars.js
Applied to files:
versioned_sidebars/version-1.x-sidebars.json
🪛 LanguageTool
versioned_docs/version-1.x/getting-started/connect.mdx
[style] ~8-~8: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...te Desktop & Mobile Only This screen is only shown in the Desktop and Mobile apps. W...
(ADVERB_REPETITION_PREMIUM)
versioned_docs/version-1.x/reference/architecture.mdx
[style] ~56-~56: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...nd Android | WordPress themes and hooks can not customise the POS app | ## Local Datab...
(CAN_NOT_PREMIUM)
versioned_docs/version-1.x/getting-started/installation.mdx
[style] ~7-~7: Consider using a different verb to strengthen your wording.
Context: ...performance of the WCPOS plugin, please make sure your environment meets the following mi...
(MAKE_SURE_ENSURE)
[style] ~19-~19: Consider using a different verb to strengthen your wording.
Context: ...fox, Safari, and Microsoft Edge. Please make sure you are using the latest stable version...
(MAKE_SURE_ENSURE)
versioned_docs/version-1.x/support/troubleshooting/response-error.mdx
[style] ~20-~20: Consider using a different verb to strengthen your wording.
Context: ... issues and unexpected behavior. Please make sure you have the [minimum requirements](/ge...
(MAKE_SURE_ENSURE)
versioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdx
[style] ~59-~59: To elevate your writing, try using an alternative expression here.
Context: ...cts/sync) for more details. ### Why It Matters for Barcode Scanning When you scan a b...
(MATTERS_RELEVANT)
🔇 Additional comments (45)
package.json (1)
19-19: LGTM!The
@docusaurus/plugin-client-redirectsdependency is correctly added with version^3.9.2, matching the core Docusaurus version and following the same versioning pattern as other Docusaurus plugins in the project.versioned_docs/version-1.x/getting-started/pro-license.mdx (1)
1-40: LGTM!The Pro license documentation is well-structured with clear installation steps, feature descriptions, and appropriate external links. The use of an external image URL from wcpos.com is acceptable for official branding assets.
versioned_docs/version-1.x/pos/checkout/receipts.mdx (1)
94-94: The link to/templates/receipt-templatesis correct. The receipt-templates documentation exists atversioned_docs/version-1.x/templates/receipt-templates.mdx, so no action is needed.versioned_docs/version-1.x/error-codes/index.mdx (1)
84-84: LGTM.The link update to
/support/troubleshooting/response-erroris correct and resolves to an existing file in the documentation structure.versioned_docs/version-1.x/orders/index.mdx (1)
136-147: All internal documentation links resolve correctly.The links referenced in the orders documentation are valid:
/reportspoints toversioned_docs/version-1.x/reports/index.mdx✓/pos/checkout/receiptspoints toversioned_docs/version-1.x/pos/checkout/receipts.mdx✓Both target files exist and are properly structured. No broken links or missing documentation detected.
versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx (2)
1-4: Clearer sidebar label for navigation.
27-34: Steps section improves scanability.versioned_docs/version-1.x/payment/index.mdx (1)
1-45: LGTM — clear separation of default vs Pro payment options.versioned_docs/version-1.x/pos/product-panel/variations.mdx (1)
1-114: Comprehensive walkthrough of variable product workflows.versioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdx (3)
1-5: Sidebar positioning update looks good.
9-47: Wording and flow updates read well.Also applies to: 61-81
57-57: The cross-link target exists and resolves correctly. The fileversioned_docs/version-1.x/products/sync.mdxis present with proper content and frontmatter, and the URL path/products/syncwill resolve as expected in the v1.x documentation.versioned_docs/version-1.x/support/troubleshooting/response-error.mdx (2)
1-34: Intro and troubleshooting steps are tighter and clearer.
51-54: POS Logs step is a helpful addition.versioned_docs/version-1.x/getting-started/previous-versions.mdx (1)
4-4: Sidebar ordering update looks good.No issues with the new position.
versioned_docs/version-1.x/pos/product-panel/search-filtering.mdx (1)
2-4: Title and sidebar placement update looks consistent.versioned_docs/version-1.x/pos/cart/order-actions.mdx (3)
4-9: Intro placement/metadata looks good.
90-91: Verify the Checkout link path in the new structure.Please confirm the new checkout doc route resolves for v1.x; a relative link is safer if routing is versioned.
🔧 Suggested update
-- Opens the [checkout screen](/pos/checkout) to complete the payment. +- Opens the [checkout screen](../checkout) to complete the payment.
68-76: No changes needed—the original documentation is correct.The status slug
pos-openis the accurate WooCommerce POS status used consistently across the v1.x documentation (seeopen-orders.mdxandindex.mdx). The absolute path/pos/cart/open-ordersalso follows the standard link format established throughout v1.x docs, where all internal links use absolute paths like/pos/checkoutand/pos/product-panelrather than relative paths.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/products/sync.mdx (1)
23-23: No change needed—absolute path link is correct and follows the documentation standard.The link
/reference/architectureuses the consistent absolute path convention throughout the codebase. All internal links in versioned_docs/version-1.x use absolute paths (e.g.,/pos/cart,/orders,/error-codes), and Docusaurus transparently handles versioning for these paths. The architecture.mdx file exists in version-1.x, and the link is already version-safe.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/customers/index.mdx (2)
74-103: Missing anchor for Display Settings section.The Settings Overview page at
settings/index.mdxlinks to/customers#display-settings, but this section header "Display Settings" won't automatically generate that anchor. Docusaurus generates anchors from headers in kebab-case, so this would be#display-settingswhich should work.However, verify that this anchor resolves correctly after deployment, as other documentation pages reference it.
1-138: Well-structured documentation page.The Customers screen documentation is comprehensive, covering interface overview, key features, display settings, actions, and synchronization. The Pro feature callout is appropriately placed, and the related documentation links help users navigate to connected topics.
versioned_docs/version-1.x/pos/index.mdx (1)
1-117: Comprehensive POS overview documentation.The POS Screen Overview provides excellent coverage of the main interface including header, navigation, responsive layouts, and component descriptions. The cross-references to Product Panel, Cart, and Checkout pages are properly linked, and the keyboard shortcuts section appropriately references the dedicated hotkeys documentation.
versioned_docs/version-1.x/settings/store/hotkeys.mdx (2)
29-29: Verify the Support shortcut key combination.
Ctrl + Shift + ?is an unusual key combination since?typically requiresShiftto type (it'sShift + /on most keyboard layouts). This would effectively require pressingCtrl + Shift + /whereShiftis already held. Please verify this is the intended shortcut and not a documentation error (e.g., should it beCtrl + Shift + /orCtrl + Shift + H?).
1-52: Clear and helpful keyboard shortcuts documentation.The page provides a well-organized reference for keyboard shortcuts with clear usage instructions and practical tips. The customization notice appropriately sets user expectations and directs feedback to Discord.
versioned_docs/version-1.x/pos/cart/line-items.mdx (2)
1-107: Thorough line items documentation.This page provides excellent coverage of cart line item management, including the different WooCommerce line item types, inline editing capabilities, and the useful Raw JSON View for debugging. The tips section with keyboard navigation shortcuts adds practical value for power users.
79-87: Both anchor links are correctly defined in their respective documentation files:
#meta-data-keysexists as a heading in/pos/product-panel/index.mdx#display-settingsexists as a heading in/pos/cart/index.mdxThe links are valid and will not break.
versioned_docs/version-1.x/settings/index.mdx (2)
9-40: Clear settings organization.The three-tier settings structure (WordPress Admin, POS Store, Per-Screen Display) provides a logical organization that helps users understand where to find and configure different options. The location hints (WP Admin path, keyboard shortcut) are particularly helpful for navigation.
53-59: All display settings anchor links are correctly implemented. Each referenced page contains a "Display Settings" section header that automatically generates the corresponding anchor:
- ✓
/pos/product-panel#display-settings(line 66)- ✓
/pos/cart#display-settings(line 79)- ✓
/products#display-settings(line 100)- ✓
/orders#display-settings(line 81)- ✓
/customers#display-settings(line 74)- ✓
/reports#display-settings(line 79)versioned_docs/version-1.x/settings/store/theme.mdx (1)
1-74: LGTM!Clean and well-organized theme documentation. The structure effectively presents theme options with descriptions and use-case recommendations. The tips table provides a helpful quick-reference summary.
versioned_docs/version-1.x/getting-started/index.mdx (2)
1-80: Solid introduction page with clear onboarding flow.The 5-minute quick start guide is well-structured and provides an excellent entry point. The feature lists clearly differentiate free vs Pro capabilities. The
slug: /correctly positions this as the documentation root.
74-77: No action needed. The/paymentlink is valid and correctly points to the Payment Methods documentation atversioned_docs/version-1.x/payment/index.mdx. All links in the "Next Steps" section (/pos,/settings,/payment,/reference/architecture) are correct and functional within the current documentation structure.versioned_docs/version-1.x/pos/cart/index.mdx (1)
1-168: LGTM!Comprehensive Cart Panel documentation with excellent coverage of all interface elements and workflows. The technical note about WooCommerce line item types (line 44-46) provides valuable context. The columns configuration table and related documentation links enhance discoverability.
versioned_docs/version-1.x/settings/store/barcode.mdx (2)
1-56: LGTM!Clear and practical barcode settings documentation. The explanation of how barcode detection works (keyboard emulation with fast input detection) provides helpful context. The troubleshooting section with bidirectional advice (increase/decrease values based on the problem) is particularly useful.
54-56: Related documentation link is valid.The
/pos/product-panel/barcode-scanningfile exists atversioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdxand the link reference is correctly structured.versioned_docs/version-1.x/getting-started/installation.mdx (1)
23-37: Clear install + access flow.The new installation and access steps are straightforward and improve onboarding clarity.
versioned_docs/version-1.x/support/index.mdx (1)
7-84: Well-structured support overview.The page provides clear pathways (in-app, Discord, docs, logs, email) and sets good expectations for support requests.
versioned_docs/version-1.x/support/logs.mdx (1)
13-135: Solid logs reference.Great coverage of log UI, levels, context data, and support usage.
versioned_docs/version-1.x/pos/checkout/index.mdx (1)
13-132: Checkout flow docs look solid.The walkthrough, troubleshooting guidance, and related links are comprehensive and easy to follow.
versioned_docs/version-1.x/products/index.mdx (1)
104-111: No action needed. The use ofclassin MDX files is correct and consistent with this project's configuration. Docusaurus MDX treats plain HTML tags like<div>and<p>as HTML elements (not JSX components), whereclassis the standard attribute. The project's ESLint configuration explicitly excludes React/core rules from.mdxfiles, applying only Markdown-specific linting. This pattern is used consistently throughout the codebase in all other MDX documentation files.Likely an incorrect or invalid review comment.
docusaurus.config.js (1)
34-39: LGTM — navbar entry and redirect mappings look consistent with the new structure.Also applies to: 198-237
versioned_docs/version-1.x/pos/cart/open-orders.mdx (1)
7-128: Clear, well-structured documentation for Open Orders.versioned_docs/version-1.x/settings/store/tax.mdx (1)
11-18: The use ofclassattributes in this MDX file is consistent with the project's established convention across all documentation files. A search of the codebase shows this pattern (<div class="image-container">and<p class="image-caption">) used consistently throughout the docs without anyclassNameusage, and there are no actual React warnings generated in this Docusaurus MDX context. No changes are needed.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/pos/product-panel/index.mdx (1)
70-77: This suggestion conflicts with the established codebase convention. The project usesclassconsistently across all MDX files (10+ files), and Docusaurus 3.9.2 with@mdx-js/reacthandles bothclassandclassNamewithout warnings in MDX context. No ESLint rules or build configuration enforcesclassName, and there are no reported build issues from usingclassin the current setup.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/reports/index.mdx (1)
9-10: Absolute links in versioned-1.x docs are correctly configured for root-level serving.The links
/getting-started/pro-license,/orders, and/pos/checkoutare appropriately absolute because the 1.x version is configured aslastVersionand served at the root path/. This is the intended behavior in Docusaurus with the current setup whereincludeCurrentVersion: false. The older 0.4.x version uses external HTTP links instead, so no consistency issue exists across versions.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| sidebar_position: 1 | ||
| --- | ||
|
|
||
| import Image from "@theme/IdealImage"; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n versioned_docs/version-1.x/reports/index.mdx | head -100Repository: wcpos/docs
Length of output: 3378
🏁 Script executed:
rg "@theme/IdealImage" -A 5 versioned_docs/ | head -80Repository: wcpos/docs
Length of output: 6517
🏁 Script executed:
rg "img=\"" versioned_docs/ -A 1 -B 1 | head -100Repository: wcpos/docs
Length of output: 6794
🌐 Web query:
Docusaurus @theme/IdealImage img prop string path vs import
💡 Result:
Short answer: import (or require) the image — not a raw string path. The IdealImage component expects the processed import/require (the plugin’s Webpack loader transforms imports into an object with preSrc and src), so do:
or
- <Image img={require('./img.png')} />
A plain string like "./img.png" won’t get processed by the plugin/loader and will not produce the responsive/placeholder outputs. [1][2]
Sources: Docusaurus plugin-ideal-image usage docs. [1][2]
Replace string path with imported image for proper IdealImage processing.
@theme/IdealImage requires an imported image module, not a raw string path. String paths won't be processed by the plugin's Webpack loader and won't generate responsive/placeholder images. Import the image and pass it as a module instead.
🛠️ Example fix
import Image from "@theme/IdealImage";
+import reportsSettingsImg from "@site/static/img/reports-page-settings.png";
...
<Image
alt="Reports Settings"
- img="/img/reports-page-settings.png"
+ img={reportsSettingsImg}
style={{ maxHeight: 800 }}
/>🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/reports/index.mdx` at line 7, The page currently
passes a raw string path to the `@theme/IdealImage` component; import the image
file as a module and pass that imported symbol to the Image component instead.
Add an import like a unique name (e.g., heroImage) for the local image file and
update any <Image ...> usage to use that imported symbol (e.g., pass heroImage
to the prop the IdealImage expects) so the IdealImage Webpack loader can process
it for responsive/placeholder assets.
| <div class="image-container"> | ||
| <Image | ||
| alt="General Store Settings in the POS Settings" | ||
| img="/img/general-settings.png" | ||
| style={{ maxHeight: 800 }} | ||
| /> | ||
| <p class="image-caption">General Store Settings in the POS Settings</p> | ||
| <p class="image-caption">General Store Settings</p> | ||
| </div> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's check if the file exists and read it
find . -name "general.mdx" -path "*/version-1.x/settings/store/*" 2>/dev/null | head -20Repository: wcpos/docs
Length of output: 109
🏁 Script executed:
# If found, read the file to verify the content
if [ -f "versioned_docs/version-1.x/settings/store/general.mdx" ]; then
cat -n "versioned_docs/version-1.x/settings/store/general.mdx"
fiRepository: wcpos/docs
Length of output: 4949
🏁 Script executed:
# Search for other uses of class attributes in MDX files
rg 'class="' --type mdx -A 1 -B 1 | head -40Repository: wcpos/docs
Length of output: 81
🏁 Script executed:
# Search for class attributes in all MDX/Markdown JSX files
find . -type f \( -name "*.mdx" -o -name "*.md" \) -exec grep -l 'class="' {} \; | head -20Repository: wcpos/docs
Length of output: 2974
🏁 Script executed:
# Let's check a few of these files to see if class is commonly used
find . -type f -name "*.mdx" -exec grep -H 'class="' {} \; 2>/dev/null | head -20Repository: wcpos/docs
Length of output: 2812
🏁 Script executed:
# Let's also check for className usage to see if that's used instead
find . -type f -name "*.mdx" -exec grep -H 'className="' {} \; 2>/dev/null | head -10Repository: wcpos/docs
Length of output: 36
🌐 Web query:
MDX class vs className JSX attributes best practices
💡 Result:
Short answer
- When writing JSX inside MDX, use className (same as React/JSX). Prefer class only when embedding raw HTML or targeting non‑React web components. [1][2][3]
Why
- MDX v2 compiles to JSX/runtime components, so JSX attribute rules apply. Use className for React-style elements. [2]
- class (HTML attribute) is fine in raw HTML blocks that MDX passes through unchanged, or when working with web components that expect the literal class attribute. [1][2]
Best practices
- Use className consistently for all JSX elements in MDX files. It avoids confusion and matches TypeScript/React typings and linters. [1][3]
- If you must embed raw HTML in MDX (e.g., ), prefer that only when necessary and document why. [2]
- Use a helper like the classnames library or template expressions for conditional classes: className={cn(...)}.
- Don’t mix patterns in the same project — pick JSX/className for component markup and reserve literal class for pure HTML snippets or external web components.
References
- React/JSX guidance (community/FAQ explaining className vs class). [1]
- MDX v2 announcement/docs (MDX compiles to JSX/runtime). [2]
- Explanation of className usage and rationale. [3]
If you want, I can fetch the official React docs links and a short MDX example showing both cases.
Use className for JSX attributes instead of class.
MDX v2 compiles to JSX/React, where className is the standard attribute name. Using class can cause invalid DOM prop warnings during compilation.
Proposed fix
-<div class="image-container">
+<div className="image-container">
<Image
alt="General Store Settings in the POS Settings"
img="/img/general-settings.png"
style={{ maxHeight: 800 }}
/>
- <p class="image-caption">General Store Settings</p>
+ <p className="image-caption">General Store Settings</p>
</div>📝 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.
| <div class="image-container"> | |
| <Image | |
| alt="General Store Settings in the POS Settings" | |
| img="/img/general-settings.png" | |
| style={{ maxHeight: 800 }} | |
| /> | |
| <p class="image-caption">General Store Settings in the POS Settings</p> | |
| <p class="image-caption">General Store Settings</p> | |
| </div> | |
| <div className="image-container"> | |
| <Image | |
| alt="General Store Settings in the POS Settings" | |
| img="/img/general-settings.png" | |
| style={{ maxHeight: 800 }} | |
| /> | |
| <p className="image-caption">General Store Settings</p> | |
| </div> |
🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/settings/store/general.mdx` around lines 11 - 18,
Replace JSX DOM attributes that use the HTML-only name "class" with
React/MDX-compatible "className" for the elements in this snippet: the <div>
with the image-container class and the <p> with the image-caption class. Update
the JSX attributes around the Image component (and its surrounding elements) so
they use className="image-container" and className="image-caption" respectively
to avoid invalid DOM prop warnings during MDX/React compilation.
- Change color → colour, behavior → behaviour, catalog → catalogue - Change customize → customise, optimization → optimisation - Change dialog → dialogue, gray → grey, authorization → authorisation - Update .cursor/rules with UK English spelling guide
- Add GitHub workflow triggered by /translate comment on PRs - Add translation script using Claude Haiku API - Add translation context with WCPOS terminology glossary - Add new locales: de, ja, pt-BR, ko, it, ar (11 total) - Configure Arabic for RTL support Usage: Comment /translate on a PR to translate changed English docs to all supported languages. Requires ANTHROPIC_API_KEY secret.
- Fix "two types" → "three types" in settings index (matches 3 sections) - Fix "can not" → "cannot" in architecture.mdx - Use relative links in settings/store/index.mdx for version routing - Add rel="noopener noreferrer" to external target="_blank" links
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Fix all issues with AI agents
In `@scripts/translate-with-claude.js`:
- Around line 124-132: The code currently only logs a warning when
JSON.parse(translatedContent) fails but still returns translatedContent (the
function that returns translatedContent), causing malformed JSON to be written;
change this to throw an Error (or trigger a retry/abort flow) when
JSON.parse(translatedContent) throws so the caller does not write invalid JSON
to disk—replace the catch body to throw a new Error that includes filePath and
the parse error details (or call the existing retry/abort handler) instead of
just console.error.
- Around line 77-91: The code assumes response.content[0].text exists after
calling anthropic.messages.create; add defensive validation after the API call
to ensure response and response.content are arrays with at least one element and
that response.content[0].text is a non-empty string before returning it
(reference the anthropic.messages.create call and the response.content[0].text
access), otherwise log the full response object (or relevant fields) and throw a
clear, descriptive error (e.g., "Invalid or empty response from Claude") so
callers get a meaningful failure instead of an uncaught type error.
- Around line 225-236: The parsing loop over lines can access parts[1] and
parts[2] without checking bounds; update the block where parts, status, and
files are used (inside the for (const line of lines) loop) to defensively
validate parts.length and content: skip or log a warning for empty/malformed
lines, require parts.length >= 3 before handling a rename (status === 'R') and
parts.length >= 2 for other statuses, and only push to files when the path
strings are defined and non-empty; keep using the same variables names (lines,
parts, status, files) so the change is localized and easy to spot.
In `@scripts/translation-context.md`:
- Line 101: Update the casing of the trademarked term "Markdown" in the
"Formatting - Preserve all markdown formatting" bullet (and any other
occurrences in this document) so it is capitalized as a proper noun; search for
the phrase "markdown" in the file and replace with "Markdown" where it refers to
the markup language (e.g., the line "Formatting - Preserve all markdown
formatting").
In `@versioned_docs/version-1.x/pos/product-panel/variations.mdx`:
- Line 7: Change the US spelling "colors" to British English "colours" in the
sentence that reads "Variable products in WooCommerce are products that have
multiple options, such as different sizes, colors, or materials." so it becomes
"...different sizes, colours, or materials."; update that exact string in the
document where it appears (the sentence starting "Variable products in
WooCommerce...") to align with the PR's UK-English standard.
♻️ Duplicate comments (2)
versioned_docs/version-1.x/support/troubleshooting/response-error.mdx (1)
42-42: Addrel="noopener noreferrer"to the external link.This security concern was previously flagged and remains unaddressed. The
target="_blank"link should includerel="noopener noreferrer"to prevent tabnabbing.versioned_docs/version-1.x/settings/store/general.mdx (1)
11-18: UseclassNameinstead ofclassfor JSX attributes.This issue was previously flagged. In MDX files that compile to JSX/React,
classNameis the standard attribute name. Usingclasscan cause invalid DOM prop warnings.Proposed fix
-<div class="image-container"> +<div className="image-container"> <Image alt="General Store Settings in the POS Settings" img="/img/general-settings.png" style={{ maxHeight: 800 }} /> - <p class="image-caption">General Store Settings</p> + <p className="image-caption">General Store Settings</p> </div>
🧹 Nitpick comments (5)
versioned_docs/version-1.x/error-codes/SY01001.mdx (1)
51-51: LGTM! British spelling normalization applied correctly.The change from "catalog" to "catalogue" aligns with the PR's objective to normalize documentation to British English spelling.
Optional style note: The static analysis tool flagged "very large" as an overused intensifier. You could consider alternatives like "an extensive catalogue" or "a large catalogue," but this is purely a stylistic nitpick.
package.json (1)
19-19: Consider moving@anthropic-ai/sdktodevDependencies.This SDK is only used by the translation script during CI, not at runtime. Moving it to
devDependencieswould clarify its purpose and potentially reduce install size in production builds.Suggested change
"dependencies": { - "@anthropic-ai/sdk": "^0.39.0", "@docusaurus/core": "3.9.2", ... }, "devDependencies": { + "@anthropic-ai/sdk": "^0.39.0", "@docusaurus/module-type-aliases": "3.9.2", ... },.github/workflows/translate-pr.yml (1)
10-12: Consider restricting who can trigger the/translatecommand.Currently, any user who can comment on PRs can trigger the translation workflow, which consumes API credits. Consider adding a permission check (e.g., repository collaborators, specific team members, or the PR author).
Example: Restrict to collaborators or PR author
if: | github.event.issue.pull_request && - contains(github.event.comment.body, '/translate') + contains(github.event.comment.body, '/translate') && + ( + github.event.comment.author_association == 'OWNER' || + github.event.comment.author_association == 'MEMBER' || + github.event.comment.author_association == 'COLLABORATOR' + )scripts/translate-with-claude.js (2)
38-39: The Anthropic client is initialized at module load time before API key validation.If
ANTHROPIC_API_KEYis missing, the client instantiation may throw or behave unexpectedly before reaching the validation inmain().Consider lazy initialization
-// Initialize Anthropic client -const anthropic = new Anthropic(); +// Initialize Anthropic client lazily +let anthropic; + +function getAnthropicClient() { + if (!anthropic) { + anthropic = new Anthropic(); + } + return anthropic; +}Then update
translateContentto usegetAnthropicClient()instead ofanthropicdirectly.
97-111: Thematter(content)call is unused and doesn't validate anything.
gray-matterparses content without throwing on missing frontmatter - it simply returns an emptydataobject. The result is discarded, making this a no-op.Either remove or actually use the parsed result
async function processMdxFile(filePath, targetLocale) { const content = await fs.readFile(filePath, 'utf8'); - // Parse to validate frontmatter exists (Claude will handle translation) - matter(content); - // Translate the full content (Claude will handle frontmatter appropriately) const translatedContent = await translateContent( content, targetLocale, 'mdx', ); return translatedContent; }
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (35)
.cursor/rules/docs.mdc.github/workflows/translate-pr.ymldocusaurus.config.jseslint.config.mjspackage.jsonscripts/translate-with-claude.jsscripts/translation-context.mdversioned_docs/version-1.x/customers/index.mdxversioned_docs/version-1.x/error-codes/API02004.mdxversioned_docs/version-1.x/error-codes/API03006.mdxversioned_docs/version-1.x/error-codes/API03007.mdxversioned_docs/version-1.x/error-codes/DB01002.mdxversioned_docs/version-1.x/error-codes/SY01001.mdxversioned_docs/version-1.x/getting-started/index.mdxversioned_docs/version-1.x/orders/index.mdxversioned_docs/version-1.x/payment/custom-gateways/email-invoice.mdxversioned_docs/version-1.x/payment/custom-gateways/gateway-template.mdxversioned_docs/version-1.x/payment/custom-gateways/web-checkout.mdxversioned_docs/version-1.x/pos/cart/index.mdxversioned_docs/version-1.x/pos/cart/line-items.mdxversioned_docs/version-1.x/pos/cart/order-actions.mdxversioned_docs/version-1.x/pos/checkout/receipts.mdxversioned_docs/version-1.x/pos/index.mdxversioned_docs/version-1.x/pos/product-panel/index.mdxversioned_docs/version-1.x/pos/product-panel/variations.mdxversioned_docs/version-1.x/products/index.mdxversioned_docs/version-1.x/reports/index.mdxversioned_docs/version-1.x/settings/store/general.mdxversioned_docs/version-1.x/settings/store/hotkeys.mdxversioned_docs/version-1.x/settings/store/index.mdxversioned_docs/version-1.x/settings/store/theme.mdxversioned_docs/version-1.x/support/logs.mdxversioned_docs/version-1.x/support/troubleshooting/response-error.mdxversioned_docs/version-1.x/templates/index.mdxversioned_docs/version-1.x/templates/receipt-templates.mdx
✅ Files skipped from review due to trivial changes (3)
- versioned_docs/version-1.x/error-codes/API03006.mdx
- versioned_docs/version-1.x/payment/custom-gateways/gateway-template.mdx
- versioned_docs/version-1.x/pos/cart/line-items.mdx
🚧 Files skipped from review as they are similar to previous changes (10)
- versioned_docs/version-1.x/pos/checkout/receipts.mdx
- versioned_docs/version-1.x/settings/store/index.mdx
- versioned_docs/version-1.x/support/logs.mdx
- versioned_docs/version-1.x/pos/cart/order-actions.mdx
- versioned_docs/version-1.x/settings/store/hotkeys.mdx
- versioned_docs/version-1.x/settings/store/theme.mdx
- versioned_docs/version-1.x/orders/index.mdx
- versioned_docs/version-1.x/getting-started/index.mdx
- versioned_docs/version-1.x/products/index.mdx
- versioned_docs/version-1.x/reports/index.mdx
🧰 Additional context used
📓 Path-based instructions (1)
docusaurus.config.js
📄 CodeRabbit inference engine (.cursor/rules/docs.mdc)
Docusaurus configuration should be maintained in docusaurus.config.js
Files:
docusaurus.config.js
🧠 Learnings (3)
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docs/**/*.{md,mdx} : Documentation pages should use MDX format (Markdown + JSX) in the docs/ directory
Applied to files:
versioned_docs/version-1.x/settings/store/general.mdx
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docusaurus.config.js : Docusaurus configuration should be maintained in docusaurus.config.js
Applied to files:
package.jsondocusaurus.config.js
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to sidebars.js : Configuration of documentation sidebars should be done in sidebars.js
Applied to files:
.cursor/rules/docs.mdc
🧬 Code graph analysis (1)
scripts/translate-with-claude.js (2)
docusaurus.config.js (1)
require(1-1)scripts/translate-docs.js (1)
filePath(75-75)
🪛 LanguageTool
versioned_docs/version-1.x/error-codes/DB01002.mdx
[style] ~58-~58: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...r HDD ## Large Catalogues If you have a very large product catalogue: - Initial sync takes...
(EN_WEAK_ADJECTIVE)
versioned_docs/version-1.x/support/troubleshooting/response-error.mdx
[style] ~20-~20: Consider using a different verb to strengthen your wording.
Context: ...issues and unexpected behaviour. Please make sure you have the [minimum requirements](/ge...
(MAKE_SURE_ENSURE)
scripts/translation-context.md
[uncategorized] ~101-~101: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...orrect 4. Formatting - Preserve all markdown formatting 5. Length - Translations...
(MARKDOWN_NNP)
versioned_docs/version-1.x/error-codes/SY01001.mdx
[style] ~51-~51: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...s ### 5. Reduce Data Load If you have a very large catalogue: - Use filters to load less d...
(EN_WEAK_ADJECTIVE)
🔇 Additional comments (33)
eslint.config.mjs (1)
37-37: LGTM!Good addition of the underscore prefix convention for intentionally unused parameters and caught errors. This is a widely adopted pattern that improves code clarity by signaling intent when a variable must be declared but won't be used (e.g., middleware callbacks, destructuring).
versioned_docs/version-1.x/error-codes/API02004.mdx (1)
2-10: Approve the British English normalisation, but note the spelling inconsistency.The change to "authorisation" on line 10 aligns with the PR's British English normalisation effort. However, the title still uses American spelling ("Not Authorized" on lines 2 and 6) while the body now uses British spelling ("authorisation").
If "User Not Authorized" is the canonical error code name returned by the API, keeping it unchanged is appropriate—but consider adding a brief note explaining the mixed spelling, or updating the descriptive heading on line 6 to match the body text while preserving only line 2's
titlefor the actual error code.versioned_docs/version-1.x/support/troubleshooting/response-error.mdx (4)
2-3: LGTM!Good improvement—keeping the full technical error in the page title for SEO/discoverability while using a concise sidebar label for better navigation.
8-8: LGTM!Clear, concise explanation of the error condition.
33-33: LGTM!Good reorganization—keeps diagnostic steps focused on gathering information, with support contact details now consolidated in the dedicated "Getting Help" section.
51-64: Well-structured support sections.The new sections cleanly separate diagnostic steps from support channels. The POS Logs reference, Getting Help section, and Pro users admonition provide clear next steps and contact information for users seeking assistance.
versioned_docs/version-1.x/customers/index.mdx (1)
78-85: No changes needed—the code is correct.In MDX,
<div>and<p>are plain HTML elements, which use the standardclassattribute, notclassName. TheclassNameprop is for JSX/React components (e.g.,<Image />). The code correctly usesclass=for HTML elements throughout the documentation, which is the established and appropriate pattern in this Docusaurus project.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/pos/product-panel/index.mdx (1)
70-77: UseclassNamein MDX JSX to follow best practices.
JSX elements should useclassNamerather thanclassfor proper style application.💡 Suggested fix
-<div class="image-container"> +<div className="image-container"> <Image alt="POS Products Settings" img="/img/pos-products-settings.png" style={{ maxHeight: 800 }} /> - <p class="image-caption">Product Panel Display Settings</p> + <p className="image-caption">Product Panel Display Settings</p> </div>versioned_docs/version-1.x/pos/cart/index.mdx (1)
83-90: UseclassNamein MDX JSX to ensure classes apply.
JSX expectsclassName; usingclasscan drop the CSS hooks.💡 Suggested fix
-<div class="image-container"> +<div className="image-container"> <Image alt="Cart Settings" img="/img/pos-cart-settings.png" style={{ maxHeight: 662 }} /> - <p class="image-caption">Cart Panel Display Settings</p> + <p className="image-caption">Cart Panel Display Settings</p> </div>versioned_docs/version-1.x/payment/custom-gateways/email-invoice.mdx (2)
86-89: UK spelling consistency looks good.This aligns with the new UK English guidance without changing meaning.
153-158: Spelling update is consistent with UK English.No issues here.
versioned_docs/version-1.x/error-codes/API03007.mdx (1)
57-62: Offline behaviour details are clear and helpful.Nice addition for user troubleshooting context.
versioned_docs/version-1.x/payment/custom-gateways/web-checkout.mdx (1)
160-167: UK spelling updates are consistent.The performance section reads cleanly.
.cursor/rules/docs.mdc (1)
47-68: Clear, actionable UK English guideline block.The exception list is especially helpful for consistency.
versioned_docs/version-1.x/pos/index.mdx (2)
7-35: Great high‑level overview and navigation table.Nice, scannable intro for first‑time POS users.
67-99: Use relative doc links to preserve versioned navigation.Absolute paths like
/pos/product-panelin versioned docs route to the latest version instead of the 1.x content. Use relative links (e.g.,./product-panel) to maintain version context. Note: Verify whether file extensions (.mdx) should be included in the markdown links based on your project's conventions.✅ Suggested update
-The left side of the POS is the [Product Panel](/pos/product-panel), where you: +The left side of the POS is the [Product Panel](./product-panel), where you: -[Learn more about the Product Panel →](/pos/product-panel) +[Learn more about the Product Panel →](./product-panel) -The right side of the POS is the [Cart Panel](/pos/cart), where you: +The right side of the POS is the [Cart Panel](./cart), where you: -[Learn more about the Cart Panel →](/pos/cart) +[Learn more about the Cart Panel →](./cart) -When you're ready to complete a sale, click **Checkout** to open the [Checkout modal](/pos/checkout): +When you're ready to complete a sale, click **Checkout** to open the [Checkout modal](./checkout): -[Learn more about Checkout →](/pos/checkout) +[Learn more about Checkout →](./checkout) -WCPOS supports keyboard shortcuts for faster operation. Access the full list via the Settings modal or see [Keyboard Shortcuts](/settings/store/hotkeys). +WCPOS supports keyboard shortcuts for faster operation. Access the full list via the Settings modal or see [Keyboard Shortcuts](../settings/store/hotkeys).versioned_docs/version-1.x/templates/receipt-templates.mdx (1)
7-7: LGTM!British English spelling changes (
customise,customisation) are consistently applied throughout the file, aligning with the PR's localization objectives.Also applies to: 14-14, 48-48
versioned_docs/version-1.x/templates/index.mdx (1)
9-15: LGTM!British English spelling updates (
customise,customising) are consistently applied. The template descriptions are clear and well-formatted.Also applies to: 25-25
scripts/translation-context.md (1)
1-102: Well-structured translation context document.The guidelines comprehensively cover terminology preservation, MDX/JSON handling, and quality expectations. The distinction between translatable content and technical terms that should remain in English is clearly articulated.
versioned_docs/version-1.x/error-codes/DB01002.mdx (1)
17-17: LGTM!British English spelling updates (
optimisation,optimise,catalogue) are consistently applied. The database troubleshooting steps are clear and actionable.Also applies to: 42-47, 56-62
versioned_docs/version-1.x/settings/store/general.mdx (1)
1-5: LGTM!The content updates and British English spelling changes (
localisation,customise) are consistent with the PR objectives. The simplified "Restore server settings" description is clearer and more concise.Also applies to: 9-9, 25-25, 47-47, 114-117
docusaurus.config.js (3)
36-36: LGTM!The navbar
docIdupdate togetting-started/indexcorrectly reflects the new documentation structure.
174-185: LGTM!The i18n configuration correctly:
- Expands supported locales to 11 languages
- Configures RTL direction for Arabic
- Maintains British English (
en-GB) as the default
197-238: LGTM!The client redirects plugin is well-configured with comprehensive path mappings that preserve SEO and user bookmarks during the documentation restructure.
package.json (2)
15-16: LGTM!The translation scripts are correctly configured -
translate-docsfor the existing flow andtranslatefor the new Claude-based translation.
21-21: LGTM!The
@docusaurus/plugin-client-redirectsversion aligns with the other Docusaurus packages (3.9.2)..github/workflows/translate-pr.yml (4)
35-40: LGTM!The checkout configuration is correct -
fetch-depth: 0is required for the git diff comparison, andGITHUB_TOKENprovides appropriate permissions for pushing back to the PR branch.
54-71: LGTM!The git diff command correctly identifies changed English documentation files and outputs in the
--name-statusformat expected by the translation script.
88-102: LGTM!The PR comment step provides clear user feedback indicating whether translations were added or no changes were detected.
79-86: The push step may fail silently if branch protection rules block direct pushes.If the target branch has protection rules,
git pushcould fail without proper feedback. Consider adding error handling or using a PR-based approach for protected branches.Verify if the repository has branch protection rules that might block this workflow:
#!/bin/bash # Check if there are any branch protection configurations gh api repos/{owner}/{repo}/branches --jq '.[].name' 2>/dev/null || echo "Unable to check branch protection"scripts/translate-with-claude.js (3)
134-158: LGTM!The path mapping logic correctly handles both
versioned_docs/andi18n/en/source patterns, with appropriate fallback warning for unexpected paths.
163-213: LGTM!The file processing logic correctly handles all operation types (add/modify/delete) across locales with appropriate error handling and rate limiting.
252-291: LGTM!The main function has proper validation for the API key, graceful handling of empty inputs, and appropriate error handling with exit codes.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| try { | ||
| const response = await anthropic.messages.create({ | ||
| model: 'claude-haiku-20240307', | ||
| max_tokens: 8192, | ||
| system: | ||
| translationContext || | ||
| 'You are a professional translator for technical documentation.', | ||
| messages: [{ role: 'user', content: userPrompt }], | ||
| }); | ||
|
|
||
| return response.content[0].text; | ||
| } catch (error) { | ||
| console.error(`Error translating to ${targetLocale}:`, error.message); | ||
| throw error; | ||
| } |
There was a problem hiding this comment.
Missing validation for API response structure.
The code assumes response.content[0].text exists. If the API returns an unexpected structure (e.g., empty content array, content blocked), this will throw an unclear error.
Suggested defensive check
const response = await anthropic.messages.create({
model: 'claude-haiku-20240307',
max_tokens: 8192,
system:
translationContext ||
'You are a professional translator for technical documentation.',
messages: [{ role: 'user', content: userPrompt }],
});
- return response.content[0].text;
+ if (!response.content?.length || !response.content[0].text) {
+ throw new Error(`Empty or invalid response from Claude API`);
+ }
+ return response.content[0].text;
} catch (error) {📝 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.
| try { | |
| const response = await anthropic.messages.create({ | |
| model: 'claude-haiku-20240307', | |
| max_tokens: 8192, | |
| system: | |
| translationContext || | |
| 'You are a professional translator for technical documentation.', | |
| messages: [{ role: 'user', content: userPrompt }], | |
| }); | |
| return response.content[0].text; | |
| } catch (error) { | |
| console.error(`Error translating to ${targetLocale}:`, error.message); | |
| throw error; | |
| } | |
| try { | |
| const response = await anthropic.messages.create({ | |
| model: 'claude-haiku-20240307', | |
| max_tokens: 8192, | |
| system: | |
| translationContext || | |
| 'You are a professional translator for technical documentation.', | |
| messages: [{ role: 'user', content: userPrompt }], | |
| }); | |
| if (!response.content?.length || !response.content[0].text) { | |
| throw new Error(`Empty or invalid response from Claude API`); | |
| } | |
| return response.content[0].text; | |
| } catch (error) { | |
| console.error(`Error translating to ${targetLocale}:`, error.message); | |
| throw error; | |
| } |
🤖 Prompt for AI Agents
In `@scripts/translate-with-claude.js` around lines 77 - 91, The code assumes
response.content[0].text exists after calling anthropic.messages.create; add
defensive validation after the API call to ensure response and response.content
are arrays with at least one element and that response.content[0].text is a
non-empty string before returning it (reference the anthropic.messages.create
call and the response.content[0].text access), otherwise log the full response
object (or relevant fields) and throw a clear, descriptive error (e.g., "Invalid
or empty response from Claude") so callers get a meaningful failure instead of
an uncaught type error.
| // Validate JSON | ||
| try { | ||
| JSON.parse(translatedContent); | ||
| } catch (_error) { | ||
| console.error(`Warning: Translated JSON for ${filePath} may be malformed`); | ||
| } | ||
|
|
||
| return translatedContent; | ||
| } |
There was a problem hiding this comment.
Malformed JSON is written to disk despite validation failure.
The code warns about malformed JSON but still returns and writes it, which could break the Docusaurus build. Consider failing the operation or retrying.
Suggested fix: throw on invalid JSON
// Validate JSON
try {
JSON.parse(translatedContent);
- } catch (_error) {
- console.error(`Warning: Translated JSON for ${filePath} may be malformed`);
+ } catch (parseError) {
+ throw new Error(
+ `Translated JSON for ${filePath} is malformed: ${parseError.message}`
+ );
}
return translatedContent;📝 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.
| // Validate JSON | |
| try { | |
| JSON.parse(translatedContent); | |
| } catch (_error) { | |
| console.error(`Warning: Translated JSON for ${filePath} may be malformed`); | |
| } | |
| return translatedContent; | |
| } | |
| // Validate JSON | |
| try { | |
| JSON.parse(translatedContent); | |
| } catch (parseError) { | |
| throw new Error( | |
| `Translated JSON for ${filePath} is malformed: ${parseError.message}` | |
| ); | |
| } | |
| return translatedContent; | |
| } |
🤖 Prompt for AI Agents
In `@scripts/translate-with-claude.js` around lines 124 - 132, The code currently
only logs a warning when JSON.parse(translatedContent) fails but still returns
translatedContent (the function that returns translatedContent), causing
malformed JSON to be written; change this to throw an Error (or trigger a
retry/abort flow) when JSON.parse(translatedContent) throws so the caller does
not write invalid JSON to disk—replace the catch body to throw a new Error that
includes filePath and the parse error details (or call the existing retry/abort
handler) instead of just console.error.
| for (const line of lines) { | ||
| // Format: "A\tpath/to/file" or "R100\told/path\tnew/path" | ||
| const parts = line.split('\t'); | ||
| const status = parts[0].charAt(0); // A, M, D, or R | ||
|
|
||
| if (status === 'R') { | ||
| // Rename: delete old, add new | ||
| files.push({ path: parts[1], operation: 'D' }); | ||
| files.push({ path: parts[2], operation: 'A' }); | ||
| } else { | ||
| files.push({ path: parts[1], operation: status }); | ||
| } |
There was a problem hiding this comment.
Missing bounds check on parts array.
If a line has unexpected format (e.g., malformed git output), accessing parts[1] or parts[2] could be undefined, leading to files with undefined paths being processed.
Suggested defensive check
for (const line of lines) {
// Format: "A\tpath/to/file" or "R100\told/path\tnew/path"
const parts = line.split('\t');
+ if (parts.length < 2) {
+ console.warn(`Skipping malformed line: ${line}`);
+ continue;
+ }
const status = parts[0].charAt(0); // A, M, D, or R
if (status === 'R') {
// Rename: delete old, add new
+ if (parts.length < 3) {
+ console.warn(`Skipping malformed rename line: ${line}`);
+ continue;
+ }
files.push({ path: parts[1], operation: 'D' });
files.push({ path: parts[2], operation: 'A' });
} else {
files.push({ path: parts[1], operation: status });
}
}📝 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.
| for (const line of lines) { | |
| // Format: "A\tpath/to/file" or "R100\told/path\tnew/path" | |
| const parts = line.split('\t'); | |
| const status = parts[0].charAt(0); // A, M, D, or R | |
| if (status === 'R') { | |
| // Rename: delete old, add new | |
| files.push({ path: parts[1], operation: 'D' }); | |
| files.push({ path: parts[2], operation: 'A' }); | |
| } else { | |
| files.push({ path: parts[1], operation: status }); | |
| } | |
| for (const line of lines) { | |
| // Format: "A\tpath/to/file" or "R100\told/path\tnew/path" | |
| const parts = line.split('\t'); | |
| if (parts.length < 2) { | |
| console.warn(`Skipping malformed line: ${line}`); | |
| continue; | |
| } | |
| const status = parts[0].charAt(0); // A, M, D, or R | |
| if (status === 'R') { | |
| // Rename: delete old, add new | |
| if (parts.length < 3) { | |
| console.warn(`Skipping malformed rename line: ${line}`); | |
| continue; | |
| } | |
| files.push({ path: parts[1], operation: 'D' }); | |
| files.push({ path: parts[2], operation: 'A' }); | |
| } else { | |
| files.push({ path: parts[1], operation: status }); | |
| } |
🤖 Prompt for AI Agents
In `@scripts/translate-with-claude.js` around lines 225 - 236, The parsing loop
over lines can access parts[1] and parts[2] without checking bounds; update the
block where parts, status, and files are used (inside the for (const line of
lines) loop) to defensively validate parts.length and content: skip or log a
warning for empty/malformed lines, require parts.length >= 3 before handling a
rename (status === 'R') and parts.length >= 2 for other statuses, and only push
to files when the path strings are defined and non-empty; keep using the same
variables names (lines, parts, status, files) so the change is localized and
easy to spot.
| 1. **Consistency** - Use the same term throughout for the same concept | ||
| 2. **Natural language** - Translate idiomatically, not word-for-word | ||
| 3. **Technical accuracy** - Ensure translated instructions are still correct | ||
| 4. **Formatting** - Preserve all markdown formatting |
There was a problem hiding this comment.
Capitalize "Markdown" as a proper noun.
"Markdown" is a trademarked name and should be capitalized.
Proposed fix
-4. **Formatting** - Preserve all markdown formatting
+4. **Formatting** - Preserve all Markdown formatting📝 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.
| 4. **Formatting** - Preserve all markdown formatting | |
| 4. **Formatting** - Preserve all Markdown formatting |
🧰 Tools
🪛 LanguageTool
[uncategorized] ~101-~101: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...orrect 4. Formatting - Preserve all markdown formatting 5. Length - Translations...
(MARKDOWN_NNP)
🤖 Prompt for AI Agents
In `@scripts/translation-context.md` at line 101, Update the casing of the
trademarked term "Markdown" in the "Formatting - Preserve all markdown
formatting" bullet (and any other occurrences in this document) so it is
capitalized as a proper noun; search for the phrase "markdown" in the file and
replace with "Markdown" where it refers to the markup language (e.g., the line
"Formatting - Preserve all markdown formatting").
| sidebar_position: 4 | ||
| --- | ||
|
|
||
| Variable products in WooCommerce are products that have multiple options, such as different sizes, colors, or materials. WCPOS provides several ways to work with variable products efficiently. |
There was a problem hiding this comment.
Align spelling with British English (“colours”).
This line uses US spelling, which conflicts with the PR’s UK-English standardization.
✏️ Suggested edit
-Variable products in WooCommerce are products that have multiple options, such as different sizes, colors, or materials.
+Variable products in WooCommerce are products that have multiple options, such as different sizes, colours, or materials.📝 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.
| Variable products in WooCommerce are products that have multiple options, such as different sizes, colors, or materials. WCPOS provides several ways to work with variable products efficiently. | |
| Variable products in WooCommerce are products that have multiple options, such as different sizes, colours, or materials. |
🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/pos/product-panel/variations.mdx` at line 7,
Change the US spelling "colors" to British English "colours" in the sentence
that reads "Variable products in WooCommerce are products that have multiple
options, such as different sizes, colors, or materials." so it becomes
"...different sizes, colours, or materials."; update that exact string in the
document where it appears (the sentence starting "Variable products in
WooCommerce...") to align with the PR's UK-English standard.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx`:
- Around line 9-59: Translate the English content under the headings "Where to
Find Settings", "WordPress Admin Settings", "POS Store Settings", and "Display
Settings (Per Screen)" into Spanish in the i18n file; update all strings
including list items, locations (e.g., "WP Admin > POS > Settings", "User menu
(top-right) → Settings, or Ctrl + Shift + S"), screen references and the linked
screen names (POS Product Panel, Cart Panel, Products Screen, Orders Screen,
Customers Screen, Reports Screen) so the entire block is in Spanish and
preserves the same links and punctuation.
- Around line 26-59: Replace absolute root-prefixed links in this document with
relative links to preserve locale/version routing: change "/settings/wp-admin"
to a relative path from this doc (e.g., "../settings/wp-admin"),
"/settings/store" to a relative path (e.g., "../settings/store"), and all POS
screen anchors like "/pos/product-panel#display-settings",
"/pos/cart#display-settings", "/products#display-settings",
"/orders#display-settings", "/customers#display-settings", and
"/reports#display-settings" to appropriate relative counterparts (e.g.,
"../pos/product-panel#display-settings" or "./product-panel#display-settings" as
appropriate) so the links keep the current locale/version context.
In `@versioned_docs/version-1.x/settings/index.mdx`:
- Around line 26-40: Update the absolute links in this doc to relative versioned
routes so Docusaurus preserves version context: replace the link target for
"[WordPress Admin Settings](/settings/wp-admin)" with a relative path (e.g.,
"../wp-admin" or appropriate relative path from
versioned_docs/version-1.x/settings) and similarly change "[Store
Settings](/settings/store)" to a relative path (e.g., "./store" or "../store" as
appropriate); ensure both link markdown instances are updated so they resolve
through the versioned docs router rather than absolute root paths.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxversioned_docs/version-1.x/reference/architecture.mdxversioned_docs/version-1.x/settings/index.mdxversioned_docs/version-1.x/settings/store/index.mdxversioned_docs/version-1.x/support/troubleshooting/critical-error.mdxversioned_docs/version-1.x/support/troubleshooting/response-error.mdx
🚧 Files skipped from review as they are similar to previous changes (3)
- i18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
- i18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
- versioned_docs/version-1.x/reference/architecture.mdx
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-01-15T15:14:06.174Z
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docusaurus.config.js : Docusaurus configuration should be maintained in docusaurus.config.js
Applied to files:
versioned_docs/version-1.x/settings/store/index.mdxi18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdxi18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
🪛 LanguageTool
versioned_docs/version-1.x/support/troubleshooting/response-error.mdx
[style] ~20-~20: Consider using a different verb to strengthen your wording.
Context: ...issues and unexpected behaviour. Please make sure you have the [minimum requirements](/ge...
(MAKE_SURE_ENSURE)
🔇 Additional comments (8)
i18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx (3)
9-9: Previous review feedback addressed.The introduction now correctly states "three types" matching the three sections documented below.
13-59: Well-structured settings taxonomy.The three-section organization is clear and consistent:
- Each section follows the same pattern (location → controls → reference link)
- The per-screen documentation links in section 3 provide comprehensive navigation
- Content aligns with the PR's goal of restructuring docs around screen-based navigation
26-26: Absolute paths are correct for this Docusaurus configuration.Versioned i18n docs use the same absolute path pattern as English versioned docs (
/settings/wp-admin,/settings/store, etc.), and both are maintained consistently. WithrouteBasePath: '/',lastVersion: '1.x', andincludeCurrentVersion: falsein the Docusaurus configuration, absolute paths correctly resolve within the version context. No evidence supports that these links cause routing issues.Likely an incorrect or invalid review comment.
versioned_docs/version-1.x/settings/store/index.mdx (1)
1-32: LGTM!The file is well-structured. The relative links in the table (
./general,./tax, etc.) correctly maintain versioned docs routing, addressing the previous review feedback.versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx (2)
13-24: Image captions and example callouts read clearly.The captions are concise and help users understand what each screenshot represents.
27-45: The new “Steps to Find the Error” and help sections improve scanability.Clear headings and explicit support paths make the flow easier to follow.
versioned_docs/version-1.x/support/troubleshooting/response-error.mdx (2)
55-64: Getting Help + Pro Users sections are clear and actionable.Nice addition to guide users to the right support channel.
20-54: No action required. The absolute links/getting-started/installationand/support/logsare correctly routed through Docusaurus's versioning system and will resolve to version-1.x pages as expected. WithlastVersion: '1.x'androuteBasePath: '/', Docusaurus transparently scopes links to the active version context without requiring relative paths or version prefixes.Likely an incorrect or invalid review comment.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| WCPOS has three types of settings organised by where they're configured. | ||
|
|
||
| - A PHP WordPress Plugin. | ||
| - A cross-platform React Native Application. | ||
| ## Where to Find Settings | ||
|
|
||
| To avoid confusion, this guide clarifies where and how to access and configure each type of setting. | ||
| ### 1. WordPress Admin Settings | ||
|
|
||
| ## [Settings in the WordPress Admin](/settings/wp-admin) | ||
| Backend settings configured in your WordPress dashboard: | ||
|
|
||
| These settings configure the backend functionality of the POS application, including PHP and WooCommerce configurations. | ||
| You can access them by navigating to: `WP Admin > POS > Settings` | ||
| **Location:** `WP Admin > POS > Settings` | ||
|
|
||
| Key configurations include: | ||
| These control: | ||
| - Default cart customer for all cashiers | ||
| - Product barcode field configuration | ||
| - Order email settings | ||
| - User role permissions (who can access POS) | ||
| - Payment gateway availability | ||
|
|
||
| - Default cart customer for all cashiers. | ||
| - Product barcode field. | ||
| - Order email settings. | ||
| - User role permissions. | ||
| See [WordPress Admin Settings](/settings/wp-admin) for details. | ||
|
|
||
| ## [Settings in the POS Application](/settings/pos) | ||
| ### 2. POS Store Settings | ||
|
|
||
| The POS application has multiple layers of settings: | ||
| App-wide settings configured within the POS application: | ||
|
|
||
| ### [Store Settings](/settings/pos/store) | ||
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | ||
|
|
||
| These settings are used to configure the overall behaviour and preferences of the React Native application. They are accessible via: | ||
| These control: | ||
| - Tax calculation options | ||
| - Barcode scanner configuration | ||
| - Keyboard shortcuts | ||
| - Theme/appearance | ||
|
|
||
| The User Menu (top-right corner dropdown) or by using the `Ctrl + Shift + S` hotkey. | ||
| See [Store Settings](/settings/store) for details. | ||
|
|
||
| Examples of main store settings: | ||
| ### 3. Display Settings (Per Screen) | ||
|
|
||
| - Language & Currency. | ||
| - Barcode scanner settings. | ||
| Each screen in the POS has its own display settings for customizing the data table: | ||
|
|
||
| ### [Section Settings](/settings/pos/section) | ||
| **Location:** Click the sliders icon (⚙️) on any screen | ||
|
|
||
| Each data table in the POS application has its own configurable settings, accessible within the respective table. These settings allow for: | ||
| These control: | ||
| - Which columns are visible | ||
| - Column display options | ||
| - Screen-specific features | ||
|
|
||
| - Hiding or showing columns. | ||
| - Adjusting display options. | ||
| - Customising features specific to that data table. | ||
|
|
||
| By separating settings into these categories, you can easily locate and adjust configurations based on your requirements. | ||
| Display settings are documented within each screen's documentation: | ||
| - [POS Product Panel](/pos/product-panel#display-settings) | ||
| - [Cart Panel](/pos/cart#display-settings) | ||
| - [Products Screen](/products#display-settings) | ||
| - [Orders Screen](/orders#display-settings) | ||
| - [Customers Screen](/customers#display-settings) | ||
| - [Reports Screen](/reports#display-settings) |
There was a problem hiding this comment.
Spanish locale content is still English.
This file lives under i18n/es, but Lines 9–59 are English. Please translate this content to Spanish (or confirm intentional fallback).
🤖 Prompt for AI Agents
In `@i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx` around
lines 9 - 59, Translate the English content under the headings "Where to Find
Settings", "WordPress Admin Settings", "POS Store Settings", and "Display
Settings (Per Screen)" into Spanish in the i18n file; update all strings
including list items, locations (e.g., "WP Admin > POS > Settings", "User menu
(top-right) → Settings, or Ctrl + Shift + S"), screen references and the linked
screen names (POS Product Panel, Cart Panel, Products Screen, Orders Screen,
Customers Screen, Reports Screen) so the entire block is in Spanish and
preserves the same links and punctuation.
| See [WordPress Admin Settings](/settings/wp-admin) for details. | ||
|
|
||
| ## [Settings in the POS Application](/settings/pos) | ||
| ### 2. POS Store Settings | ||
|
|
||
| The POS application has multiple layers of settings: | ||
| App-wide settings configured within the POS application: | ||
|
|
||
| ### [Store Settings](/settings/pos/store) | ||
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | ||
|
|
||
| These settings are used to configure the overall behaviour and preferences of the React Native application. They are accessible via: | ||
| These control: | ||
| - Tax calculation options | ||
| - Barcode scanner configuration | ||
| - Keyboard shortcuts | ||
| - Theme/appearance | ||
|
|
||
| The User Menu (top-right corner dropdown) or by using the `Ctrl + Shift + S` hotkey. | ||
| See [Store Settings](/settings/store) for details. | ||
|
|
||
| Examples of main store settings: | ||
| ### 3. Display Settings (Per Screen) | ||
|
|
||
| - Language & Currency. | ||
| - Barcode scanner settings. | ||
| Each screen in the POS has its own display settings for customizing the data table: | ||
|
|
||
| ### [Section Settings](/settings/pos/section) | ||
| **Location:** Click the sliders icon (⚙️) on any screen | ||
|
|
||
| Each data table in the POS application has its own configurable settings, accessible within the respective table. These settings allow for: | ||
| These control: | ||
| - Which columns are visible | ||
| - Column display options | ||
| - Screen-specific features | ||
|
|
||
| - Hiding or showing columns. | ||
| - Adjusting display options. | ||
| - Customising features specific to that data table. | ||
|
|
||
| By separating settings into these categories, you can easily locate and adjust configurations based on your requirements. | ||
| Display settings are documented within each screen's documentation: | ||
| - [POS Product Panel](/pos/product-panel#display-settings) | ||
| - [Cart Panel](/pos/cart#display-settings) | ||
| - [Products Screen](/products#display-settings) | ||
| - [Orders Screen](/orders#display-settings) | ||
| - [Customers Screen](/customers#display-settings) | ||
| - [Reports Screen](/reports#display-settings) |
There was a problem hiding this comment.
Use relative links to preserve locale/version routing.
Absolute paths (Lines 26, 40, 54–59) can bypass the current locale/version and send users to the default route. Prefer relative links from this doc.
🧭 Suggested link adjustments
-See [WordPress Admin Settings](/settings/wp-admin) for details.
+See [WordPress Admin Settings](./wp-admin) for details.
-See [Store Settings](/settings/store) for details.
+See [Store Settings](./store) for details.
-- [POS Product Panel](/pos/product-panel#display-settings)
-- [Cart Panel](/pos/cart#display-settings)
-- [Products Screen](/products#display-settings)
-- [Orders Screen](/orders#display-settings)
-- [Customers Screen](/customers#display-settings)
-- [Reports Screen](/reports#display-settings)
+- [POS Product Panel](../pos/product-panel#display-settings)
+- [Cart Panel](../pos/cart#display-settings)
+- [Products Screen](../products#display-settings)
+- [Orders Screen](../orders#display-settings)
+- [Customers Screen](../customers#display-settings)
+- [Reports Screen](../reports#display-settings)📝 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.
| See [WordPress Admin Settings](/settings/wp-admin) for details. | |
| ## [Settings in the POS Application](/settings/pos) | |
| ### 2. POS Store Settings | |
| The POS application has multiple layers of settings: | |
| App-wide settings configured within the POS application: | |
| ### [Store Settings](/settings/pos/store) | |
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | |
| These settings are used to configure the overall behaviour and preferences of the React Native application. They are accessible via: | |
| These control: | |
| - Tax calculation options | |
| - Barcode scanner configuration | |
| - Keyboard shortcuts | |
| - Theme/appearance | |
| The User Menu (top-right corner dropdown) or by using the `Ctrl + Shift + S` hotkey. | |
| See [Store Settings](/settings/store) for details. | |
| Examples of main store settings: | |
| ### 3. Display Settings (Per Screen) | |
| - Language & Currency. | |
| - Barcode scanner settings. | |
| Each screen in the POS has its own display settings for customizing the data table: | |
| ### [Section Settings](/settings/pos/section) | |
| **Location:** Click the sliders icon (⚙️) on any screen | |
| Each data table in the POS application has its own configurable settings, accessible within the respective table. These settings allow for: | |
| These control: | |
| - Which columns are visible | |
| - Column display options | |
| - Screen-specific features | |
| - Hiding or showing columns. | |
| - Adjusting display options. | |
| - Customising features specific to that data table. | |
| By separating settings into these categories, you can easily locate and adjust configurations based on your requirements. | |
| Display settings are documented within each screen's documentation: | |
| - [POS Product Panel](/pos/product-panel#display-settings) | |
| - [Cart Panel](/pos/cart#display-settings) | |
| - [Products Screen](/products#display-settings) | |
| - [Orders Screen](/orders#display-settings) | |
| - [Customers Screen](/customers#display-settings) | |
| - [Reports Screen](/reports#display-settings) | |
| See [WordPress Admin Settings](./wp-admin) for details. | |
| ### 2. POS Store Settings | |
| App-wide settings configured within the POS application: | |
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | |
| These control: | |
| - Tax calculation options | |
| - Barcode scanner configuration | |
| - Keyboard shortcuts | |
| - Theme/appearance | |
| See [Store Settings](./store) for details. | |
| ### 3. Display Settings (Per Screen) | |
| Each screen in the POS has its own display settings for customizing the data table: | |
| **Location:** Click the sliders icon (⚙️) on any screen | |
| These control: | |
| - Which columns are visible | |
| - Column display options | |
| - Screen-specific features | |
| Display settings are documented within each screen's documentation: | |
| - [POS Product Panel](../pos/product-panel#display-settings) | |
| - [Cart Panel](../pos/cart#display-settings) | |
| - [Products Screen](../products#display-settings) | |
| - [Orders Screen](../orders#display-settings) | |
| - [Customers Screen](../customers#display-settings) | |
| - [Reports Screen](../reports#display-settings) |
🤖 Prompt for AI Agents
In `@i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx` around
lines 26 - 59, Replace absolute root-prefixed links in this document with
relative links to preserve locale/version routing: change "/settings/wp-admin"
to a relative path from this doc (e.g., "../settings/wp-admin"),
"/settings/store" to a relative path (e.g., "../settings/store"), and all POS
screen anchors like "/pos/product-panel#display-settings",
"/pos/cart#display-settings", "/products#display-settings",
"/orders#display-settings", "/customers#display-settings", and
"/reports#display-settings" to appropriate relative counterparts (e.g.,
"../pos/product-panel#display-settings" or "./product-panel#display-settings" as
appropriate) so the links keep the current locale/version context.
| See [WordPress Admin Settings](/settings/wp-admin) for details. | ||
|
|
||
| ## [Settings in the POS Application](/settings/pos) | ||
| ### 2. POS Store Settings | ||
|
|
||
| The POS application has multiple layers of settings: | ||
| App-wide settings configured within the POS application: | ||
|
|
||
| ### [Store Settings](/settings/pos/store) | ||
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | ||
|
|
||
| These settings are used to configure the overall behaviour and preferences of the React Native application. They are accessible via: | ||
| These control: | ||
| - Tax calculation options | ||
| - Barcode scanner configuration | ||
| - Keyboard shortcuts | ||
| - Theme/appearance | ||
|
|
||
| The User Menu (top-right corner dropdown) or by using the `Ctrl + Shift + S` hotkey. | ||
| See [Store Settings](/settings/store) for details. |
There was a problem hiding this comment.
Use relative links to maintain version context.
Same issue as was fixed in settings/store/index.mdx: absolute paths bypass Docusaurus versioned docs routing. Within the settings section, these should be relative links.
🔧 Suggested fix
-See [WordPress Admin Settings](/settings/wp-admin) for details.
+See [WordPress Admin Settings](./wp-admin) for details.-See [Store Settings](/settings/store) for details.
+See [Store Settings](./store) for details.📝 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.
| See [WordPress Admin Settings](/settings/wp-admin) for details. | |
| ## [Settings in the POS Application](/settings/pos) | |
| ### 2. POS Store Settings | |
| The POS application has multiple layers of settings: | |
| App-wide settings configured within the POS application: | |
| ### [Store Settings](/settings/pos/store) | |
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | |
| These settings are used to configure the overall behaviour and preferences of the React Native application. They are accessible via: | |
| These control: | |
| - Tax calculation options | |
| - Barcode scanner configuration | |
| - Keyboard shortcuts | |
| - Theme/appearance | |
| The User Menu (top-right corner dropdown) or by using the `Ctrl + Shift + S` hotkey. | |
| See [Store Settings](/settings/store) for details. | |
| See [WordPress Admin Settings](./wp-admin) for details. | |
| ### 2. POS Store Settings | |
| App-wide settings configured within the POS application: | |
| **Location:** User menu (top-right) → Settings, or `Ctrl + Shift + S` | |
| These control: | |
| - Tax calculation options | |
| - Barcode scanner configuration | |
| - Keyboard shortcuts | |
| - Theme/appearance | |
| See [Store Settings](./store) for details. |
🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/settings/index.mdx` around lines 26 - 40, Update
the absolute links in this doc to relative versioned routes so Docusaurus
preserves version context: replace the link target for "[WordPress Admin
Settings](/settings/wp-admin)" with a relative path (e.g., "../wp-admin" or
appropriate relative path from versioned_docs/version-1.x/settings) and
similarly change "[Store Settings](/settings/store)" to a relative path (e.g.,
"./store" or "../store" as appropriate); ensure both link markdown instances are
updated so they resolve through the versioned docs router rather than absolute
root paths.
- Clarify that products sync in batches (~50 at a time), not all at once - Update offline capability claims: browsing cached data works, but completing orders and creating customers requires connectivity
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@versioned_docs/version-1.x/error-codes/API03007.mdx`:
- Around line 57-63: Update the "## Offline Behaviour" section to explicitly
state that customer creation is not available offline: add a bullet saying new
customer creation requires connectivity and cannot be completed while the POS is
offline (suggested reference: the "## Offline Behaviour" heading and the
existing bullets about pending requests and cached browsing). Ensure the new
bullet mirrors the existing tone and placement with other user-facing
limitations so readers aren’t misled.
In `@versioned_docs/version-1.x/getting-started/index.mdx`:
- Line 56: Update the "Offline browsing" bullet text to avoid implying full
offline customer creation; change the copy that currently reads "**Offline
browsing** - Search products and customers without internet (completing orders
requires connectivity)" to accurately state that product and customer browsing
is available offline but actions like creating customers and completing orders
require connectivity, e.g. mention "browse products and customers offline;
creating customers and completing orders require internet." Ensure you update
the string that starts with "Offline browsing" in the document.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
versioned_docs/version-1.x/error-codes/API01007.mdxversioned_docs/version-1.x/error-codes/API03007.mdxversioned_docs/version-1.x/error-codes/PY02002.mdxversioned_docs/version-1.x/getting-started/index.mdxversioned_docs/version-1.x/pos/cart/open-orders.mdxversioned_docs/version-1.x/pos/index.mdxversioned_docs/version-1.x/reference/architecture.mdx
💤 Files with no reviewable changes (1)
- versioned_docs/version-1.x/error-codes/PY02002.mdx
✅ Files skipped from review due to trivial changes (2)
- versioned_docs/version-1.x/pos/index.mdx
- versioned_docs/version-1.x/reference/architecture.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
- versioned_docs/version-1.x/pos/cart/open-orders.mdx
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: wcpos/docs PR: 0
File: .cursor/rules/docs.mdc:0-0
Timestamp: 2026-01-15T15:14:06.174Z
Learning: Applies to docs/**/*.{md,mdx} : Documentation pages should use MDX format (Markdown + JSX) in the docs/ directory
🔇 Additional comments (3)
versioned_docs/version-1.x/error-codes/API01007.mdx (2)
55-58: LGTM!The expanded offline capabilities list provides clearer guidance to users about what actions are available without connectivity. The parallel structure ("Browse and search locally cached...") maintains consistency across bullets.
60-64: LGTM!The explicit "Requires connectivity" section clearly distinguishes online-required actions from offline capabilities. This improves user experience by setting accurate expectations about what operations will fail without a network connection.
versioned_docs/version-1.x/getting-started/index.mdx (1)
1-80: Well-structured introduction page.The documentation is clear, well-organized, and follows proper MDX format. The quick start guide provides a good onboarding flow, and the section structure logically progresses from overview to getting started to features. Based on learnings, this correctly uses MDX format in the docs/ directory.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| ## Offline Behaviour | ||
|
|
||
| When the queue fills due to offline conditions: | ||
| - The POS will hold requests until back online | ||
| - Orders are saved locally | ||
| - They'll sync when connectivity returns | ||
| - The POS will hold pending requests until back online | ||
| - You can still browse cached products and customers | ||
| - You can start new orders and add items to the cart | ||
| - Completing orders requires connectivity to be restored |
There was a problem hiding this comment.
Mention customer-creation limitation for offline mode.
Offline guidance in the PR notes that creating customers requires connectivity; this section doesn’t mention it, which could mislead readers. Consider adding a bullet for consistency.
✏️ Suggested wording
## Offline Behaviour
When the queue fills due to offline conditions:
- The POS will hold pending requests until back online
- You can still browse cached products and customers
- You can start new orders and add items to the cart
- Completing orders requires connectivity to be restored
+ - Creating customers requires connectivity to be restored📝 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.
| ## Offline Behaviour | |
| When the queue fills due to offline conditions: | |
| - The POS will hold requests until back online | |
| - Orders are saved locally | |
| - They'll sync when connectivity returns | |
| - The POS will hold pending requests until back online | |
| - You can still browse cached products and customers | |
| - You can start new orders and add items to the cart | |
| - Completing orders requires connectivity to be restored | |
| ## Offline Behaviour | |
| When the queue fills due to offline conditions: | |
| - The POS will hold pending requests until back online | |
| - You can still browse cached products and customers | |
| - You can start new orders and add items to the cart | |
| - Completing orders requires connectivity to be restored | |
| - Creating customers requires connectivity to be restored |
🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/error-codes/API03007.mdx` around lines 57 - 63,
Update the "## Offline Behaviour" section to explicitly state that customer
creation is not available offline: add a bullet saying new customer creation
requires connectivity and cannot be completed while the POS is offline
(suggested reference: the "## Offline Behaviour" heading and the existing
bullets about pending requests and cached browsing). Ensure the new bullet
mirrors the existing tone and placement with other user-facing limitations so
readers aren’t misled.
| ## Key Features | ||
|
|
||
| - **Fast local search** - Products are stored locally for instant results | ||
| - **Offline browsing** - Search products and customers without internet (completing orders requires connectivity) |
There was a problem hiding this comment.
Incomplete offline capability claim.
According to the PR objectives, creating customers also requires connectivity. Consider updating to reflect this:
-- **Offline browsing** - Search products and customers without internet (completing orders requires connectivity)
+- **Offline browsing** - Search products and customers without internet (completing orders and creating customers require connectivity)📝 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.
| - **Offline browsing** - Search products and customers without internet (completing orders requires connectivity) | |
| - **Offline browsing** - Search products and customers without internet (completing orders and creating customers require connectivity) |
🤖 Prompt for AI Agents
In `@versioned_docs/version-1.x/getting-started/index.mdx` at line 56, Update the
"Offline browsing" bullet text to avoid implying full offline customer creation;
change the copy that currently reads "**Offline browsing** - Search products and
customers without internet (completing orders requires connectivity)" to
accurately state that product and customer browsing is available offline but
actions like creating customers and completing orders require connectivity, e.g.
mention "browse products and customers offline; creating customers and
completing orders require internet." Ensure you update the string that starts
with "Offline browsing" in the document.
Summary
Major reorganization of the documentation structure to be more intuitive and aligned with the actual POS application screens.
@docusaurus/plugin-client-redirectsNew Structure
Test plan
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.