Skip to content

refactor: restructure documentation for screen-based navigation#62

Merged
kilbot merged 5 commits into
mainfrom
refactor/docs-restructure
Jan 15, 2026
Merged

refactor: restructure documentation for screen-based navigation#62
kilbot merged 5 commits into
mainfrom
refactor/docs-restructure

Conversation

@kilbot
Copy link
Copy Markdown
Contributor

@kilbot kilbot commented Jan 15, 2026

Summary

Major reorganization of the documentation structure to be more intuitive and aligned with the actual POS application screens.

  • Screen-based navigation: Docs now follow the app's navigation (POS → Products → Orders → Customers → Reports)
  • Settings integrated in context: Display settings moved from separate section into relevant screen documentation
  • New pages: Connect, Variations, Line Items, Open Orders, Receipts, Logs, Architecture
  • Redirects: All old URLs redirect to new locations via @docusaurus/plugin-client-redirects

New Structure

getting-started/    # Introduction + Quick Start
pos/               # Main selling interface
  product-panel/   # Left panel (search, filtering, barcodes)
  cart/            # Right panel (line items, open orders)
  checkout/        # Payment and receipts
products/          # Pro: Inventory management
orders/            # Pro: Order history
customers/         # Pro: Customer management
reports/           # Pro: Sales reports
settings/          # Store settings + WordPress admin
support/           # Discord, Logs, Troubleshooting
reference/         # Architecture docs

Test plan

  • Review the new structure at the deployed preview
  • Verify redirects work for old URLs
  • Check that Pro badges appear correctly on Pro-only sections
  • Verify sidebar navigation makes sense

Summary by CodeRabbit

  • Documentation
    • Major restructure: many new, rewritten, and removed docs (Getting Started, POS screens, Orders, Products, Customers, Payments, Reports, Support, Logs, Settings, etc.).
  • Navigation
    • Navbar and sidebar reorganized; site redirects added to preserve old URLs.
  • Internationalization
    • Locale list expanded with multiple languages; Arabic configured as RTL.
  • Chores
    • Added automated translation tooling, a translation workflow, and related scripts; added a translation SDK dependency.
  • Style
    • ESLint rule updated to allow underscore-prefixed unused variables.

✏️ Tip: You can customize this high-level summary in your review settings.

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
@vercel
Copy link
Copy Markdown

vercel Bot commented Jan 15, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
docs Ready Ready Preview, Comment Jan 15, 2026 10:25pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 15, 2026

📝 Walkthrough

Walkthrough

This 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

