
Who
I kept seeing Jeep owners treat identity like an afterthought: a random sticker from a gas-station rack, peeling after one summer on a Wrangler hood.
The people I built for already know their JL from their JK, their Gladiator JT from an XJ Cherokee. They want hood blackouts, "rated" fender badges, side graphics that look like they belong on the trail, not clip art. They want USA vinyl that lasts 5–7 years outdoors, air-release installs, and a checkout that does not feel like 2014 Magento.
If you ship MarTech, Convex + Clerk + Stripe stacks, or local-commerce sites that have to take real money, this is for you. This is a private HurleyUS storefront (Best Jeep Decals), not a theme demo.
What
I shipped a dark-first e-commerce site at bestjeepdecals.com. Orange accent. Italic wordmark. Hero that says the quiet part: Upgrade Your Off-Road Identity. Made in the USA badge. Shop All Decals / Browse Wrangler.

Stack facts: Next.js 16.2.6 (Turbopack) on Vercel, React 19, Convex for products/categories/carts/orders/reviews/wishlists/discounts/subscriptions, Clerk for auth, Stripe for checkout, webhooks, portal, and promo codes, Resend from orders@bestjeepdecals.com, Sentry + PostHog (+ GA). Tailwind 4, Phosphor icons, Zustand cart with persist + promo, Zod + React Hook Form on checkout/admin/newsletter. Package 0.1.0. Private repo.
Seeded catalog: 30 SKUs at $29.99 across Hood Decals, Fender Decals, Side Graphics. Compass/Tread/Explorer/Star hood blackouts, Beach/Trail/Squatch/Rescue rated badges, Renegade mountain set, Zombie Outbreak Response Team badge, Since 1941 left/right, and the rest under public/products/png. Shop filters cover category, $0–$200 price range, and fitment checkboxes for Wrangler JL/JK/TJ, Gladiator JT, Cherokee XJ, Grand Cherokee, Renegade, Compass.

Admin lives under (private)/admin with requireAdmin. product CRUD (soft delete), orders, CSV export. Wishlist hearts persist in Convex. Reviews attach to products. Related products on PDPs. Billing defs include a Decal of the Month Club at $14.99/mo plus gift-card and rush-production add-ons. ROADMAP marks the Zod/RHF, Stripe+Resend, and Zustand modernization pass complete.

Where
The storefront lives on the open web: www.bestjeepdecals.com (apex redirects to www). GitHub homepage still lists the Vercel alias bestjeepdecalscom.vercel.app. Code: private HurleyUS/bestjeepdecals.com.
Public routes: shop, product, category, cart, checkout, wishlist. Auth under Clerk catch-alls. Robots.txt allows shop/product/category and blocks admin/api/sign-in/sign-up. Aug 8 added X-Robots-Tag: index, follow on Vercel so the deploy stops asking crawlers to ignore it.
Audience sits next to Jeep forums, jamborees, and every Instagram wrap account that still cannot take a Stripe payment without a third-party form.
When
2024-12-16. Create Next App. Next day: shadcn init. Dec 27: a "ghostty released" commit. Three commits. Then silence through 2025.
2026-01-08. The product actually starts. OPPORTUNITIES.md. Homepage pass. Migrate to convex-nextfaster. Build MVP e-commerce storefront. Seed script and .env.example for production readiness.
2026-02. Superadmin email gate. then security move to a server component. Stripe webhook signature verification. Admin auth on product mutations. Cart wired with localStorage session and honest success toasts. Checkout rate limiting. Error and loading boundaries. Next.js thrash: bump to 16.1.6 for a CVE, temporary downgrade to 15.5.12 for middleware, Tailwind v3 to v4, dark-first production audit.
2026-03-09–17. Next 15 to 16 for real. Delete deprecated middleware.ts. Restore Clerk on proxy.ts. Trust signals on cart. Sentry 10 for Next 16. Revenue unlock doc. Google Analytics. robots + next-sitemap. Stripe webhook + order payment flow. Admin dashboard for products and orders. Soft delete. Edit product. CSV export. Promo codes. Shop filters with category, price, Jeep model (#26). Reviews. Wishlists. Related products. Missing catalog images filled in.
2026-05-14–15. Blacksmith CI gates on repeat until they stick. Convex URL and Clerk key fallbacks so CI builds do not cry. Deploy health check targets fixed.
2026-05-22–26. Redesign commits. Package update PR #28. Sentry instrumentation. dx-maxxing PR #29. Broken images chased. UX passes. Real catalog seeded (24758dd).
2026-08-08. Four commits to finish the clock: force X-Robots-Tag: index, follow, unblock that deploy in next.config.ts, pin Stripe to package default API version for build compatibility. HEAD fd105bd. Ninety-nine commits from empty Next scaffold to an indexable commerce deploy.
On 2026-09-08 the live / sometimes hit the error boundary during capture while /shop and /cart still painted the dark chrome. Convex/runtime weather, not a rewrite of the journey.
Why
A Jeep without identity graphics is fine. A checkout that cannot take money, moderate reviews, or keep a wishlist is not a store. it is a mood board.
I wanted the full path: seeded catalog, model fitment filters, Zustand cart with promos, Stripe webhooks that create orders, Resend that tells you it shipped, admin that can soft-delete a SKU and export CSV, CI that builds without secret theater, and a robots header that admits the site wants to be found.
So I kept shipping until the redesign matched the trail aesthetic and the seed matched the PNG drawer. It is still 0.1.0. Decal Club and gift-card add-ons sit in billing defs waiting for the live Stripe dial. That is fine. The document model already holds products, carts, orders, reviews, wishlists, and subscriptions in one Convex project.
What would you put on a Wrangler hood first: a compass blackout, a tread pattern, or a beach-rated badge that starts arguments at the trailhead?
