Skip to main content

What you’ll build

A simple “Project Pulse” widget that shows two KPIs and a list — the same structure used by most Radarboard widgets. By the end you’ll have a live widget in the sandbox.

Prerequisites

  • Radarboard dev environment running (pnpm dev)
  • Terminal open in the project root

Step 1: Scaffold (30 seconds)

This creates widgets/project-pulse/ with all boilerplate, registers it in radarboard.config.ts, and installs dependencies.

Step 2: Define your layout (2 minutes)

Open widgets/project-pulse/index.ts and replace the starter recipe:
The key concepts:
  • kpiRow creates a row of headline numbers
  • list renders an array of items with title/subtitle
  • SRC ties sections to a data source by ID
When you turn this into a real widget descriptor, add capabilities if the widget owns or specializes an existing shared surface. Use requiredIntegrations only for availability filtering.

Step 3: Preview it (1 minute)

Open your browser to:
Select “Project Pulse” from the dropdown. You’ll see your widget rendered in 4 states:
  • Happy Path — with auto-generated mock data
  • Empty — all arrays empty, all numbers zero
  • Loading — skeleton shimmer
  • Error — error message overlay
No real API connection needed — the sandbox generates mock data from your recipe definition.

Step 4: Connect real data (1 minute)

Create a data resolver in widgets/project-pulse/src/hooks/use-project-pulse.ts:
Import this file in your widget’s entry point and the data flows through automatically.

What’s next?

  • Add an expanded view: Create a ProjectPulseExpanded component for the detail overlay
  • Connect to integrations: Use @radarboard/utils/api-routes to fetch from GitHub, Vercel, etc.
  • Add variants: Define multiple layout presets users can switch between
  • Read the full guide: Build a Widget covers advanced topics like visual editors, custom components, and testing

Key concepts