npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jamiekyu/website-header

v1.0.25

Published

Shared header component for Next.js applications

Readme

@jamiekyu/website-header

A reusable header component for Next.js applications.

Installation

npm install @jamiekyu/website-header

Usage

Method 1: With Pre-compiled CSS (Recommended)

This method requires no Tailwind CSS configuration on the consumer side:

import { Header } from '@jamiekyu/website-header';
import '@jamiekyu/website-header/dist/header.css';

function App() {
  return (
    <Header
      title="My App"
      navigationItems={[
        { label: "Home", href: "/" },
        { label: "About", href: "/about" },
        { label: "External Link", href: "https://example.com", external: true }
      ]}
      alwaysVisible={true}
    />
  );
}

Method 2: Environment Variables (Automatic Configuration)

For even simpler usage, you can configure the header via environment variables in your Next.js config:

// Just import and use - no props needed!
import { Header } from '@jamiekyu/website-header';
import '@jamiekyu/website-header/dist/header.css';

function App() {
  return <Header />;
}

The header will automatically read from these environment variables:

  • NEXT_PUBLIC_HEADER_ALWAYS_VISIBLE
  • NEXT_PUBLIC_HEADER_TITLE
  • NEXT_PUBLIC_HEADER_TITLE_HREF
  • NEXT_PUBLIC_HEADER_NAV_ITEMS
  • NEXT_PUBLIC_HEADER_GA_MEASUREMENT_ID - Google Analytics measurement ID

Method 3: With Your Own Tailwind CSS

If you already use Tailwind CSS and want to customize the styling, you can include the header component in your Tailwind config:

// tailwind.config.js
module.exports = {
  content: [
    './src/**/*.{js,ts,jsx,tsx,mdx}',
    './node_modules/@jamiekyu/website-header/dist/**/*.{js,jsx,ts,tsx}'
  ],
  // ... rest of your config
}

Then use without importing CSS:

import { Header } from '@jamiekyu/website-header';

function App() {
  return <Header title="My App" />;
}

Props

  • alwaysVisible?: boolean - Whether the header should always be visible (default: false)
  • title?: string - The title/logo text (default: "the yu zone")
  • titleHref?: string - The href for the title link (default: "/")
  • navigationItems?: NavigationItem[] - Array of navigation items
  • className?: string - Additional CSS classes
  • googleAnalytics?: { measurementId: string } - Google Analytics configuration

NavigationItem

  • label: string - The display text
  • href: string - The URL to navigate to
  • external?: boolean - Whether this is an external link (uses instead of Next.js Link)

Google Analytics Integration

The header component includes optional Google Analytics support for tracking user interactions. When enabled, it will:

  • Initialize Google Analytics with your measurement ID
  • Track page views on component mount
  • Track clicks on navigation items and the logo/title
  • Categorize events under 'website-header' for easy filtering

Configuration Options

Option 1: Via Props

<Header
  title="My App"
  googleAnalytics={{ measurementId: "G-XXXXXXXXXX" }}
  navigationItems={[...]}
/>

Option 2: Via Environment Variable

Set the following environment variable:

NEXT_PUBLIC_HEADER_GA_MEASUREMENT_ID=G-XXXXXXXXXX

Option 3: Via JSON Configuration File

Add to your header-config.json:

{
  "title": "My App",
  "googleAnalytics": {
    "measurementId": "G-XXXXXXXXXX"
  }
}

Tracked Events

The component automatically tracks these events:

  1. Page Load - Tracked when the header component mounts

  2. Navigation Clicks - Tracked when users click on navigation items with details:

    • Event name: navigation_click
    • Event category: navigation
    • Event label: Navigation item label
    • Destination: Link href
    • Link type: internal or external
  3. Logo Clicks - Tracked when users click on the title/logo

Development

Running Storybook

To view and test the header component in Storybook:

# Install dependencies
npm install

# Start Storybook development server
npm run storybook

This will start Storybook at http://localhost:6006 where you can:

  • View different header configurations
  • Test responsive behavior
  • Interact with component props
  • Test scroll-based visibility

Building the Package

# Build TypeScript to JavaScript
npm run build

# Watch for changes during development
npm run dev

Publishing to NPM

To publish a new version to npm:

  1. Update the version in package.json:

    npm version patch  # for bug fixes
    npm version minor  # for new features
    npm version major  # for breaking changes
  2. Build the package:

    npm run build
  3. Publish to npm:

    npm publish

    Or if you need to publish with a specific access level:

    npm publish --access public

Scripts

  • npm run build - Build the TypeScript package
  • npm run dev - Watch for changes and rebuild
  • npm run storybook - Start Storybook development server
  • npm run build-storybook - Build Storybook for deployment