# Staten Island Dry Cleaning — Services, accounts & costs

**Last updated:** 2026-08-01  
**Status:** Beta live · Twilio code ready · keys not installed yet  
**Live site:** https://analogarcade.net/laundry/

This is the master notes file for what we use, who owns it, and what it costs.

---

## 1. Stack at a glance

| Layer | What we use | Account | Status | Typical cost |
|-------|-------------|---------|--------|--------------|
| **Website hosting** | Cloudflare Pages (`analog-arcade`) | `analogquant@gmail.com` | ✅ Live | **$0** (Free) |
| **Orders API** | Cloudflare Worker `sidc-laundry-api` | same | ✅ Live | **$0** (Free tier) |
| **Order storage** | Cloudflare KV `sidc-orders` | same | ✅ Live | **$0** (Free tier) |
| **DNS / domain (temp)** | `analogarcade.net` zone | same | ✅ Live | Already owned |
| **Domain (future)** | Namecheap → Cloudflare DNS | TBD | ⏳ When ready | ~**$10–15/yr** `.com` |
| **Shop + customer email** | FormSubmit.co (free relay) | no account | ⚠️ Rate limits | **$0** |
| **Auto SMS** | **Twilio** | need trial keys | ⏳ Awaiting secrets | Free trial → then **~$0.01/text** |
| **Backup phone push** | ntfy.sh topic | free public | ✅ Wired | **$0** |
| **Maps / tracking** | OpenStreetMap + Leaflet + Google Maps links | free | ✅ Live | **$0** |
| **Payments** | Pay on delivery (default) | — | ✅ | **$0** platform |
| **Optional card pay later** | Stripe Payment Link | optional | ⏳ | ~**2.9% + $0.30**/txn |
| **Optional email upgrade** | Resend API | optional | ⏳ | Free 100/day then paid |

**Cloudflare login:** `analogquant@gmail.com`  
**Account ID:** `4642dc00cf9278eb9c1b66812c0b218b`

---

## 2. Cloudflare (hosting + API) — what we use

### Products in use

| Product | Name / ID | Purpose |
|---------|-----------|---------|
| **Pages** | project `analog-arcade` | Static site + laundry UI at `/laundry/` |
| **Worker** | `sidc-laundry-api` | Orders, SMS/email fan-out, driver GPS |
| **KV** | `sidc-orders` · id `4c420f1893444d73a7e74020a7a3dd86` | Store orders + driver locations |
| **Routes** | `analogarcade.net/laundry/api/*` | Public API URL |
| **Zone** | `analogarcade.net` | DNS + SSL |

### Local paths

```
~/analog-arcade-pages/laundry/          # website files
~/analog-arcade-pages/laundry-api/      # Worker + wrangler.toml
~/analog-arcade-pages/laundry-api/setup-twilio.sh
```

### Deploy commands

```bash
export PATH="$HOME/.local/node/bin:$PATH"
W="$HOME/local-mass-finder/node_modules/wrangler/bin/wrangler.js"

# API
cd ~/analog-arcade-pages/laundry-api && node "$W" deploy

# Site
cd ~/analog-arcade-pages && node "$W" pages deploy . --project-name=analog-arcade --commit-dirty=true
```

### Cloudflare pricing (normal / published)

| Plan | Monthly | What you get (approx) |
|------|---------|------------------------|
| **Workers Free** | **$0** | 100k Worker requests/day, limited KV (100k reads/day, 1k writes/day, 1 GB) |
| **Workers Paid** | **$5/mo** base | 10M requests/mo included; then ~$0.30/million requests |
| **Pages Free** | **$0** | Unlimited sites, bandwidth; build limits apply |
| **Domain DNS** | **$0** | Free DNS on Cloudflare if you point Namecheap nameservers |

**Our beta laundry volume is tiny → expect $0/month on Cloudflare Free.**  
Only upgrade to Paid if we exceed free KV writes (1,000 writes/day) or Worker requests.

---

## 3. Twilio (auto SMS) — what we use & costs

### Purpose

| Event | Who gets SMS |
|-------|----------------|
| New order | Shop **+1 917 470 2602**, ops **+1 917 279 6729**, **customer** (auto “we received your order”) |
| Driver “on my way” | Customer (track link) |
| Picked up / delivered | Customer (status) |

