AppZapper 3000

The uninstaller Apple forgot. Now with a ray gun.

πŸ”
Current Site Anatomy
Everything the PHP server does today

The current appzapper.com is a static marketing page with 3 PHP endpoints handling payments, license lookup, and downloads. That's it. The entire backend logic fits in a single Cloudflare Worker.

4 static pages 3 PHP endpoints Stripe Checkout (legacy) [email protected]

The store uses the OLD Stripe Checkout (checkout.js, deprecated) β€” not Stripe Checkout Sessions or Payment Links. This needs to be updated regardless of migration.

⚑
Migration: What Changes
πŸ”„
Nameservers: GoDaddy β†’ Cloudflare
GoDaddy stays as registrar (owns the name). Cloudflare handles DNS. ~5 min change, 1-24hr propagation.
πŸ”„
charge.php β†’ Worker route /api/charge
Stripe Checkout Sessions (modern API) β†’ webhook β†’ generate license β†’ email via Resend. Already 90% built in forge-mail.
πŸ”„
lostcode.php β†’ Worker route /api/lostcode
Email lookup against D1 customer database (133K records already migrated). Resend the license.
πŸ”„
download.php β†’ R2 bucket or redirect
Serve DMG from Cloudflare R2 (cheap, fast, global CDN) or redirect to existing host during transition.
⚠️
Need to know where this lives. If GoDaddy email β†’ set MX records on Cloudflare pointing to same servers. Or forward to Gmail/Cloudflare Email Routing.

AppZapper Store

Not a subscription. Buy it and you own it.

Single
$19.95
1 Mac
Family
$34.95
3 Macs
Agency
$97.00
10 Macs
πŸ”‘
Lost Your License?
Currently: lostcode.php β†’ AJAX lookup
⚑
POST /store/lib/stripe_box/charge.php
β†’ Worker: POST /api/charge (Stripe webhook handler)

This is the most critical endpoint. When Stripe confirms payment, this generates the license key and emails it to the customer. Here's the full flow:

1
Customer clicks "Buy" on /store
Creates Stripe Checkout Session β†’ redirect to checkout.stripe.com
2
Customer completes payment on Stripe
Card charged β†’ Stripe fires webhook to our endpoint
3
Webhook hits Worker β†’ verify signature
Validate Stripe webhook signature to prevent spoofing
4
Generate license key (hardcoded algo)
Same algorithm Austin uses in the app. Key = f(email, product, timestamp)
5
Store customer in D1
INSERT into customers table (133,165 existing records)
6
Email license to customer via Resend
from: [email protected] β†’ customer's email with license key + download link
7
Redirect customer to /success
"Check your email" confirmation page
⚠️
Known Issue: License Emails

"We get several emails daily from people who don't receive their license" β€” this is the #1 support burden. The current PHP flow has no retry, no logging, no fallback. The Worker version should:

  • Log every send attempt to D1 (email_sends table)
  • Retry failed sends 3x with exponential backoff
  • Push a notification to Brian via ntfy on any failure
  • Provide a /api/resend/:chargeId endpoint for manual retry
πŸ”‘
POST /store/lostcode.php
β†’ Worker: POST /api/lostcode

Customer enters email β†’ lookup in DB β†’ resend license key. Currently an AJAX call to lostcode.php that returns an inline response.

πŸ’‘
Improvement: AI-Powered Support

Instead of just looking up the code, the Worker could handle common support patterns automatically. "I bought it but didn't get my email" β†’ check email_sends β†’ resend. "I need a refund" β†’ link to refund flow. "Will it work on my Mac?" β†’ check system requirements. This alone could eliminate 80%+ of the [email protected] inbox.

πŸ“¦
GET /download.php?file=appzapper203.zip
β†’ Worker: GET /download/:version

Currently serves a 935KB zip file from the PHP server's filesystem. Two options for the Worker:

Option A: Cloudflare R2 bucket
Upload DMG/ZIP to R2. Worker serves from R2 with proper Content-Disposition headers. Global CDN, fast everywhere, pennies/month. Can track download counts in D1.
Option B: Redirect to existing host (transition)
Worker 302 redirects to the GoDaddy IP (107.180.50.231) for downloads while we migrate. Zero risk, zero file copying. Switch to R2 later.
Note: AppZapper 3000 will need a NEW download URL. Austin will provide the build. The old appzapper203.zip stays for existing v2 customers.
πŸ“¬
Support Inbox: [email protected]
Simulated β€” typical daily emails
JK
Julie K.
I purchased AppZapper but never received my license code
2h ago
MT
Mike T.
Does AppZapper work on macOS Sequoia?
5h ago
RL
Rebecca L.
I'd like a refund please
1d ago
PS
Pedro S.
I bought AppZapper years ago, do I get the new version free?
1d ago
AW
Alex W.
Can I transfer my license to a new Mac?
2d ago
🧠
Support Automation Potential

Based on the patterns above, a Worker with Workers AI could auto-respond to ~80% of support emails:

"Didn't get my license" Auto: resend from D1
"Does it work on [macOS version]?" Auto: check requirements
"I want a refund" Auto: Stripe refund link
"Transfer to new Mac" Auto: license is per-user
"Free upgrade to v3?" Escalate to Brian
πŸ—ΊοΈ
Full Endpoint Map
Every URL that matters on appzapper.com
GET
/
static
200
GET
/store/
static
200
GET
/terms.html
static
200
POST
/store/lib/stripe_box/charge.php
PHP
302
POST
/store/lostcode.php
PHP
200
GET
/download.php?file=*.zip
PHP
200
GET
/downloads/appzapper203.zip
file
200
GET
/css/screen.css
static
200
GET
/images/*
static
200
GET
/mint/?js
analytics
404

New Endpoints (Worker)

POST
/api/charge
worker
new
POST
/api/lostcode
worker
new
GET
/api/resend/:chargeId
worker
new
GET
/download/:version
worker
new
GET
/api/support
worker
new
GET
/unsubscribe/:email
worker
new
POST
/api/webhook/stripe
worker
new
[mock] AppZapper migration simulator ready. Click things to see what happens.