-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
328 lines (312 loc) · 15.3 KB
/
Copy pathindex.html
File metadata and controls
328 lines (312 loc) · 15.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Restock Relay — back-in-stock alerts for Shopify, from your own domain</title>
<meta name="description" content="Shoppers opt in on a merchant's product page; Restock Relay emails them once, when that exact variant is back in stock. Flat pricing, one-click unsubscribe, full CSV export.">
<link rel="canonical" href="https://restockrelay.app/">
<meta property="og:type" content="website">
<meta property="og:url" content="https://restockrelay.app/">
<meta property="og:site_name" content="Restock Relay">
<meta property="og:title" content="Restock Relay — back-in-stock alerts for Shopify, from your own domain">
<meta property="og:description" content="Shoppers opt in on a merchant's product page; Restock Relay emails them once, when that exact variant is back in stock. Flat pricing, one-click unsubscribe, full CSV export.">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Restock Relay — back-in-stock alerts for Shopify">
<meta name="twitter:description" content="Shoppers opt in on a merchant's product page; Restock Relay emails them once, when that exact variant is back in stock.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%231c4ed8'/%3E%3Cpath d='M10 8v5h5' fill='none' stroke='white' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M10.5 13a6 6 0 1 1-.4 6.4' fill='none' stroke='white' stroke-width='2.4' stroke-linecap='round'/%3E%3C/svg%3E">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="page">
<a class="skipLink" href="#main">Skip to content</a>
<header class="masthead">
<div class="shell mastheadInner">
<a class="wordmark" href="/">
<svg width="24" height="24" viewBox="0 0 32 32" aria-hidden="true" focusable="false">
<rect width="32" height="32" rx="7" fill="var(--rr-accent)"></rect>
<path d="M10 8v5h5" fill="none" stroke="var(--rr-accent-fg)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M10.5 13a6 6 0 1 1-.4 6.4" fill="none" stroke="var(--rr-accent-fg)" stroke-width="2.4" stroke-linecap="round"></path>
</svg>
Restock Relay
</a>
<nav class="mastheadNav" aria-label="Primary">
<a href="#how-it-works">How it works</a>
<a href="#pricing">Pricing</a>
<a href="#faq">FAQ</a>
<a href="unsubscribe.html">Stop alerts</a>
</nav>
</div>
</header>
<main id="main">
<section class="shell hero">
<h1 class="heroTitle">Back-in-stock alerts sent from your own domain</h1>
<p class="heroLead">
Restock Relay is a Shopify app for merchants who sell things that sell out.
A shopper who finds a product unavailable can ask to be told when it returns.
We email them once — when that exact variant is back — from the merchant’s
own authenticated sending domain.
</p>
<div class="ctaRow">
<a class="button" href="#how-it-works">See how it works</a>
<a class="button buttonGhost" href="#pricing">View pricing</a>
</div>
<p class="heroMeta">
Are you a shopper who wants to stop receiving alerts?
<a href="unsubscribe.html">Here is how to unsubscribe.</a>
</p>
</section>
<!-- Section written for both merchants and email/deliverability reviewers:
it is the plain statement of how addresses enter the system. -->
<section class="shell section" id="how-it-works" aria-labelledby="how-it-works-title">
<h2 class="sectionTitle" id="how-it-works-title">How it works</h2>
<p class="sectionLead">
Three steps. No mailing list is ever bought, rented, scraped or inferred:
every address in Restock Relay was typed in by the person who owns it, on a
merchant’s storefront, to request one specific alert.
</p>
<ol class="steps">
<li class="step">
<h3 class="cardTitle">The shopper opts in</h3>
<p class="cardBody">
A “Notify me” widget appears on the merchant’s product page
when a variant is out of stock. The shopper enters their email address and
submits it themselves. That submission is the opt-in, and it is scoped to
that one product variant.
</p>
</li>
<li class="step">
<h3 class="cardTitle">We watch that variant</h3>
<p class="cardBody">
Shopify tells us when inventory changes. Before sending anything we re-check
the live sellable quantity through Shopify’s API — we never send off the
back of a webhook payload alone, and we wait out a short debounce so a stock
correction does not become an email.
</p>
</li>
<li class="step">
<h3 class="cardTitle">One email, then done</h3>
<p class="cardBody">
When the variant is genuinely available again, the shopper gets a single
transactional alert for the product they asked about. It is not a newsletter,
there is no follow-up sequence, and every message carries a working one-click
unsubscribe.
</p>
</li>
</ol>
</section>
<section class="shell section" aria-labelledby="email-practices-title">
<h2 class="sectionTitle" id="email-practices-title">What we send, and how anyone stops it</h2>
<p class="sectionLead">
Restock Relay only sends transactional restock alerts requested by the recipient.
We do not send marketing campaigns, digests or promotions, and merchants cannot
use Restock Relay to send them.
</p>
<div class="grid">
<article class="card">
<h3 class="cardTitle">One-click unsubscribe</h3>
<p class="cardBody">
Every message includes RFC 8058 one-click unsubscribe
(<code>List-Unsubscribe</code> and <code>List-Unsubscribe-Post</code>) plus a
footer link that merchants cannot remove. One click, no login, no confirmation
step. The address is suppressed immediately.
</p>
</article>
<article class="card">
<h3 class="cardTitle">Bounces and complaints</h3>
<p class="cardBody">
Bounce and complaint notifications are processed automatically and the address
is added to our suppression list, so it is not mailed again. Suppression is
held at three levels: the app’s own list, the per-merchant sending tenant,
and the account-wide suppression list.
</p>
</article>
<article class="card">
<h3 class="cardTitle">List hygiene</h3>
<p class="cardBody">
Addresses are validated on the way in (syntax, MX record, disposable-domain
blocklist). A merchant migrating a waitlist from another app may import a CSV —
those addresses are re-validated, the first send is ramped in small batches,
and it halts automatically if bounces exceed 5% of the first 100 results.
</p>
</article>
</div>
</section>
<section class="shell section" id="pricing" aria-labelledby="pricing-title">
<h2 class="sectionTitle" id="pricing-title">Pricing</h2>
<p class="sectionLead">
Billing is handled by Shopify. Paid plans include a 7-day free trial. You are
never charged more than your plan price — there is no usage billing and no overage.
</p>
<div class="tableWrap">
<table class="table">
<caption>Prices in USD, per store. Annual prices are shown alongside the monthly price.</caption>
<thead>
<tr>
<th scope="col">Plan</th>
<th scope="col">Price</th>
<th scope="col">Emails / month</th>
<th scope="col">Includes</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Free</th>
<td>$0</td>
<td>500</td>
<td>
<ul class="planList">
<li>Unlimited subscribers</li>
<li>Full widget, multilingual</li>
<li>Full subscriber CSV export</li>
<li>Discreet “Powered by” badge</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">Flat</th>
<td>$9 / month or $90 / year</td>
<td>Unlimited — full speed up to 25,000, rate-shaped above that</td>
<td>
<ul class="planList">
<li>Everything in Free</li>
<li>Send from your own domain</li>
<li>No branding</li>
<li>CSV import for migration</li>
<li>No-code email templates</li>
</ul>
</td>
</tr>
<tr>
<th scope="row">Pro</th>
<td>$19 / month or $190 / year</td>
<td>Unlimited — full speed up to 250,000, rate-shaped above that</td>
<td>
<ul class="planList">
<li>Everything in Flat</li>
<li>Priority send queue</li>
<li>Priority support</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<div class="callout" style="margin-top: 1.25rem;">
<h3 class="cardTitle">What “unlimited” means here</h3>
<p class="cardBody">
Above the full-speed threshold of your plan we slow delivery down and tell you —
we never bill you extra and we never silently stop. On the Free plan, alerts
beyond the 500-email allowance are queued rather than dropped: they are held for
up to 72 hours, availability is re-checked immediately before sending, and
anything still queued after that expires instead of arriving stale. The full
terms are in the <a href="terms.html">fair use policy</a>.
</p>
</div>
</section>
<section class="shell section" aria-labelledby="why-title">
<h2 class="sectionTitle" id="why-title">Why merchants pick us</h2>
<div class="grid">
<article class="card">
<h3 class="cardTitle">Your own sending domain</h3>
<p class="cardBody">
On paid plans a setup wizard walks you through three DNS records so alerts
leave from your domain, DKIM-signed with an aligned SPF and a custom MAIL FROM.
We check the records for you and only switch over once DKIM verifies. Until
then — and on the Free plan — alerts go from our shared authenticated domain
with your store name in the From and your address in Reply-To. We never put
your domain in the From line without verified DKIM.
</p>
</article>
<article class="card">
<h3 class="cardTitle">Flat pricing, no overage</h3>
<p class="cardBody">
$9 or $19 a month. A viral restock does not produce an invoice you did not
agree to. If you outrun the full-speed threshold, we slow down and notify you —
that is the whole mechanism.
</p>
</article>
<article class="card">
<h3 class="cardTitle">The list is yours</h3>
<p class="cardBody">
Full subscriber CSV export on every plan, including Free, with addresses in
the clear — not masked, not paywalled. If you leave, you take the list with
you. Migrating in works too: import a CSV from your previous app.
</p>
</article>
</div>
</section>
<section class="shell section" id="faq" aria-labelledby="faq-title">
<h2 class="sectionTitle" id="faq-title">Frequently asked questions</h2>
<div class="faq">
<article class="faqItem">
<h3 class="faqQ">Where do the email addresses come from?</h3>
<p class="faqA">
From the shoppers themselves. Somebody typed their address into the
“Notify me” form on a merchant’s out-of-stock product page and
pressed submit. That is the only way an address enters Restock Relay through
the widget. We never buy, rent or scrape addresses, and we do not read the
merchant’s Shopify customer list — the app does not even request permission to.
</p>
</article>
<article class="faqItem">
<h3 class="faqQ">What Shopify data does the app have access to?</h3>
<p class="faqA">
Two read-only scopes: <code>read_products</code> and <code>read_inventory</code>.
That is enough to know a variant went from out of stock to in stock. No customer
data, no orders, no write access. If a shopper is logged into the store when they
subscribe, Shopify offers us their customer ID — we discard it and never store it.
</p>
</article>
<article class="faqItem">
<h3 class="faqQ">How many emails will a shopper get?</h3>
<p class="faqA">
One per request. Somebody who signs up for one variant gets one alert when that
variant comes back. There is no drip sequence and no marketing.
</p>
</article>
<article class="faqItem">
<h3 class="faqQ">How does someone unsubscribe?</h3>
<p class="faqA">
One click, from any alert we send — the link is in the footer of every message,
and mail clients that support RFC 8058 show their own unsubscribe button. Full
instructions are on the <a href="unsubscribe.html">unsubscribe help page</a>.
</p>
</article>
<article class="faqItem">
<h3 class="faqQ">Does it do SMS, or pre-orders?</h3>
<p class="faqA">
No. Restock Relay does back-in-stock email alerts and nothing else.
</p>
</article>
<article class="faqItem">
<h3 class="faqQ">What happens if a merchant uninstalls?</h3>
<p class="faqA">
Sending stops immediately: the store is deactivated, queued jobs are cancelled,
and the store’s sending identity is torn down. Data erasure then follows
Shopify’s data-deletion flow — see the <a href="privacy.html">privacy policy</a>.
</p>
</article>
</div>
</section>
</main>
<footer class="footer">
<div class="shell">
<nav aria-label="Footer">
<ul class="footerNav">
<li><a href="privacy.html">Privacy</a></li>
<li><a href="terms.html">Terms & fair use</a></li>
<li><a href="unsubscribe.html">Stop receiving alerts</a></li>
<li><a href="mailto:support@restockrelay.app">support@restockrelay.app</a></li>
</ul>
</nav>
<p class="footerNote">
Restock Relay sends transactional back-in-stock alerts on behalf of Shopify
merchants, only to shoppers who requested them on the merchant’s storefront.
Every message can be stopped with one click.
</p>
</div>
</footer>
</div>
</body>
</html>