### Code secrets (Worker env — never commit)

| Secret name | Example | Where |
|-------------|---------|--------|
| `TWILIO_ACCOUNT_SID` | `ACxxxxxxxx…` | `wrangler secret put` |
| `TWILIO_AUTH_TOKEN` | long string | same |
| `TWILIO_FROM` | `+1XXXXXXXXXX` (Twilio number) | same |

### Setup (one time — free trial)

1. Sign up: https://www.twilio.com/try-twilio (no card required for trial)  
2. Console → copy **Account SID**, **Auth Token**, get a **trial phone number**  
3. **Verify** destination numbers (trial rule):  
   - +19174702602  
   - +19172796729  
   - any test customer phone  
   https://console.twilio.com/us1/develop/phone-numbers/manage/verified  
4. On this Mac:

```bash
cd ~/analog-arcade-pages/laundry-api
./setup-twilio.sh
```

5. Check: `curl -s https://analogarcade.net/laundry/api/health` → `"twilio": true`

### Twilio pricing (USA, normal pay-as-you-go — 2026 public list)

| Item | Typical price |
|------|----------------|
| **Free trial** | $0 · trial credit · SMS only to **verified** numbers · “Sent from your Twilio trial account” prefix |
| **Outbound SMS (US long code)** | **~$0.0083 per segment** (~1¢ per short text) |
| **Inbound SMS** | **~$0.0083 per segment** |
| **Phone number (local 10-digit)** | **~$1.15 / month** (Twilio list; confirm in console) |
| **Toll-free number** | Higher monthly (~$2+/mo) — not needed for beta |
| **A2P 10DLC registration** (business scale) | One-time + monthly brand/campaign fees later if volume grows |

### Cost examples (after trial, rough)

| Volume | SMS out (3 texts/order: shop + ops + customer) | Twilio # | Monthly ~ |
|--------|-----------------------------------------------|----------|-----------|
| 50 orders/mo | 150 × $0.0083 ≈ **$1.25** | ~$1.15 | **~$2.50** |
| 200 orders/mo | 600 × $0.0083 ≈ **$5** | ~$1.15 | **~$6** |
| 1,000 orders/mo | 3,000 × $0.0083 ≈ **$25** | ~$1.15 | **~$26** |

Longer messages (auto-reply with track URL) may use **2 segments** → double that SMS line.

**Status today:** integration ✅ · secrets ❌ · health `twilio: false` until `./setup-twilio.sh`

---

## 4. Email (FormSubmit + optional Resend)

| Service | Use | Cost | Notes |
|---------|-----|------|--------|
| **FormSubmit.co** | Shop, ops, customer emails | **$0** | First send needs inbox “confirm”; can 429 if overused |
| **Resend** (optional) | Reliable transactional email | Free 100/day; then paid | Set Worker secret `RESEND_API_KEY` + `RESEND_FROM` |

Shop email: **vjf12llc@gmail.com**  
Ops email: **analogquant@gmail.com**

---

## 5. ntfy (free phone push backup)

| Item | Value |
|------|--------|
| Topic | `sidc-staten-island-dry-clean-917` |
| URL | https://ntfy.sh/sidc-staten-island-dry-clean-917 |
| Cost | **$0** |
| App | ntfy (iOS/Android) — subscribe both phones |

Works without Twilio; Twilio is the “real SMS bubble” path.

---

## 6. Namecheap (future domain) — when we buy the site name

### Recommended name (template — not purchased)

| Field | Value |
|-------|--------|
| **Domain (planned)** | `sidrycleaning.com` (or pick another) |
| **Registrar** | **Namecheap** (user preference) |
| **DNS after buy** | Point nameservers to **Cloudflare** (same account as arcade) |
| **Site target** | Cloudflare Pages `analog-arcade` **or** new project `si-dry-cleaning` |

### Namecheap typical pricing (public; varies by promo)

| Item | Typical |
|------|---------|
| **.com first year** | often **$8–15** (promo) |
| **.com renewal** | often **$13–18/yr** |
| **WhoisGuard privacy** | usually free with Namecheap |
| **Email forwarding** | free or low-cost; or use Cloudflare Email Routing **$0** |

### After purchase (checklist)

