Skip to content

Handoff: sipnservesociety.com Squarespace -> Cloudflare Pages migration

URL: https://mkdocs.justinsforge.com/memory/handoffs/sipnserve-site-migration-2026-07-01/

Date: 2026-07-01 For: sipnserve-site worker (Fable 5) From: sipnserve-email worker (same day; email platform session)

Goal

Move sipnservesociety.com off Squarespace (kill the subscription) onto Cloudflare Pages, free tier, so the site survives homelab outages. Justin approved the architecture below; scope is deliberately light: the merch store "really doesn't matter" and the calendar "isn't a big deal" (Justin's words), so do not gold-plate either.

Approved architecture

  • Hosting: Cloudflare Pages (zone already on CF, id 7a1f05c65e9bf0ea6a9daedcb060c768, account id in ~/.forge-secrets/cloudflare.env; token there works, but tr -d "\"' \r" the value or the Authorization header breaks).
  • Site: Astro static site, content as collections (markdown/JSON), GitHub repo + auto-deploy.
  • Editing while live: Pages CMS or Decap (git-based, free) for Krystal's form-style edits; everything else via plain-language commissions to Claude. Branch preview deploys before production.
  • Store: minimal. Static product cards with Stripe Payment Links, or even just links out / "DM us" -- Justin explicitly deprioritized it. No commerce platform.
  • Forms: newsletter signup posts to Mautic (mautic.justinsforge.com, public form paths open through tunnel); contact = mailto [email protected] (it's a Google Group reaching Justin + Krystal, see reference_forge_mail_mautic.md).
  • No custom backend. CF Worker only if a form truly needs it.

Current site (recon done)

Squarespace, pages: / (home), /calendar ("upcoming pickup & events"), /get-involved + /partnerships (sponsor pitch: "3.6k+ members, 100+ players weekly, 16+ events monthly"), /store ("2025 MERCH DROP", ~7 items), /cart. Title: "Sip 'n' Serve Society | Volleyball Pickup & Tourneys in Austin, TX".

Design DNA (match the email platform)

Cobalt #0137f4, cream #ecefe6, white cards, dark text #1a1a2e, shaded card #f7f8fb, warm lowercase voice. Wordmark + assets self-hosted at https://mautic.justinsforge.com/media/images/sipnserve-logo.png (copy into the site repo, don't hotlink Mautic). Reference email theme: forge/infra/mautic/themes/sipnserve/.

Read before building

  • docs/sites-playbook.md and docs/asset-grabber-playbook.md (Web Builder mode specs; scraping + asset pipeline).
  • forge-mail Mautic reference for the email tie-ins.
  • Today's daily log memory/daily/2026-07-01.md for full session context.

Suggested task order

  1. Scrape Squarespace content + images (asset-grabber playbook; curl is hook-blocked on Console, run via ssh [email protected] or Playwright).
  2. Build Astro site (new repo or forge/sites/sipnservesociety.com/ per sites playbook, then GitHub).
  3. Wire Cloudflare Pages (API or dashboard) + preview deploys.
  4. Pages CMS for events/copy editing (Krystal-friendly; she has GitHub? If not, Pages CMS with GitHub app-auth on a shared repo, or park CMS until she needs it).
  5. Newsletter signup embed -> Mautic Sip segment (id 1, "Sip N Serve Members").
  6. Store: static cards + Stripe links ONLY if trivial; otherwise stub a "merch" page linking the old flow and move on.
  7. Preview URL to Justin + Krystal; on approval flip DNS CNAME to the Pages deployment; then Justin cancels Squarespace.

Gotchas

  • context-mode hook blocks curl/wget/WebFetch in Bash on Console; ssh to a fleet host for HTTP, or Playwright venv (~/.forge-venvs/assets/).
  • DNS flips: snapshot existing records first (dig + CF API export) so cutover is reversible in one command. Do NOT touch MX records: Sip inbound email is Google-hosted (Google Group) and must keep working.
  • Commit conventions: branch, don't commit to main; forge repo has uncommitted infra/mautic work from the email session, leave it alone.
  • No em dashes in any authored copy (doctrine).

Status update (2026-07-01, sipnserve-site worker): BUILT + DEPLOYED, awaiting preview approval

Steps 1-3 and 5-7 (minus DNS) are DONE in one session:

  • Preview URL (production alias, share with Krystal): https://sipnservesociety.pages.dev
  • Scraped all 5 Squarespace pages (copy, FAQ, sponsor tiers, 7 products with prices, SweatPals calendar embed URL, socials). Photos came from Justin's saved set at /mnt/workspace/Sip-N-Serve/Website/Squarespace Assets/ plus 5 CDN pulls for gaps; all resized to web weight.
  • Astro 5 site at forge/sites/sipnservesociety.com/ (standalone repo) -> GitHub JustinWieb/sipnservesociety.com (private). Push-to-main auto-deploys via Actions + wrangler; verified green 3x.
  • Pages: home (hero, marquee, welcome, hosts collage, FAQ, testimonial, contact CTA), /calendar (SweatPals embed recolored to brand), /partnerships (+ /get-involved redirect), /store (minimal static cards, order via IG DM / mailto per Justin's "products aren't a big deal"), 404.
  • Newsletter: Mautic form id 1 created (API enabled temporarily on CT112, then disabled; local.php restored). Footer form on every page -> segment 1 "Sip N Serve Members". Tested end-to-end; test contact deleted.
  • DNS snapshot (25 records) at forge/data/sipnservesociety-dns-snapshot-2026-07-01.json.
  • Full ops detail: reference_sipnserve_site.

Remaining: (1) Justin + Krystal approve preview; (2) on explicit approval: add custom domains to Pages project, repoint apex A records + www CNAME to sipnservesociety.pages.dev (MX/DKIM untouched); (3) Justin cancels Squarespace; (4) Pages CMS parked until Krystal needs form-style edits.