Blog de Kev C

← Back to blog

Published on 2025-06-04 9:20 by Kevin Coyle

How about more features?

Since no one asked, let’s build a headless Shopify ecommerce site.

Mock Shop, Real UX: From Analytics Integration to a Dynamic Badge Storefront

Between my last commit and now, I’ve added a mock badge shop with dynamic product pages. I shifted from backend observability to a tangible, user-facing feature: a shoppable badge catalog with dynamic routes, basic SEO, and authentication hooks. Here’s what shipped, why it matters, and how it’s set up under the hood.

Logins

All this makes me think: I need to stop dragging my feet, I need add a login with auth. I’ll use Clerk for this because it’s the only thing I know to do besides spinning something up from scratch.

What we built

Key files added or changed

A quick look at the dynamic product page

export async function generateMetadata({ params }) {
  const product = mockTrails.find((p) => p.slug === params.slug);
  if (!product) return { title: "Product Not Found" };
  return {
    title: `${product.displayTitle} | Dude Scouts Shop`,
    description: product.description,
  };
}

export default function ProductPage({ params }) {
  const product = mockTrails.find((p) => p.slug === params.slug);
  if (!product) notFound();

  const images = [product.badgeImage, product.badgeImage, product.badgeImage];

  return (
    <div className="min-h-screen bg-white">
      <Navigation />
      {/* Product card, gallery, price, CTA */}
    </div>
  );
}

Why this matters

What’s next

This iteration takes Dude Scouts from internal visibility (Snowplow) to a visible, testable storefront experience. It lays the groundwork for real commerce with minimal rework while maintaining production-friendly deployment practices.

Written by Kevin Coyle

← Back to blog