1. Namecheap → Domain List → Manage → **Nameservers** → Custom: Cloudflare NS  
2. Cloudflare → Add site → same domain → copy NS → paste Namecheap  
3. Cloudflare Pages → Custom domain → `www` + apex  
4. Optional: Email Routing `hello@sidrycleaning.com` → Gmail  
5. Update `laundry/js/config.js`:

```js
domain: "sidrycleaning.com",
domainStatus: "live",
publicUrl: "https://sidrycleaning.com/",
```

6. Redeploy Pages + update Worker `CFG.publicBase`

**Do not buy yet** unless ready — temp URL is fine for beta.

---

## 7. Business contact (configured in site)

| Field | Value |
|-------|--------|
| Name | Staten Island Dry Cleaning |
| Phone | **(917) 470-2602** |
| Email | **vjf12llc@gmail.com** |
| Address | **2750 Hylan Boulevard, Staten Island, NY 10306** |
| Test phone | **(917) 279-6729** |
| Test email | **analogquant@gmail.com** |
| Schedule | Pickup **Thursday** · Return **Tuesday** |
| Driver PIN | **2602** (last 4 of shop phone) |

Config file: `laundry/js/config.js`  
Worker CFG: `laundry-api/worker.js`

---

## 8. Payments (checkout)

| Mode | Cost | Status |
|------|------|--------|
| **Pay on delivery / driver** | **$0** platform | ✅ Default |
| Venmo / PayPal.me / Cash App links | free peer apps | ⏳ paste in config |
| **Stripe Payment Link** | ~**2.9% + $0.30** per card payment | ⏳ optional later |
| Shopify / Square Online | monthly SaaS | ❌ avoid for launch |

---

## 9. Monthly cost summary (realistic beta → small business)

| Phase | Cloudflare | Twilio | Domain | Email | **Total** |
|-------|------------|--------|--------|-------|-----------|
| **Beta now** | $0 | $0 trial | $0 (arcade subdomain) | $0 | **~$0** |
| **Soft launch** (50 orders) | $0 | ~$2–4 | $0–1.25/mo if domain | $0 | **~$3–5** |
| **Growing** (200 orders) | $0–5 | ~$6–12 | ~$1.25/mo | $0–10 | **~$10–25** |
| **Busy** (1k orders) | $5 Workers | ~$25–50 SMS | domain | Resend ~$0–20 | **~$40–80** |

---

## 10. URLs (bookmark)

| Page | URL |
|------|-----|
| Home | https://analogarcade.net/laundry/ |
| Order | https://analogarcade.net/laundry/order |
| Prices | https://analogarcade.net/laundry/prices |
| Driver board | https://analogarcade.net/laundry/driver.html |
| API health | https://analogarcade.net/laundry/api/health |
| ntfy topic | https://ntfy.sh/sidc-staten-island-dry-clean-917 |

---

## 11. Open actions (human click required)

| # | Action | Who | Blocked? |
|---|--------|-----|----------|
| 1 | Create Twilio free trial + get SID / token / number | You or SIL | **Yes** — identity/email |
| 2 | Verify +19174702602 and +19172796729 in Twilio | You | After #1 |
| 3 | Run `./setup-twilio.sh` | You or agent with keys | After #1 |
| 4 | Confirm FormSubmit emails in Gmail once | Shop + ops inboxes | First email |
| 5 | Buy domain on Namecheap when ready | You | Optional |
| 6 | Point DNS to Cloudflare + custom domain | Agent | After #5 |

**Agent cannot create a Twilio account without your email/phone verification.**  
Everything else (code, Cloudflare, docs, domain playbook) is done.

---

## 12. Credential vault (fill when obtained — do not commit real secrets to git)

Keep secrets only in Cloudflare Worker secrets or a password manager:

| Secret | Value | Where stored |
|--------|-------|--------------|
| TWILIO_ACCOUNT_SID | _(paste when ready)_ | CF Worker secret |
| TWILIO_AUTH_TOKEN | _(paste when ready)_ | CF Worker secret |
| TWILIO_FROM | _(e.g. +1…)_ | CF Worker secret |
| RESEND_API_KEY | optional | CF Worker secret |
| Namecheap login | TBD | password manager |
| Domain | sidrycleaning.com (planned) | Namecheap |

---

*Maintained for SI Dry Cleaning beta · Analog Arcade / analogquant@gmail.com Cloudflare account*
