I built ReviewReply: Cloudflare Worker + Claude AI + Stripe — no servers, about $5 a month

●1 ●3 ●19
calendar_today • schedule3 min read

Update, October 2026: In my CoderLegion Developer Spotlight with Tom Smith, Tom asked me about the "zero server costs" in the original title of this post, and what the catch was (watch that part at 12:05). I told him to ask my dev guy. So I did. The honest answer is below, and I've corrected the title. "Zero" was wrong. "No servers" is right.

Every restaurant owner I know dreads negative reviews. Not because criticism hurts, but because writing a good response takes 20 minutes they don't have.

So I built ReviewReply: paste any Google, TripAdvisor or Airbnb review, get a professional AI-written response in about 10 seconds. 5 free replies, no sign-up.

Stack

  • Cloudflare Worker: API, rate limiting, AI calls, scheduled jobs
  • Cloudflare KV: server-side rate limiting and Pro tokens
  • Cloudflare Pages: static frontend
  • Anthropic Claude Haiku: reply generation
  • Brevo: email delivery
  • Stripe Payment Links: no checkout page to build

So what does it actually cost? (My dev guy's answer to Tom)

The original version of this post said "Monthly infrastructure cost: $0". That was true for one small worker on Cloudflare's free tier. It stopped being true as the system grew, and we should have checked it before publishing.

What is true: there is no server. Nothing to rent, patch or keep running. The code sits on Cloudflare and only runs when someone uses it or a scheduled job fires. Hosting costs don't grow just because time passes.

What it really costs today:

  • Cloudflare: about $5/month. The free plan allows 5 scheduled jobs per account. We now run around 40 across all the products (outreach, monitoring, reports), so we're on the paid Workers plan. Domains come on top, around $10 a year each.
  • AI: pay per use. A Haiku reply costs a fraction of a cent. The paid audit uses Claude Sonnet and costs a few cents per report. No users, no AI bill.
  • Email and payments: small usage-based amounts, plus Stripe's normal fee on actual sales.

So the real catch is simple. It's not free, but it's cheap and it scales with use. For a bootstrapped side project where you don't know if anyone will show up, that's the point.

Key patterns

Server-side rate limiting (no localStorage) — early version:

const key = `rate:reply:${ip}:${date}`;
const count = parseInt(await env.RR_RATE.get(key) || '0');
if (count >= 3) return json({ error: 'limit reached' }, 429);
await env.RR_RATE.put(key, String(count + 1), { expirationTtl: 86400 });

Pro activation without webhooks (early version; Digistore24 sales now activate Pro through a webhook):

// Before Stripe redirect: store email
sessionStorage.setItem('proEmail', email);
window.location.href = STRIPE_LINK;

// On return: validate session_id, generate token, store in KV
if (params.get('session_id')?.startsWith('cs_live_')) {
  const token = crypto.randomUUID().replace(/-/g, '');
  await env.RR_TOKENS.put('token:' + token, JSON.stringify({ email, plan: 'pro' }));
}

Daily Telegram tip via cron:

[triggers]
crons = ["0 8 * * *"]

The worker posts a review management tip every morning on its own.

The paid tier: ReviewScan

For the full audit we switch to Claude Sonnet:

const audit = await callClaude(env, systemPrompt, reviews, 'claude-sonnet-4-6');

You get a reputation score, the top complaint categories, reply templates and a 30-day action plan, by email within a few minutes.

Try it

joinreviewreply.com. Free to try, no sign-up, works on any device.

Want the whole story of how a non-coder builds this with Claude? Watch the full interview on YouTube.

Originally posted on Dev.to. Questions or feedback welcome in the comments.

🔥 Join developers growing publicly
Share your knowledge, build in public, and grow your developer presence with a global community.

More Posts

How I Built a React Portfolio in 7 Days That Landed ₹1.2L in Freelance Work

Dharanidharan - Feb 9

I Wrote a Script to Fix Audible's Unreadable PDF Filenames

snapsynapseverified - Apr 20

I’m a Senior Dev and I’ve Forgotten How to Think Without a Prompt

Karol Modelski - Mar 19

Why Are There Only 13 DNS Root Servers For The Whole World? Is that a problem

richarddjarbeng - May 7

TypeScript Complexity Has Finally Reached the Point of Total Absurdity

Karol Modelski - Apr 23
chevron_left
347 Points • 23 Badges
norway • baseaitools.com
7Posts
4Comments
7Connections
Solo founder building after a full-time day job. I don't write code myself. I direct AI to do the bu... Show more

Related Jobs

View all jobs →

Commenters (This Week)

4 comments
4 comments
2 comments

Contribute meaningful comments to climb the leaderboard and earn badges!