CultivaReviews Pro — Pre-Submission Compliance Report

Shopify App Store AI Self-Review  ·  Generado por CULTIVA IA  ·  13 Jun 2026

Marketing > Reviews & UGC Submission #1 Node.js · React · App Bridge 4
18
Likely Passing
6
Likely Failing
⚠️
7
Needs Review
ℹ️  Note: This agent reviewed the subset of requirements selected by Shopify as checkable against a local codebase without browser context. Additional requirements will be reviewed by Shopify upon submission to the Shopify App Store.

Requirements that are Likely Failing

6 issues
❌ Free trial period for paid apps 3.1.2
Why this matters

Shopify requires all paid apps to offer a minimum 3-day free trial via the Billing API so merchants can evaluate the app before being charged.

What was found

appSubscriptionCreate is called in server/billing.js but the trialDays parameter is absent. The field must be set to at least 3 before submission. Current mutation omits it entirely.

❌ Mandatory data deletion on uninstall 2.3.1
Why this matters

Apps must permanently delete all merchant and customer data when the app/uninstalled webhook fires, unless the merchant explicitly opts in to data retention.

What was found

The webhooks/uninstall.js handler only sets deletedAt = new Date() (soft-delete). No hard purge of Shop, Review, or Customer records is performed. This violates the data deletion requirement and would also put the app at GDPR risk.

❌ HMAC webhook verification 1.4.1
Why this matters

Every webhook endpoint must validate the X-Shopify-Hmac-SHA256 header to ensure requests originate from Shopify, protecting the app and merchants from spoofed events.

What was found

Endpoints /webhooks/orders and /webhooks/customers in server/routes/webhooks.js do not call shopify.webhooks.validate() or any equivalent HMAC check. Only /webhooks/uninstall includes validation.

❌ Cookie consent before non-essential cookies 4.2.3
Why this matters

Theme extensions that store non-essential data in cookies must use the Shopify Customer Privacy API (analytics.subscribe / consent) rather than setting cookies directly, respecting buyer consent preferences.

What was found

extensions/theme-reviews-widget/assets/reviews.js calls document.cookie = "cultivaReviews_session=..." directly without first checking Shopify.customerPrivacy.analyticsProcessingAllowed() or waiting for the consent event. This will block approval in markets with GDPR/CCPA enforcement.

❌ Content Security Policy headers 1.3.2
Why this matters

Embedded apps must set appropriate Content-Security-Policy headers, including frame-ancestors limiting embedding to Shopify Admin domains, to prevent clickjacking attacks.

What was found

server/middleware/security.js sets X-Frame-Options: DENY but does not set a Content-Security-Policy header. The Shopify CLI-generated boilerplate includes this via helmet; it appears the dependency was removed or the middleware was not wired up correctly.

❌ "Shopify Plus" claims require Partner Plus tier 5.1.4
Why this matters

Apps can only mention "Shopify Plus" in their listing if the developer is enrolled in the Shopify Plus Partner Program or the feature genuinely requires a Plus store.

What was found

The draft App Store listing (shopify.app.toml description field) includes "Optimized for Shopify Plus merchants". The codebase shows no Plus-exclusive API usage, and the Shopify Partner account (verified via partners.shopify.com config) is on the standard tier. This claim must be removed or justified.

⚠️

Requirements that Need Review

7 items
⚠️ GDPR mandatory webhooks all registered 2.3.2
Why this needs attention

Cannot fully verify that all three GDPR webhooks (customers/data_request, customers/redact, shop/redact) are registered and have live, accessible endpoints without running the app against a test store.

What was detected

All three handlers exist in server/routes/gdpr.js and are referenced in shopify.app.toml, but the endpoints return 200 with an empty body rather than executing the actual data operations. Confirm handlers perform real data actions before submission.

⚠️ Session token validation on every authenticated request 1.2.1
Why this needs attention

All server-side routes serving the embedded app must validate the Shopify session token on every request. Some routes may be using legacy cookie sessions.

What was detected

server/middleware/auth.js applies session token validation correctly, but 3 routes in server/routes/admin.js call shopify.auth.getSessionFromStorage() (cookie-based) as a fallback when no token header is present, instead of rejecting the request. This pattern may pass legacy stores but fail tokenized sessions.

⚠️ App must use App Bridge for navigation 1.1.3
Why this needs attention

In-app navigation within the embedded admin must use App Bridge's useNavigate hook or Redirect action, not window.location or standard <a href> full-page reloads.

What was detected

Most navigation uses useNavigate from App Bridge correctly. However, src/pages/Settings.jsx contains a window.location.href = "/plans" call in the upgrade CTA handler. Cannot confirm if this is ever reachable in embedded context — needs developer verification.

⚠️ Billing plan grandfathering on plan changes 3.1.5
Why this needs attention

When an app changes its pricing, existing merchants must not be charged the new price without explicit consent and adequate notice (at least 30 days).

What was detected

No plan migration logic found in server/billing.js. This is only relevant if pricing changes post-launch, but it's worth documenting the migration path before submission to satisfy the reviewer that there's a plan.

⚠️ Test coverage of checkout extensibility 6.2.1
Why this needs attention

Apps that modify the checkout experience must declare and document all Checkout UI Extension targets and verify they don't interfere with the Shopify checkout flow.

What was detected

The extension directory contains a checkout-ui folder with an incomplete shopify.extension.toml (missing target declaration). Cannot confirm whether this extension is intentionally included or a leftover from scaffolding.

⚠️ App listing screenshots show real store UI 5.2.2
Why this needs attention

Cannot verify App Store listing assets from the codebase alone. Screenshots must show real, functional UI (not mockups) and must not contain competitor logos or misleading claims.

What was detected

No listing assets found in the repo. Ensure screenshots in the Partner Dashboard are authentic screenshots and include both admin and storefront views of the app working in a real store.

⚠️ Privacy policy URL is live and accessible 5.1.2
Why this needs attention

The privacy policy URL declared in shopify.app.toml must be a live, publicly accessible page before submission.

What was detected

shopify.app.toml sets privacy_policy_url = "https://cultivasaasstudio.com/privacy" but an HTTP check of the URL returns a 404. The privacy policy page must be published before submission.

⏭️

Skipped Groups

4 groups
  • § 7 — POS UI Extensions — No pos-ui-extension detected in the extensions directory. Conditional signal not present.
  • § 8 — Customer Account Extensions — No customer-account-ui-extension found in extensions/. Conditional signal not present.
  • § 9 — Flow Connectors — No Shopify Flow triggers or actions declared in shopify.app.toml. Conditional signal not present.
  • § 10 — Storefront API Private Apps (Opt-in) — Opt-in group not requested. App uses public Storefront API tokens only.
  • 📚

    Resources