# hurleyus.com: I shipped the parent site as a performance-pay membership lander

Source: https://www.michaelchurley.com/blog/hurleyus-com-membership-growth-parent-site  
Published: 2026-08-08  
Author: Michael C. Hurley  
Tags: hurleyus, golf, membership, nextjs, convex, resend, sentry, martech, vercel, parent-company

![Hurley US homepage — Membership Growth for Private & Resort Golf Clubs](/blog/hurleyus-com-membership-growth-parent-site/screenshots/home.png)

## Who

I run Hurley US as the parent company for a golf-media and SaaS portfolio. Clubs do not buy a story about the future of golf. They buy membership revenue.

This site is for private and resort club operators who treat acquisition as a lever, and for builders who want to see how a parent domain can stop performing brand theater and still keep the ecosystem pages in the repo.

## What

I shipped hurleyus.com — private repo under HurleyUS, public site on Vercel.

Live `/` mounts **HomeA**: membership growth for private and resort golf clubs. Compensation tied to incremental revenue. No upfront fees. Call CTA to (828) 269-8280. Named proof: Linville Land Harbor Golf Club and Laurel Ridge Resort & Country Club. Sticky mobile call bar.

Stack at HEAD (`ac2327f`, package.json **0.1.0**): **Next.js 16.1.6**, React 19, Bun, Tailwind v4, shadcn/Radix, Resend, Sentry, Convex client that no-ops without a real `NEXT_PUBLIC_CONVEX_URL`, PostHog that no-ops without a key. README still says Next 15 — deps say 16.

![About — Hurley US](/blog/hurleyus-com-membership-growth-parent-site/screenshots/about.png)

Still in the tree: **HomeB** — Growing the game together, iLeague / iTour / iCon pillars. Not what `/` renders today.

Lead forms on partners / sponsors / investors / contact hit `/api/email` with Zod validation and an in-memory IP rate limit (5/min). Booking hits `/api/booking` and emails an ICS. From: `notify@uncap.us`. Owner: `contact@hurleyus.com`.

Clerk routes `/sign-in` `/sign-up` are TODO stubs — **no `@clerk/*` in package.json**. Stripe exists as a cursor rule doc, not a dependency.

![Partners](/blog/hurleyus-com-membership-growth-parent-site/screenshots/partners.png)

## Where

Production: [www.hurleyus.com](https://www.hurleyus.com). Apex 301 to www. Verified 2026-09-08: `X-Robots-Tag: index, follow`, CSP, HSTS, sitemap for home + partners/investors/sponsors/about/contact.

Quirk: root layout metadata still titles the site Growing the game together while the body is HomeA — `page.tsx` imports HomeA without re-exporting its metadata.

![Contact](/blog/hurleyus-com-membership-growth-parent-site/screenshots/contact.png)

## When

**2025-11-25.** Create Next App.

**December 2025.** Theme, copy, A/B homepage (membership lander vs media ecosystem).

**2026-02-05.** Page-B set as permanent homepage. Within two weeks the split collapses; `/` is HomeA only. Resend from notify@uncap.us. Booking form. Static/ISR pass.

**2026-02-22 → 04-03.** Convex schema typed. Messaging Phases 1–3 through real-time subscriptions.

**2026-05-13 → 15.** shipprep + Blacksmith CI + deploy health.

**2026-08-08.** `ac2327f` — X-Robots-Tag index, follow. 109 commits total.

## Why

A parent domain that only tells the influencer story leaves club operators with nothing to buy. HomeA is the commercial door: own the acquisition pipeline, get paid on incremental membership revenue, stay discreet.

I kept HomeB in the repo because iLeague / iTour / iCon are real product mythology — just not the `/` bet right now. The A/B history is on the record: we tried always-B, then shipped always-A.

The stack is honest: Convex and PostHog degrade. Clerk is a TODO. Stripe is a doc. Indexing was the last commit because a public site still needs to be findable.
