<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ayra Blog: Product</title><description>Behind Ayra: product decisions, what is in private beta, what shipped and what we are not claiming yet.</description><link>https://ayra.one</link><language>en</language><atom:link href="https://ayra.one/rss/product.xml" rel="self" type="application/rss+xml"/><item><title>Why we built Ayra</title><link>https://ayra.one/blog/why-we-built-ayra</link><guid isPermaLink="true">https://ayra.one/blog/why-we-built-ayra</guid><description>We spent years gluing Shopify retention apps together for clients. The problem we kept meeting, why the customer record comes first, and what is in beta.</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been building on Shopify for over ten years, first as a developer, then as the person agencies call when the stack stops making sense. For the last few of those years, almost every engagement we took at &lt;a href=&quot;/about&quot;&gt;Tetralogicx&lt;/a&gt; that had “retention” in the brief followed the same script. This post is about that script, and why we decided to stop running it by hand.&lt;/p&gt;
&lt;h2 id=&quot;the-audit-we-ran-every-time&quot;&gt;The audit we ran every time&lt;/h2&gt;
&lt;p&gt;A merchant would come to us with a reasonable goal: get more second orders. The first week was always an audit of what was already installed. The list rarely varied much. A loyalty app. A reviews app. A wishlist app, sometimes with back-in-stock bolted on. An email tool with its own flows. Often a subscriptions app. Occasionally a referral app that was separate from the loyalty app, even though both of them handed out rewards.&lt;/p&gt;
&lt;p&gt;Each of these apps was good at its job. That was never the problem. The problem was that each one had built its own picture of the customer. Loyalty knew the points balance but not that the customer had left a one-star review last week. Reviews knew about the review but not that the customer was a VIP. The wishlist app knew what the customer wanted but had no idea a win-back discount was going out that afternoon.&lt;/p&gt;
&lt;p&gt;Six apps, six partial customers. And at the end of the month, six dashboards, each attributing the same orders to itself.&lt;/p&gt;
&lt;aside class=&quot;ay-callout border-l-[3px] px-5 py-4 text-[0.95em] border-border-strong bg-overlay&quot; role=&quot;note&quot;&gt; &lt;p class=&quot;ay-eyebrow !text-[11px] text-fg&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;text-accent-fg&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot;/&gt;&lt;path d=&quot;M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3&quot;/&gt;&lt;path d=&quot;M12 17h.01&quot;/&gt;&lt;/svg&gt; What this looked like in practice&lt;/p&gt; &lt;div class=&quot;mt-2 [&amp;&gt;*+*]:mt-3&quot;&gt;&lt;p&gt;One store we worked with sent a review request, a referral nudge and a 15% win-back offer to the same customer within a single Tuesday. Three apps, three good ideas, nobody in charge of the whole conversation.&lt;/p&gt;&lt;/div&gt; &lt;/aside&gt;
&lt;h2 id=&quot;the-glue-we-kept-writing&quot;&gt;The glue we kept writing&lt;/h2&gt;
&lt;p&gt;So we wrote glue. That was the engagement, really. Sync points balances into customer tags so the email tool could segment on them. Suppress review requests for anyone with an open support ticket, which meant polling the helpdesk and writing tags again. Delay the referral push if a discount had gone out in the last few days. Reconcile the revenue reports so the merchant could see one number instead of six.&lt;/p&gt;
&lt;p&gt;Some of it was Shopify Flow. Some of it was small apps we hosted. All of it was fragile, because it sat between tools that did not know it existed. When a vendor changed a webhook payload, the glue broke. When the merchant’s team changed a flow in the email tool, the glue broke. And when we rolled off the project, nobody was left who understood it.&lt;/p&gt;
&lt;p&gt;We did this enough times to notice two things. First, the glue was the same from store to store. The names of the apps changed; the logic did not. Second, every piece of it existed to compensate for one missing thing: a single customer record that all the retention logic could read from and write to.&lt;/p&gt;
&lt;h2 id=&quot;the-customer-record-has-to-come-first&quot;&gt;The customer record has to come first&lt;/h2&gt;
&lt;p&gt;At some point the honest answer to “which app should we add next” stopped being an app name. The customer record has to come first. Loyalty, reviews, referrals, wishlist, subscriptions and flows are all things you do &lt;em&gt;to&lt;/em&gt; a customer, based on what you know &lt;em&gt;about&lt;/em&gt; that customer. If the knowledge is split six ways, the actions will collide.&lt;/p&gt;
&lt;p&gt;That is the whole idea behind Ayra. One profile per customer, resolved across email, phone, customer ID and device. Every module writes its signals to that profile and reads from it before it acts. And in front of the shopper, one decision layer that looks at everything the modules want to do and picks the single next best action, which can be nothing at all. We call that layer &lt;a href=&quot;/how-it-works#journey-guard&quot;&gt;Journey Guard&lt;/a&gt;, and it is the part we are most careful about, because it is the part that stops retention from turning into noise.&lt;/p&gt;
&lt;p&gt;We wrote the whole model up on the &lt;a href=&quot;/how-it-works&quot;&gt;how it works&lt;/a&gt; page, including the loop and a glossary of the guards. It is deliberately written to be read in a few minutes.&lt;/p&gt;
&lt;h2 id=&quot;what-is-in-the-private-beta&quot;&gt;What is in the private beta&lt;/h2&gt;
&lt;p&gt;We are not launching everything at once, and we would rather be clear about the order than pretend.&lt;/p&gt;
&lt;div class=&quot;ay-steps my-8&quot;&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Loyalty &amp;amp; Rewards.&lt;/strong&gt; Points, store credit and VIP tiers, running on Shopify’s native store credit and discounts rather than a separate wallet. This is the module most of our clients needed first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Referrals.&lt;/strong&gt; Two-sided rewards that read the same profile as loyalty, so a referral reward and a loyalty reward never double up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer Account Hub.&lt;/strong&gt; The customer-facing side, built as customer account UI extensions rather than a separate portal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segmentation.&lt;/strong&gt; Segments built on the full profile: tier, lifecycle stage, intent, review history, open tickets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retention Analytics.&lt;/strong&gt; Repeat purchase rate, lifetime value, cohorts, and revenue attributed once per order across modules.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;Wishlist, back in stock, pre-order, reviews, subscriptions and lifecycle flows follow. The ones that come from products the team has already shipped, like our wishlist and back-in-stock work, will arrive faster than the ones we are building fresh.&lt;/p&gt;
&lt;div class=&quot;not-prose my-8&quot;&gt;&lt;a href=&quot;/features/loyalty&quot; class=&quot;group ay-card ay-card-link flex h-full flex-col gap-5 p-6&quot;&gt; &lt;div class=&quot;flex items-center justify-between&quot;&gt; &lt;span class=&quot;ay-icon-tile&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;3&quot; y=&quot;8&quot; width=&quot;18&quot; height=&quot;4&quot; rx=&quot;1&quot;/&gt;&lt;path d=&quot;M12 8v13&quot;/&gt;&lt;path d=&quot;M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7&quot;/&gt;&lt;path d=&quot;M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5&quot;/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;span class=&quot;inline-flex items-center gap-1.5  border px-2.5 py-1 font-mono text-[10px] uppercase tracking-[0.1em] border-accent/40 bg-accent-soft text-accent-fg&quot;&gt; &lt;span class=&quot;size-1.5  bg-accent&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt; Private beta &lt;/span&gt; &lt;/div&gt; &lt;div&gt; &lt;h3 class=&quot;text-xl text-fg&quot;&gt;Loyalty &amp;amp; Rewards&lt;/h3&gt; &lt;p class=&quot;mt-2 text-fg-muted&quot;&gt;Points, store credit and VIP tiers that know who the customer is.&lt;/p&gt; &lt;/div&gt;  &lt;span class=&quot;ay-link text-sm&quot;&gt;Explore Loyalty &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12h14&quot;/&gt;&lt;path d=&quot;m12 5 7 7-7 7&quot;/&gt;&lt;/svg&gt;&lt;/span&gt; &lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;what-we-are-not-claiming-yet&quot;&gt;What we are not claiming yet&lt;/h2&gt;
&lt;p&gt;A few things we want to be straight about, because the category is full of claims that do not survive contact with a real store.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The engine is rules, not a model.&lt;/strong&gt; At launch, opportunity types, eligibility and scoring are explicit rules you can read. Every decision has a reason recorded in the customer timeline. We will layer prediction on top of this later: churn, repeat-purchase likelihood, best send time. We are building the decision infrastructure first because a prediction with nowhere to act is just a report.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We do not have lift numbers to show you.&lt;/strong&gt; We have years of agency work that tells us where the collisions happen and what fixing them did for individual clients, but we are not going to turn that into a headline percentage. When beta merchants have run on Ayra long enough to measure, we will publish what we see, with the method.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Switching is not free, even when migration is.&lt;/strong&gt; We import from the apps we replace, and migration is free during the beta. But moving a loyalty program is a customer-facing change and deserves a plan. Our &lt;a href=&quot;/compare&quot;&gt;comparison pages&lt;/a&gt; say where each app is genuinely better and when you should stay put, because we would rather lose a signup than a merchant’s trust.&lt;/p&gt;
&lt;div class=&quot;not-prose my-8&quot;&gt;&lt;a href=&quot;/compare/smile-io&quot; class=&quot;group ay-card ay-card-link flex h-full flex-col gap-4 p-6&quot;&gt; &lt;div class=&quot;flex items-center justify-between&quot;&gt; &lt;span class=&quot;font-mono text-[11px] uppercase tracking-wider text-fg-subtle&quot;&gt;Loyalty&lt;/span&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;text-fg-subtle transition-all group-hover:translate-x-0.5 group-hover:text-accent-fg&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12h14&quot;/&gt;&lt;path d=&quot;m12 5 7 7-7 7&quot;/&gt;&lt;/svg&gt; &lt;/div&gt; &lt;div&gt; &lt;h3 class=&quot;text-xl text-fg&quot;&gt;Ayra vs Smile.io&lt;/h3&gt; &lt;p class=&quot;mt-2 text-fg-muted&quot;&gt;a loyalty and referral program app for Shopify with points, VIP tiers and a free plan to 200 orders.&lt;/p&gt; &lt;/div&gt; &lt;p class=&quot;mt-auto border-t border-border pt-4 font-mono text-[11px] uppercase tracking-wider text-fg-subtle&quot;&gt;Compared 2026-10-14&lt;/p&gt; &lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;why-an-agency-is-building-this&quot;&gt;Why an agency is building this&lt;/h2&gt;
&lt;p&gt;People ask whether an agency should be building a product. The honest answer is that this product only exists because of the agency. We did not guess at the problem; we were paid to solve it, badly, many times. The engineers building the loyalty and wallet pieces are the ones who shipped our order management and tracking products. The people building the storefront extensions built our wishlist app. Tetralogicx stays an agency, and Ayra is a product team inside it, funded by that work.&lt;/p&gt;
&lt;p&gt;If you run a Shopify store and the “six apps, six records” story sounds familiar, the &lt;a href=&quot;/#waitlist&quot;&gt;waitlist&lt;/a&gt; is at the bottom of this page. We are onboarding in small batches so that we can watch every store closely, and we would like one of them to be yours.&lt;/p&gt;</content:encoded><category>Product</category><category>ayra</category><category>retention-platform</category><category>customer-360</category><category>private-beta</category><author>hello@ayra.one (Ahmad)</author></item></channel></rss>