Skip to content

SMTP: verify scripthammer.com in Resend (3 DNS records at Squarespace) — key ready, blocked on DNS only #290

Description

@TortoiseWolfe

Pick-up ticket. SMTP is the last broken auth path. Everything is diagnosed, the API key is already saved, and the only blocker is 3 DNS records that must be added by hand at Squarespace. Blocked 2026-07-15 because the owner couldn't get into Squarespace at the time — not a technical unknown.

Split out of #287 so that ticket can close (Google + GitHub OAuth are both fixed and verified).

TL;DR to resume

  1. Log into Squarespace (the registrar — see "Where DNS actually lives" below).
  2. Add the 3 DNS records shown in the Resend dashboard (https://resend.com/domainsscripthammer.com).
  3. Click "I've already added the records" in Resend; wait for Verified.
  4. Tell Claude — it can verify propagation via DNS-over-HTTPS and then wire Supabase SMTP + test a real password-reset email end-to-end.

Est. 15 min, most of it waiting on DNS.

Current state (verified 2026-07-15)

Thing State
Supabase SMTP Entirely unsetsmtp_host, smtp_port, smtp_user, smtp_pass, smtp_sender_name, smtp_admin_email all null
Fallback sender Supabase's built-in testing sender, rate_limit_email_sent = 2/hour → signup returns 429 over_email_send_rate_limit
mailer_autoconfirm false (correct for prod — email confirmation required, which is exactly why this matters)
Resend API key Saved in gitignored .env as RESEND_API_KEY — validated working (test email sent, id 6a554316-4638-4a47-871b-62dc86645554)
scripthammer.com in Resend Added but NOT verified — DNS records not yet placed
Resend DNS records live? ❌ none — resend._domainkey, send TXT, send MX all return NXDOMAIN

Why the shared resend.dev sender is NOT a usable stopgap

Verified by direct API test:

  • from: noreply@scripthammer.com403 The scripthammer.com domain is not verified
  • from: onboarding@resend.devto the account owner (jonpohlner@gmail.com) → ✅ works
  • from: onboarding@resend.devto anyone else403 "You can only send testing emails to your own email address… verify a domain"

Do NOT wire Supabase to resend.dev. It would deliver only to the owner and silently fail for every real user — a configured-looking system that's broken for everyone else. Strictly worse than today's honest 2/hr limit. Domain verification is mandatory, not optional.

The 3 records to add

⚠️ Copy the exact values from https://resend.com/domainsscripthammer.com. The dashboard truncates them on screen with [...] — click each to expand. They are NOT recorded here on purpose: a transcribed/truncated DKIM key fails silently and wastes another session.

Type Host / Name Value Priority
TXT resend._domainkey p=MIGfMA…QIDAQAB (long DKIM public key)
TXT send v=spf1 include:amazonses.com ~all
MX send feedback-smtp.<region>.amazonses.com 10

DMARC (_dmarc TXT) is listed as Optional in Resend — skip it.

⚠️ Do not disturb the existing records

scripthammer.com already has live DNS that must be left alone:

A      scripthammer.com  → 185.199.108.153 / .109 / .110 / .111   (GitHub Pages)
CNAME  www               → tortoisewolfe.github.io.
TXT    scripthammer.com  → "v=spf1 include:mailgun.org ~all"      (apex SPF — LEAVE)
TXT    scripthammer.com  → "google-site-verification=70XuW09…"    (LEAVE)
MX     scripthammer.com  → 10 mxa.mailgun.org / mxb.mailgun.org   (apex MX — LEAVE)

The Resend records all live on subdomains (send, resend._domainkey), so they do not collide with the apex Mailgun SPF/MX. Changing the apex MX would break anything currently receiving mail at @scripthammer.com.

Where DNS actually lives (this cost an hour — read it)

Registrar: Squarespace Domains II LLC (confirmed via RDAP against Verisign).

The nameservers are NS-CLOUD-A1..A4.GOOGLEDOMAINS.COM, which looks like Google Cloud DNS but is not. Google Domains was sold to Squarespace in 2023; the googledomains.com nameserver hostnames persisted through the migration.

Dead ends already ruled out — do not repeat:

  • Google Cloud DNS (console.cloud.google.com/net-services/dns/zones?project=scripthammer) — the console says "Cloud DNS API has not been used in project scripthammer before or it is disabled" and No rows to display. There is no zone there. Checking other GCP projects is a waste of time; the SOA is Google-hosted legacy infrastructure, not a zone you own in GCP.
  • Mailgun (app.mailgun.com) — the apex MX/SPF point at Mailgun from some prior setup, but the owner's login fails with "Bad username or password." Account is inaccessible. The records are orphaned leftovers.
  • Squarespace is correct. Resend's own "Go to Squarespace" button on the domain page had it right from the start.

Link: https://account.squarespace.com/domains (if that 404s, sign in from https://www.squarespace.com/ and use the account menu → Domainsscripthammer.comDNS). Note login.squarespace.com does not resolve.

After the domain verifies — what Claude does (no owner action)

Supabase → Project Settings → Authentication → SMTP  (or via Management API)
  host        smtp.resend.com
  port        587
  username    resend
  password    <RESEND_API_KEY from .env>
  sender      noreply@scripthammer.com
  sender name ScriptHammer

Then:

Knock-on effects when this lands

Not blocking anything

All three sign-in paths work today: email+password ✅, Google ✅ (verified — google identity row), GitHub ✅ (verified — github identity row). SMTP only affects password-reset and new-user-confirmation email. It has been broken for months; nothing regressed.

Tracked under #280 (criterion 3: production operations posture). Related: #287 (OAuth — resolved), #288 (the testing gap that hid all of this).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enterpriseEnterprise-readiness umbrella + gating work (the eval-3 → eval-1 arc)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions