rk Commerce — Shopify AI Shopping Advisor
AI Commerce Platform
A RAG-grounded shopping assistant for Shopify stores — a storefront chat widget plus a merchant analytics dashboard, built to refuse a guess rather than fabricate an answer.
Tech stack
Tenant isolation, enforced not assumed
Every query against product data is scoped by store, enforced by Postgres row-level security — not by application-code convention. The reasoning: a repository layer can't govern raw SQL, and raw SQL is exactly what a future vector-search optimization would reach for, so the isolation boundary lives where it can't be bypassed by a future shortcut.
GraphQL-only, deliberately
Every call to Shopify's Admin API goes through GraphQL, deliberately — the REST Admin API became legacy for new public apps as of April 2025, so there are no REST calls anywhere in the codebase.
Self-correcting sync
Full-catalog sync uses Shopify's Bulk Operations API at install time; incremental webhooks keep it current after. The one rule that matters: every sync refetches canonical product state over GraphQL rather than trusting a webhook payload's own fields — which means bulk and webhook syncs collapse onto one code path, and out-of-order webhook delivery becomes self-correcting (a refetch that finds nothing deletes the product locally, regardless of which webhook fired).
Grounded, honest chat
The storefront widget is authenticated entirely through Shopify's own signed App Proxy request — the client never supplies its own store identifier, because any caller who could forge one could impersonate another store. Retrieval has a distance threshold that acts as the app's "I don't know" line: below it, the shopper gets an honest refusal instead of a model guess, and the miss is logged for the merchant to see what their catalogue is missing.
A comparator that refuses to guess
Cross-brand size comparisons ("I'm a medium in Zara") are refused outright rather than estimated, because vendor sizing isn't standardized and a wrong guess's failure mode is a return. Confidence is computed from how much real evidence supported the comparison, and whatever lowered it is surfaced to the shopper as a caveat in plain words rather than hidden behind a score.
Honest weekly merchant reports
Trend percentages are withheld when there isn't a real statistical baseline yet, rather than reporting something misleading like "up 200%" off a single-digit sample.