Cohort / File(s) Summary
Site config & redirects
docusaurus.config.js, package.json
Navbar docId changed to getting-started/index; i18n locales expanded and RTL ar added; @docusaurus/plugin-client-redirects plugin added with many redirects; dependencies and translate script added.
Translation tooling & CI
scripts/translate-with-claude.js, scripts/translation-context.md, .github/workflows/translate-pr.yml
New Node translation script (Anthropic SDK) and translation-context; GH Actions workflow to run translations on /translate PR comment, commit translations back to PR.
i18n localized docs
i18n/*/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx (es, fr, hi-IN, zh-CN)
Localized Settings docs reorganised to three-part structure (WordPress Admin, POS Store, Display per-screen) and wording/links updated.
Major docs additions (Getting Started / POS / Screens / Reference / Support / Payments / Reports / Products / Orders / Customers)
versioned_docs/version-1.x/getting-started/*, versioned_docs/version-1.x/pos/**, versioned_docs/version-1.x/products/*, versioned_docs/version-1.x/orders/*, versioned_docs/version-1.x/customers/*, versioned_docs/version-1.x/support/*, versioned_docs/version-1.x/reference/architecture.mdx, versioned_docs/version-1.x/payment/*, versioned_docs/version-1.x/reports/index.mdx
Many new MDX pages added describing Getting Started, POS screens (Product Panel, Cart, Checkout, Receipts), Products management, Orders, Customers, Support & Logs, Reports, Payments, and architecture reference.
Settings restructure (flattened to store/*)
versioned_docs/version-1.x/settings/index.mdx, versioned_docs/version-1.x/settings/pos/** (removed), versioned_docs/version-1.x/settings/store/* (added)
Removed legacy settings/pos/... pages and added a flattened settings/store/... subtree (general, tax, barcode, hotkeys, theme); many legacy settings pages deleted or consolidated.
Removed / renamed versioned docs
versioned_docs/version-1.x/introduction.mdx, versioned_docs/version-1.x/cart/index.mdx, versioned_docs/version-1.x/installation/woocommerce-pos-pro.mdx, many versioned_docs/version-1.x/settings/pos/**
Deleted outdated intro, cart overview, legacy Pro install doc, and numerous POS settings/section docs (content moved or consolidated).
Sidebar & navigation
versioned_sidebars/version-1.x-sidebars.json
Major sidebar reorganization: Getting Started, explicit POS category, Settings → Store, new Support/Payment/Reports/Reference categories, many generated-index entries replaced with explicit doc links.
Docs editorial & localization
many versioned_docs/version-1.x/** files (error-codes, templates, payment gateways, etc.), .cursor/rules/docs.mdc
Broad editorial edits switching to UK English spellings, small link/path fixes, and added UK-English writing guidelines.
Linting & config
eslint.config.mjs
Added no-unused-vars rule to ignore identifiers/args prefixed with _.
Versioned deletions & adds (granular POS/Cart files)
versioned_docs/version-1.x/pos/cart/**, versioned_docs/version-1.x/pos/product-panel/**, versioned_docs/version-1.x/pos/checkout/**
New and updated POS-specific docs (Cart Panel, Line Items, Open Orders, Checkout, Receipts, Product Panel pages).

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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Poem

🐰 I hopped through files both old and new,

Redirects set and guides made true,
Store settings found a tidy place,
Translations queued to join the race,
A rabbit cheers the docs' fresh view! 📚✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'refactor: restructure documentation for screen-based navigation' accurately reflects the primary change: a comprehensive documentation reorganization from a feature-based to a screen-based navigation structure.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%.

✏️ 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.

❤️ Share

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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/sync may not resolve within the version context (e.g., /version-1.x/). Since the target file exists at versioned_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: Use className instead of class in JSX/MDX.

In MDX files processed by React, the HTML class attribute should be className to 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 Image component 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

📥 Commits

Reviewing files that changed from the base of the PR and between a34cbac and 541a62a.

📒 Files selected for processing (58)
  • docusaurus.config.js
  • i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • package.json
  • versioned_docs/version-1.x/cart/index.mdx
  • versioned_docs/version-1.x/customers/index.mdx
  • versioned_docs/version-1.x/error-codes/index.mdx
  • versioned_docs/version-1.x/getting-started/connect.mdx
  • versioned_docs/version-1.x/getting-started/index.mdx
  • versioned_docs/version-1.x/getting-started/installation.mdx
  • versioned_docs/version-1.x/getting-started/previous-versions.mdx
  • versioned_docs/version-1.x/getting-started/pro-license.mdx
  • versioned_docs/version-1.x/installation/woocommerce-pos-pro.mdx
  • versioned_docs/version-1.x/introduction.mdx
  • versioned_docs/version-1.x/orders/index.mdx
  • versioned_docs/version-1.x/payment/index.mdx
  • versioned_docs/version-1.x/pos/cart/index.mdx
  • versioned_docs/version-1.x/pos/cart/line-items.mdx
  • versioned_docs/version-1.x/pos/cart/open-orders.mdx
  • versioned_docs/version-1.x/pos/cart/order-actions.mdx
  • versioned_docs/version-1.x/pos/checkout/index.mdx
  • versioned_docs/version-1.x/pos/checkout/receipts.mdx
  • versioned_docs/version-1.x/pos/index.mdx
  • versioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdx
  • versioned_docs/version-1.x/pos/product-panel/index.mdx
  • versioned_docs/version-1.x/pos/product-panel/search-filtering.mdx
  • versioned_docs/version-1.x/pos/product-panel/variations.mdx
  • versioned_docs/version-1.x/products/index.mdx
  • versioned_docs/version-1.x/products/sync.mdx
  • versioned_docs/version-1.x/reference/architecture.mdx
  • versioned_docs/version-1.x/reports/index.mdx
  • versioned_docs/version-1.x/settings/index.mdx
  • versioned_docs/version-1.x/settings/pos/index.mdx
  • versioned_docs/version-1.x/settings/pos/section/customers-settings.mdx
  • versioned_docs/version-1.x/settings/pos/section/index.mdx
  • versioned_docs/version-1.x/settings/pos/section/orders-settings.mdx
  • versioned_docs/version-1.x/settings/pos/section/pos-cart-settings.mdx
  • versioned_docs/version-1.x/settings/pos/section/pos-products-settings.mdx
  • versioned_docs/version-1.x/settings/pos/section/products-settings.mdx
  • versioned_docs/version-1.x/settings/pos/section/reports-settings.mdx
  • versioned_docs/version-1.x/settings/pos/store/barcode-settings.mdx
  • versioned_docs/version-1.x/settings/pos/store/hotkey-settings.mdx
  • versioned_docs/version-1.x/settings/pos/store/index.mdx
  • versioned_docs/version-1.x/settings/pos/store/tax-settings.mdx
  • versioned_docs/version-1.x/settings/pos/store/theme-settings.mdx
  • versioned_docs/version-1.x/settings/store/barcode.mdx
  • versioned_docs/version-1.x/settings/store/general.mdx
  • versioned_docs/version-1.x/settings/store/hotkeys.mdx
  • versioned_docs/version-1.x/settings/store/index.mdx
  • versioned_docs/version-1.x/settings/store/tax.mdx
  • versioned_docs/version-1.x/settings/store/theme.mdx
  • versioned_docs/version-1.x/support/index.mdx
  • versioned_docs/version-1.x/support/logs.mdx
  • versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx
  • versioned_docs/version-1.x/support/troubleshooting/response-error.mdx
  • versioned_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.json
  • docusaurus.config.js
  • i18n/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-redirects dependency 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-templates is correct. The receipt-templates documentation exists at versioned_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-error is 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:

  • /reports points to versioned_docs/version-1.x/reports/index.mdx
  • /pos/checkout/receipts points to versioned_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 file versioned_docs/version-1.x/products/sync.mdx is present with proper content and frontmatter, and the URL path /products/sync will 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-open is the accurate WooCommerce POS status used consistently across the v1.x documentation (see open-orders.mdx and index.mdx). The absolute path /pos/cart/open-orders also follows the standard link format established throughout v1.x docs, where all internal links use absolute paths like /pos/checkout and /pos/product-panel rather 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/architecture uses 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.mdx links 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-settings which 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 requires Shift to type (it's Shift + / on most keyboard layouts). This would effectively require pressing Ctrl + Shift + / where Shift is already held. Please verify this is the intended shortcut and not a documentation error (e.g., should it be Ctrl + Shift + / or Ctrl + 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-keys exists as a heading in /pos/product-panel/index.mdx
  • #display-settings exists as a heading in /pos/cart/index.mdx

The 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 /payment link is valid and correctly points to the Payment Methods documentation at versioned_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-scanning file exists at versioned_docs/version-1.x/pos/product-panel/barcode-scanning.mdx and 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 of class in 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), where class is the standard attribute. The project's ESLint configuration explicitly excludes React/core rules from .mdx files, 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 of class attributes 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 any className usage, 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 uses class consistently across all MDX files (10+ files), and Docusaurus 3.9.2 with @mdx-js/react handles both class and className without warnings in MDX context. No ESLint rules or build configuration enforces className, and there are no reported build issues from using class in 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/checkout are appropriately absolute because the 1.x version is configured as lastVersion and served at the root path /. This is the intended behavior in Docusaurus with the current setup where includeCurrentVersion: 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.

Comment thread i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx Outdated
Comment thread i18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx Outdated
Comment thread i18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx Outdated
Comment thread i18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx Outdated
Comment thread versioned_docs/version-1.x/reference/architecture.mdx Outdated
sidebar_position: 1
---

import Image from "@theme/IdealImage";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n versioned_docs/version-1.x/reports/index.mdx | head -100

Repository: wcpos/docs

Length of output: 3378


🏁 Script executed:

rg "@theme/IdealImage" -A 5 versioned_docs/ | head -80

Repository: wcpos/docs

Length of output: 6517


🏁 Script executed:

rg "img=\"" versioned_docs/ -A 1 -B 1 | head -100

Repository: 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:

  • import thumbnail from './img.png';

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.

Comment on lines 11 to 18
<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>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 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 -20

Repository: 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"
fi

Repository: 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 -40

Repository: 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 -20

Repository: 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 -20

Repository: 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 -10

Repository: 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.

Suggested change
<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.

Comment thread versioned_docs/version-1.x/settings/store/index.mdx Outdated
Comment thread versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx Outdated
Comment thread versioned_docs/version-1.x/support/troubleshooting/response-error.mdx Outdated
- 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
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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: Add rel="noopener noreferrer" to the external link.

This security concern was previously flagged and remains unaddressed. The target="_blank" link should include rel="noopener noreferrer" to prevent tabnabbing.

versioned_docs/version-1.x/settings/store/general.mdx (1)

11-18: Use className instead of class for JSX attributes.

This issue was previously flagged. In MDX files that compile to JSX/React, className is the standard attribute name. Using class can 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/sdk to devDependencies.

This SDK is only used by the translation script during CI, not at runtime. Moving it to devDependencies would 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 /translate command.

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_KEY is missing, the client instantiation may throw or behave unexpectedly before reaching the validation in main().

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 translateContent to use getAnthropicClient() instead of anthropic directly.


97-111: The matter(content) call is unused and doesn't validate anything.

gray-matter parses content without throwing on missing frontmatter - it simply returns an empty data object. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 541a62a and 7546f14.

📒 Files selected for processing (35)
  • .cursor/rules/docs.mdc
  • .github/workflows/translate-pr.yml
  • docusaurus.config.js
  • eslint.config.mjs
  • package.json
  • scripts/translate-with-claude.js
  • scripts/translation-context.md
  • versioned_docs/version-1.x/customers/index.mdx
  • versioned_docs/version-1.x/error-codes/API02004.mdx
  • versioned_docs/version-1.x/error-codes/API03006.mdx
  • versioned_docs/version-1.x/error-codes/API03007.mdx
  • versioned_docs/version-1.x/error-codes/DB01002.mdx
  • versioned_docs/version-1.x/error-codes/SY01001.mdx
  • versioned_docs/version-1.x/getting-started/index.mdx
  • versioned_docs/version-1.x/orders/index.mdx
  • versioned_docs/version-1.x/payment/custom-gateways/email-invoice.mdx
  • versioned_docs/version-1.x/payment/custom-gateways/gateway-template.mdx
  • versioned_docs/version-1.x/payment/custom-gateways/web-checkout.mdx
  • versioned_docs/version-1.x/pos/cart/index.mdx
  • versioned_docs/version-1.x/pos/cart/line-items.mdx
  • versioned_docs/version-1.x/pos/cart/order-actions.mdx
  • versioned_docs/version-1.x/pos/checkout/receipts.mdx
  • versioned_docs/version-1.x/pos/index.mdx
  • versioned_docs/version-1.x/pos/product-panel/index.mdx
  • versioned_docs/version-1.x/pos/product-panel/variations.mdx
  • versioned_docs/version-1.x/products/index.mdx
  • versioned_docs/version-1.x/reports/index.mdx
  • versioned_docs/version-1.x/settings/store/general.mdx
  • versioned_docs/version-1.x/settings/store/hotkeys.mdx
  • versioned_docs/version-1.x/settings/store/index.mdx
  • versioned_docs/version-1.x/settings/store/theme.mdx
  • versioned_docs/version-1.x/support/logs.mdx
  • versioned_docs/version-1.x/support/troubleshooting/response-error.mdx
  • versioned_docs/version-1.x/templates/index.mdx
  • versioned_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.json
  • docusaurus.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 title for 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 standard class attribute, not className. The className prop is for JSX/React components (e.g., <Image />). The code correctly uses class= 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: Use className in MDX JSX to follow best practices.
JSX elements should use className rather than class for 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: Use className in MDX JSX to ensure classes apply.
JSX expects className; using class can 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-panel in 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 docId update to getting-started/index correctly 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-docs for the existing flow and translate for the new Claude-based translation.


21-21: LGTM!

The @docusaurus/plugin-client-redirects version 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: 0 is required for the git diff comparison, and GITHUB_TOKEN provides 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-status format 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 push could 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/ and i18n/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.

Comment on lines +77 to +91
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;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.

Comment on lines +124 to +132
// Validate JSON
try {
JSON.parse(translatedContent);
} catch (_error) {
console.error(`Warning: Translated JSON for ${filePath} may be malformed`);
}

return translatedContent;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

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.

Suggested change
// 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.

Comment on lines +225 to +236
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 });
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 7546f14 and 565a152.

📒 Files selected for processing (9)
  • i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/fr/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/hi-IN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/zh-CN/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • versioned_docs/version-1.x/reference/architecture.mdx
  • versioned_docs/version-1.x/settings/index.mdx
  • versioned_docs/version-1.x/settings/store/index.mdx
  • versioned_docs/version-1.x/support/troubleshooting/critical-error.mdx
  • versioned_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.mdx
  • i18n/es/docusaurus-plugin-content-docs/version-1.x/settings/index.mdx
  • i18n/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. With routeBasePath: '/', lastVersion: '1.x', and includeCurrentVersion: false in 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/installation and /support/logs are correctly routed through Docusaurus's versioning system and will resolve to version-1.x pages as expected. With lastVersion: '1.x' and routeBasePath: '/', 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.

Comment on lines +9 to +59
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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Comment on lines +26 to +59
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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.

Comment on lines +26 to +40
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.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 565a152 and ea762fa.

📒 Files selected for processing (7)
  • versioned_docs/version-1.x/error-codes/API01007.mdx
  • versioned_docs/version-1.x/error-codes/API03007.mdx
  • versioned_docs/version-1.x/error-codes/PY02002.mdx
  • versioned_docs/version-1.x/getting-started/index.mdx
  • versioned_docs/version-1.x/pos/cart/open-orders.mdx
  • versioned_docs/version-1.x/pos/index.mdx
  • versioned_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.

Comment on lines +57 to +63
## 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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
## 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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
- **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.

@kilbot kilbot merged commit f2a7497 into main Jan 15, 2026
3 checks passed
@kilbot kilbot deleted the refactor/docs-restructure branch January 16, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant