Xomox Jewelry

WordPress site for Xomox Jewelry, Inc. Live as of 2026-04-28 at https://xomoxjewelry.com on the client's Flywheel account.

Project Info

Client Xomox Jewelry, Inc
Phase Live (launched 2026-04-28) — post-launch tweaks
Billable Yes
Job Number (not yet recorded)

Client Contacts

Site Reference

Local Path /Users/edowns/Local Sites/xomox/app/public/wp-content/themes/xomox
Local URL https://xomox.local
Production URL https://xomoxjewelry.com (live)
Flywheel URL https://xomoxjewelry.flywheelsites.com (client's Flywheel account)
Flywheel Site ID x7v1wkx2ug
Flywheel Account Client-owned (migrated off G&M Flywheel on 2026-04-21). Eric is a collaborator.
SSH team+flywheel-hosting+xomox-jewelry-inc@ssh.getflywheel.com (post-migration; team+ prefix because Eric is a collaborator, not owner)
Theme Docs theme/docs/README.md, SOFT-LAUNCH-032026.md, THEME-ARCHITECTURE.md
Theme CLAUDE.md Flat theme structure, Tailwind build, dev tools at inc/dev-tools/ v1.5.0
GitHub grainandmortar/xomox (private)

Integrations

Service Status Details
Harvest Active Client 14666211 · Project 39823451 "Website Design & Development" (default)
Todoist (Team) (not yet recorded)
Todoist (Dev) Active Xomox — project ID 6gXFchGgr2JrF2h4. Standard 5-section kanban. Dev-only scope. Sections: Ready 6gXFchP9fq5WQG7W · In Progress 6gXFchMH65Pq92J4 · Blocked 6gXFchWFm29v7w8W · Launch Queue 6gXFchR5JXjw84c4 · Complete 6gXFchcxcjFxV324.
Basecamp (not yet recorded)
Masterdoc Active Xomox Master — internal G&M tracker with Dev Tweaks tab
Client Bug List Active Xomox site error or bug list — client-facing soft launch feedback. Active tab: 3/20/26. Red-filled rows (#F4CCCC) = outstanding items.
Notion (not yet recorded)
Figma (not yet recorded)
Cloudflare Client-managed DNS is on Cloudflare, managed by the client's dev Adrian. G&M does not have access.
SendGrid (not yet recorded)
Vimeo Active Home/About/Portfolio hero video 1187368709 ("Xomox Jewelry — Hero Background", 4K source, served at 720p). Uploaded from the original about-page MP4 on 2026-04-28. Lives in "Xomox Jewelry" folder (G&M account). See theme CLAUDE.md → Home Hero Background Video.
Google Analytics 4 Active Property 535003731 (Xomox Jewelry Website) under account 392950028. Measurement ID G-HMK20B6L8M. gtag installed in theme/header.php, production-only (skipped on .local and .flywheelsites.com). Agency ga4-mcp@ SA has Viewer access for /ga4 MCP queries. Old site's UA-47048290-1 is dead (Universal Analytics sunset).
Google Search Console Active Property https://xomoxjewelry.com/ (URL prefix) verified 2026-05-05 under web@grainandmortar.com. Sitemap sitemap_index.xml submitted same day. Verification method: HTML tag (per Yoast/auto).
Redirects (Redirection plugin) Active Plugin v2.2.0 installed pre-launch. Old-site URLs at xomoxjewelry.com (replaced site, same domain) need a redirect audit since 2026-04-28. Single source of truth for all redirects — no .htaccess edits.
reCAPTCHA Active v3 score-based, threshold 0.5, badge hidden. Site key 6LdaBc8sAAAAAG7boB210z6NzNmi6hutIH8Nvadv for xomoxjewelry.com + xomox.local. Console: admin/site/751764826. Wired into Gravity Forms reCAPTCHA add-on v2.2.0.
GCP Project Active xomox-jewelry under grainandmortar.com org. Hosts the reCAPTCHA Classic v3 key (active) and an Enterprise key 6LeN184sAAAAAH7KOoZYAX9gE4QyPj2um31_5SaU (created during initial setup, currently unused — kept in case we move to Enterprise integration later). Billed to 01602D-BB6F5C-A3FA07.
Sites Dashboard Registered ~/.claude/skills/sites-dashboard/sites.json entry xomox

All Content Doc

(not yet recorded — ask whether a consolidated content doc exists; the client bug list above is the active feedback tracker but is not an All Content Doc)

Key Conventions

Project Status

2026-05-05 — Post-launch sweep (launch + 7 days)

End-to-end post-launch hardening pass.

Notes & registries refreshed. Theme CLAUDE.md hosting block updated (was still pointing at xomox.flywheelsites.com and the old G&M-account SSH alias — fixed to the live values). Project-notes README integrations updated with Google Search Console, Redirection plugin, and Xomox Todoist Dev rows. sites.json extended with status: "live", launch_date: 2026-04-28, ga_property, ga_measurement_id, gsc_property, gsc_account. Project memory got a new project_launch.md, refreshed reference_ssh.md (post-migration values), and project_soft_launch.md reframed as completed.

GA4 verified end-to-end. Loaded xomoxjewelry.com via chrome-devtools MCP — gtag/js?id=G-HMK20B6L8M returned 200, g/collect POST returned 204 with page_view event for "Xomox Jewelry Inc". No GA-related console errors.

Google Search Console set up. Property https://xomoxjewelry.com/ (URL prefix) verified under web@grainandmortar.com to align with how GA4 ownership lives. Sitemap sitemap_index.xml submitted same day. Note for next time: GSC MCP can't currently query this — gcloud SDK's shared OAuth client doesn't allow the webmasters.readonly scope, so dedicated OAuth client setup is required for programmatic access. Manual UI is the path until then.

404 / 301 audit. Pulled directly from Redirection plugin's tables on prod (Flywheel doesn't expose nginx logs over SSH). 3,194 distinct 404 hits in the 7-day window since launch. 71 redirects already in place from launch prep (top hits: /contact-us/ 35, old eternity-bands slug 23, /about-us/ 17). Bulk of remaining 404s are bot/scanner noise (no action) and old /wp-content/uploads/2013-2016/...jpg paths (let Google Image Search deindex naturally). Bucket A surfaced 8 high-value old URLs still leaking — implemented same day.

8 new redirects added (local first, then prod with explicit approval): /services/repair-after-sales/appraisal//services/repair-after-sales/, /handcrafted-mountings//services/private-client-bespoke/, /laser_engraving//laser-welding/, /author/xomox_jewelry/page/2//, /rubber-molds//services/production/precious-metal-casting/, /business-integrity//about/, /piotr-in-2016-tcs-new-york-city-marathon//, /news/. All 8 verified 301'ing on prod. Implementation gotcha logged: direct DB INSERT into wp_redirection_items requires populating match_url (the indexed lookup column), AND match_url must be stored without trailing slash when flag_trailing: true in redirection_options (which it is here).

Real bug surfaced (not a redirect issue). 9+ hits/week to /"/cdn.jsdelivr.net/npm/gsap@3.12.5/... from real Chrome/Firefox visitors — referrer shows xomoxjewelry.com///cdn.jsdelivr.net/... (three slashes). Theme's GSAP enqueue is correct and live page source is clean — likely a stale WPO Minify cached bundle emitting malformed protocol-relative URLs to a subset of users. Tracked in Todoist for next session.

Xomox Todoist project stood up. Project link. Standard 5-section kanban, dev-only scope, lavender. 8 cards seeded; 4 closed by end of session.

Status: Live + post-launch redirects in place. Open: weekly 404 re-audit (recurring), GSAP malformed-URL bug investigation, optional apple-touch-icon. HTML rundown at ~/.claude/project-notes/xomox/post-launch-report-2026-05-05.html. Full audit at ~/.claude/project-notes/xomox/redirects-2026-05.md.

2026-04-28 — Post-launch tightening session

Worked through the launch-day punch list once xomoxjewelry.com was live.

Hero video — unified across home/about/portfolio. Pulled the about-page MP4 source from /wp-content/uploads/2026/03/xomox-about-hero-video.mp4, uploaded to Vimeo as 1187368709 ("Xomox Jewelry — Hero Background"), and pointed all three hero modules at the same Vimeo URL. Rendition dropped from 1080p → 720p (7 MB → 3.5 MB per page load). Portfolio hero was previously broken — pointed at a deleted G&M S3 file xomox_home_hero.mp4. Now fixed.

Speed optimization pass. Full BEFORE/AFTER traces and changelog at theme/docs/SPEED-OPTIMIZATION.md. Highlights: - Conditional enqueues: Google Maps gated to /contact/, Swiper gated to home (was site-wide) - 32 below-fold images now use loading="lazy" decoding="async" - 4 huge image originals compressed in place (~43 MB saved on disk) - Preconnect hints added for Typekit, Font Awesome, Vimeo, Maps - Empty js/script.min.js (15-byte build artifact) replaced with the actual source, gated to local - LCP on portfolio: 2,793 ms → 770 ms (−72%)

WP-Optimize tuned. Local config now matches the new ~/.claude/skills/wp-optimize/SKILL.md — Flywheel-aware defaults: page cache OFF (would conflict with FlyCache), DB cleanup ON (weekly), minify ON (CSS/JS/HTML, merge OFF for safety). All other features OFF. Skill includes a per-site rollout playbook and Flywheel caveats section. Production not yet pushed for WP-Optimize — Eric's call when to flip.

Plugin updates on production. 7 plugins updated via SSH: ACF FontAwesome, Disable Gutenberg, Imagify, Redirection, Yoast SEO 26→27.5, WP-Optimize 4.3→4.5.2, Gravity Forms 2.9.30→2.10.0. ACF Pro 6.5.1→6.8.0.1 still pending — license endpoint returns "Update package not available" (likely the 2014 dev license aged out of major-version updates). Need a license renewal or manual ZIP download.

Gravity Forms reCAPTCHA configured. v3 score-based, threshold 0.5, badge hidden. Site key + secret pasted into GF reCAPTCHA add-on v2.2.0 on local + production. Wired up via the new GCP project xomox-jewelry under grainandmortar.com org. Originally created an Enterprise key (matching Armfield's pattern) before realizing the GF add-on requires Classic v3 — pivoted, kept the GCP project + Enterprise key for future use.

GCP service account claude-gcloud-admin created. Solves the recurring gcloud auth login problem for unattended automation. Lives in gm-analytics-mcp project. Org-level IAM: Project Creator, Service Usage Admin, reCAPTCHA Admin, IAM Service Account User. Billing User on 01602D-BB6F5C-A3FA07. JSON key at ~/.claude/skills/credentials/gcp-claude-admin.json (chmod 600). Activated as default gcloud account — no more login interruptions.

Credits page updated. Removed "Website Design by Grain & Mortar"; only "Website Development by Grain & Mortar" remains (with link). Production + local. Yoast meta description updated.

Xomox Master Sheet updated. New reCAPTCHA section added to Client Logins tab (rows 3–11, formatted). Site URL filled in (was empty). "Dev WordPress" annotated as DEPRECATED. "Original Site WordPress" renamed to "Production WordPress".

Status: Live, post-launch hardening done for the day. Open: ACF Pro license, optional WP-Optimize → production push, optional reCAPTCHA real-form smoke test.

2026-04-28 — Site is live on production

DNS cut over and https://xomoxjewelry.com is now live on Flywheel. Theme CLAUDE.md hosting block updated (SSH, production URL, Flywheel URL). sites.json already had the correct production_url so no change needed there.

Status: Live. Post-launch tweaks active. Home page video update pending.

2026-04-27 — Cutover plan simplified, no scheduled window

Nicole replied confirming Adrian got the DNS records and offered him on standby Tue-Thu 5-8pm ET. Initial counter was three morning options at 11am ET, but on reflection there's no real reason to schedule. The cutover is just three DNS records at Cloudflare. Propagation lands inside an hour and SSL finalizes automatically off the TXT record. No live coordination needed.

New draft tells Nicole: Adrian can flip the records whenever they're ready. Ping Eric once they're in and he'll flip the Flywheel side. If anything looks off post-flip, we email Adrian async during his hours. The three DNS records were re-pasted into the email as a table in case the prior message got buried.

Calendar holds were briefly created for the proposed mornings, then deleted once the plan changed. Two drafts are sitting in Gmail right now (the older "morning slots" version and the newer "go whenever" version with the records table). Gmail MCP lacks delete-draft permission, so the morning version needs to be manually trashed before sending the right one.

Status: Waiting on Eric to send the "go whenever" draft. After that, awaiting Adrian to add the A/CNAME/TXT records at Cloudflare. Once he pings us, flip the Flywheel domain and verify SSL finalizes.

2026-04-21 — DNS records sent, waiting on client

Nicole confirmed the client team is logged into Flywheel as collaborators and asked what's needed before cutover. Adrian (client dev) is on standby for DNS. Pulled all three DNS records from Flywheel and drafted a reply to Nicole with an HTML table of the A, CNAME, and TXT records plus Cloudflare-specific guidance (DNS-only / gray cloud, don't stack existing records, TXT can be added in advance for SSL).

DNS records to add at Cloudflare: - A @ 151.101.66.159 (DNS only, gray cloud) - CNAME www xomoxjewelry.com (DNS only, gray cloud) - TXT domain-verification ddd62bf2-fa24-47fe-947a-d54771b39ab5

Draft is sitting in Gmail (thread ID 19d96f8e02f45072) ready for Eric to review and send.

Also installed a PreToolUse harness hook (~/.claude/hooks/gmail-em-dash-guard.py) that blocks any Gmail draft/send containing em dashes, en dashes in prose, double hyphens, stray semicolons, or em-dash HTML entities. Skill-level "don't use em dashes" guidance kept failing. Now enforced at the harness layer.

Status: Waiting on Nicole + Adrian to paste DNS records into Cloudflare. Once DNS is live at Cloudflare, ping Eric to flip the Flywheel site from flywheelsites.com to xomoxjewelry.com and finalize SSL.

2026-04-21 — Site migrated to client's Flywheel account

Site moved off the G&M Flywheel account onto the client's own Flywheel billing (admin@xomoxjewelry.com). G&M team retained as collaborators. New current URL: xomoxjewelry.flywheelsites.com. The real domain xomoxjewelry.com is loaded into Flywheel but Cloudflare still points to the old host, so the production URL is not yet live.

Status: Hosting ownership transferred. Launch gated on client DNS change.

2026-04-20 — Hosting handoff started

Xomox production site provisioned on the G&M Flywheel account (site ID x7v1wkx2ug). Flywheel sent a billing-setup email to the client's admin address for them to complete on their side. DNS target for launch: A record → 151.101.66.159. Draft reply to Nicole saved to ~/Desktop/xomox-flywheel-handoff-draft.txt (both plain and HTML versions) — Gmail MCP was unauthorized this session so the draft wasn't pushed directly. Eric will paste and send.

Status: Final launch stage — waiting on client to complete Flywheel billing and signal when they're ready to cut DNS.

2026-04-20 — Project notes hub established

Scaffolded central project-notes hub pulling together previously scattered info: SSH, Flywheel IDs, Harvest mapping, client bug list sheet, Vimeo hero video, and theme conventions. Auto-discovered Harvest client/project and sites.json registration. Gaps still to fill: job number, additional client contacts, Todoist (Team + Dev), Basecamp, Figma, Notion, Cloudflare, SendGrid, All Content Doc (if any).

Status: Hub live at ~/.claude/project-notes/xomox/.

2026-04-17 — Three soft-launch fixes shipped

Completed three items from the client bug list tracking sheet. Added client-friendly status notes to the shared sheet and sent email to Nicole (plus project team CC) with hard-refresh instructions.

Status: Awaiting next client feedback round.

2026-03-23 — Soft launch phase began

Site entered soft launch / polish cycle. Local pull issue resolved (broken gm-dev-tools symlink + .github/workflows on production). Dev tools migrated from plugin symlink to theme-based (inc/dev-tools/ v1.5.0).

Status: Soft launch active.


Docs

File Description
(none yet) Add project-specific notes here as they come up