Skip to main content
All shared UI components live in src/components/. There are over 80 components covering layout, data display, navigation, forms, charts, maps, and loading states. Components are built with HeroUI and styled with TailwindCSS 4.x.

Component categories

Layout and navigation

ComponentDescription
Header.tsxTop navigation bar with links, search, user menu, and dark mode toggle
Footer.tsxSite-wide footer
PageLayout.tsxConsistent page wrapper with heading and content area
SearchPageLayout.tsxLayout for search result pages with sidebar filters
BreadCrumbs.tsx / BreadCrumbsWrapper.tsxDynamic breadcrumb navigation driven by BreadcrumbContext
NavButton.tsx / NavDropDown.tsxHeader navigation elements
ScrollToTop.tsx / AutoScrollToTop.tsxScroll-to-top button and auto-scroll-on-navigate behaviour

Search and filtering

ComponentDescription
GlobalSearch.tsxFull-site search powered by Algolia
Search.tsxInline search input
SortBy.tsxSorting control for list pages
CountryFilter.tsxFilter dropdown scoped to countries
Pagination.tsxPage navigation for paginated lists
ShowMoreButton.tsxReveals additional list items inline

Cards and lists

ComponentDescription
Card.tsxBase card container
SecondaryCard.tsxSection card with optional icon and title
ModuleCard.tsx / SingleModuleCard.tsxCards for mentorship modules
DashboardCard.tsxSummary card used on dashboard pages
MetricsCard.tsxDisplays a single health or stats metric
SnapshotCard.tsxPoint-in-time snapshot of entity stats
ProgramCard.tsxCard for a mentorship program
RepositoryCard.tsxCard for a GitHub repository
SponsorCard.tsxCard for an OWASP sponsor
UserCard.tsxCard for an OWASP member
ItemCardList.tsxRenders a list of cards from a data array
CardDetailsPage.tsxFull-width detail layout for a single entity

Data display

ComponentDescription
ContributorsList.tsxRenders a list of contributors with avatars
ContributorAvatar.tsxSingle contributor avatar with tooltip
LeadersList.tsx / Leaders.tsxDisplays chapter or project leaders
IssuesTable.tsxTable of GitHub issues
RecentIssues.tsxFeed of recent open issues
RecentPullRequests.tsxFeed of recent pull requests
RecentReleases.tsx / Release.tsxFeed of recent repository releases
Milestones.tsxDisplays GitHub milestone progress
InfoBlock.tsx / InfoItem.tsxLabeled key-value info rows
Badges.tsx / StatusBadge.tsxStatus and label badges
LabelList.tsxHorizontal list of label chips
TruncatedText.tsxText clamped to a max line count with expansion
ToggleableList.tsxExpandable/collapsible list
MarkdownWrapper.tsxRenders sanitized Markdown content
AnchorTitle.tsxSection heading with a self-link anchor

Charts and metrics

ComponentDescription
BarChart.tsxBar chart using ApexCharts
LineChart.tsxLine chart using ApexCharts
DonutBarChart.tsxDonut chart using ApexCharts
ContributionHeatmap.tsxGitHub-style contribution activity heatmap
ContributionStats.tsxSummary statistics for contributions
HealthMetrics.tsxProject health score display
MetricsScoreCircle.tsxCircular score indicator
MetricsPDFButton.tsxExports metrics as a PDF

Map

ComponentDescription
ChapterMap.tsxLeaflet map of worldwide OWASP chapters with marker clustering
ChapterMapWrapper.tsxClient-side wrapper that handles dynamic import of the map (required because Leaflet requires a browser environment)

Skeletons and loading

All skeleton components live in src/components/skeletons/. They mirror the layout of their corresponding pages and display while data is loading.
ComponentDescription
Card.tsxGeneric card skeleton
AboutSkeleton.tsxSkeleton for the About page
ApiKeySkeleton.tsxSkeleton for the API key settings section
MemberDetailsPageSkeleton.tsxSkeleton for a member detail page
OrganizationDetailsPageSkeleton.tsxSkeleton for an organization detail page
SnapshotSkeleton.tsxSkeleton for snapshot cards
UserCard.tsxSkeleton for user cards
sharedSkeletons.tsxCommon skeleton building blocks

Modals and overlays

ComponentDescription
Modal.tsxGeneral-purpose modal dialog built on HeroUI
EntityActions.tsxAction menu for entity management (admin)

Authentication and user

ComponentDescription
LoginPageContent.tsxSign-in page content with GitHub OAuth button
UserMenu.tsxAuthenticated user dropdown menu in the header
ModeToggle.tsxLight/dark mode switcher

Miscellaneous

ComponentDescription
CalendarButton.tsxGenerates and downloads an .ics calendar file for an event
LogoCarousel.tsxAnimated sponsor logo scroll
FontLoaderWrapper.tsxEnsures custom fonts are loaded before rendering
StructuredDataScript.tsxInjects JSON-LD structured data into the <head>
DisplayIcon.tsxRenders a named icon from react-icons
ActionButton.tsxStyled call-to-action button

Styling

Components use TailwindCSS 4.x utility classes. The Tailwind configuration (tailwind.config.mjs) extends the default theme with OWASP brand colors (e.g., owasp-blue), CSS variable-based color tokens, and the HeroUI plugin for component theming. Dark mode is enabled via the class strategy — the ModeToggle component toggles the dark class on the root element.

HeroUI

HeroUI provides the base design system. The following HeroUI packages are used directly:
  • @heroui/button, @heroui/modal, @heroui/select, @heroui/autocomplete — core interactive components
  • @heroui/skeleton — loading skeleton wrappers
  • @heroui/tooltip — contextual tooltips
  • @heroui/toast — toast notifications (via addToast)
  • @heroui/react — the full component bundle
When building new components, prefer HeroUI primitives for interactive elements and TailwindCSS for layout and spacing. This keeps visual consistency across the app.

Build docs developers (and LLMs) love