Adventureland Registry

Work Section

A full work list with a sticky scramble-text heading, a custom cyberpunk cursor on hover, side preview panel, BorderPattern indicators, and per-item visibility gating.

WorkSection is the primary work display surface. It features a sticky heading that scrambles to leet-speak when it becomes sticky, a custom cursor on hover (via AnimatedCyberpunkCursor), BorderPattern active indicators, and a right-side preview panel. Items with visibility: 'inert' are shown but made non-navigable.

Installation

npx shadcn@latest add @adv/work-section

Usage

import { WorkSection } from '@/components/sections/work-section';

<WorkSection
  items={workItems}
  heading="SELECTED WORK"
  getItemHref={(item) => `/work/${item.company?.toLowerCase()}/${item.id}`}
  onSelect={(item, href) => router.push(href)}
  getItemVisibility={(item) =>
    item.id === 'secret-project' ? 'inert' : 'visible'
  }
/>

Example

Props

PropTypeDefaultDescription
itemsWorkSectionItem[]{ id, title, role, period, company?, logo?, description?, image? }
headingstring"SELECTED WORK"Sticky header text (also scramble target).
hideTitlebooleanfalseHide the sticky heading entirely.
anchorIdstring"work"id on the root div, useful for scroll anchors.
keyboardDisabledbooleanfalseDisable keyboard highlight tracking (e.g. off-screen sections).
getItemVisibility(item) => 'visible' | 'hidden' | 'inert'() => 'visible'Per-item visibility. 'hidden' removes from list; 'inert' shows but disables navigation.
getItemHref(item) => string/work/{company | id}Custom href per item.
onSelect(item, href) => voidNavigation callback. Prevents anchor navigation when provided.

On this page