Changelog
v1.1.0 — Pre-Release Polish (August 2026)
✨ New Features
- Fraud flag blocks auto-approve — fraud-flagged returns now stay PENDING for manual review
- Close Return button — close Shopify return directly from the app for REFUNDED returns
- Shopify return lookup fallback — when
shopifyReturnIdis missing, queries Shopify by orderId - Cancel/Deny for approved returns — cancel APPROVED/SHIPPED returns with one click (syncs to Shopify)
- Token action fix — single token works for both Approve and Deny
- Return Portal UI — Polaris Select dropdown for reason (instead of raw HTML), item layout with
InlineStack, live total updates via React state - Email sender — changed from
master@greeknous.comtoshopigent@greeknous.com - Email logo — branded SVG logo with "Shopigent" (purple) + "Returns" (green)
- Fraud Rules save fix — flush pending input before submit (async state race)
- Returns list search — filter returns by order name or customer name
- Loading states — SkeletonBodyText while data loads
- Auto-refresh — page auto-reloads after approve/deny/refund/close
- NavMenu fix — key-based re-mount to fix embedded nav after client-side navigation
🐛 Bug Fixes
- returnClose failure — log actual error instead of silent failure
- Auth "null" display — fixed root.tsx ErrorBoundary to show "Re-authenticating..." instead of "null"
- Login path error — root.tsx calls
login()when shop param missing - Return Detail "Not found" — reverted child route auth to standard pattern
- Process Refund action mismatch — removed invalid
@idempotentdirective, fixed syntax (field-level with UUID key) - Refund gateway — changed from "manual" to "cash" for orders without payment transaction
- Back arrow — changed from fixed
/returnsURL tonavigate(-1)with Dashboard fallback - Cancel button — now also declines Shopify return before closing
- UI spacing — standardized all gaps to Polaris conventions (100→200)
🔧 Technical
- API version aligned to 2026-07 across all files
- Shopify admin API version env set to 2026-07
- Railway env variable alignment
@idempotentdirective corrected per Shopify 2026-07 requirements- Portal uses React state for live quantity × price calculation
- All action buttons now
fullWidth+ stacked vertically on detail page
v1.0.0 — Initial Release (August 2026)
✨ Features
- Policy Engine — Create and manage return policies with conditions (max days, max amount, auto-approve, restocking fees)
- Returns Dashboard — View, filter, and manage all returns by status
- Return Detail — Complete view with items, fraud signals, activity log
- Customer Portal — Self-service return initiation at
/returnwith OTP verification - MCP Server — 9 tools for AI agent integration via Model Context Protocol
- Confirmation Gate — HMAC-signed confirmation tokens with 5-min TTL for destructive operations
- Atomic State Transitions — Concurrent double-approve prevention via
updateManywith status guard - Token Refresh — Automatic refresh of expired offline access tokens via OAuth
- Rate Limiting — Postgres-backed per-minute (60) and per-day (1000) limits per shop
- Refund Execution — Automatic refunds via Shopify Admin API with store credit option
- Fraud Detection — Velocity checks, amount anomalies, frequent returner flags, configurable rules
- Advanced Fraud Rules — Custom rules UI: max returns per customer, max value, blocked countries, suspicious domains
- Label Generation — SendCloud, Shippo, and EasyPost integration with settings UI
- Email Notifications — Automatic emails on approve/deny/refund via VPS mail relay
- Exchange Workflow — MCP tool to create draft orders for replacement items
- Analytics Dashboard — Return rate, auto-resolution %, trends, top reasons, top products
- Plan-Based Access Control — Free (read-only), Growth (approve/deny/refund), Pro (exchange + labels)
- Billing Integration — Shopify managed pricing with Free/Growth/Pro plans
- ORDERS_FULFILLED Webhook — Auto-create returns when orders are fulfilled
- GDPR Compliance — Webhooks for customers/data_request, customers/redact, shop/redact
🔧 Technical
- Built on Remix + Polaris + Prisma + Postgres
- Deployed on Railway with GitHub auto-deploy
- MCP protocol 2024-11-05 compliant
- Multi-provider label architecture (SendCloud, Shippo, EasyPost)
- VPS mail relay for email delivery (no third-party dependency)
- Custom domain: returns.greeknous.com
- Docs site: returns-docs-production.up.railway.app
- GitHub: MK-XXXVII/shopigent-returns