Staaarter

Project Workspace

A project-management dashboard: a four-up stats row with one accented tile, a weekly hours-logged bar chart, a reminder card for the next meeting with attendee avatars and a start button, a team collaboration list with live-style status dots, a project-progress radial gauge, and a focus-time tracker for the day.

By Staaarter Team
Dashboard
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, avatar, avatar-initials dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/project-workspace.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/dashboard/dashboard4.tsx instead.

Usage

The file also exports dashboard4Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Dashboard4, dashboard4Demo } from "@/components/blocks/dashboard/dashboard4";

export default function Page() {
  return <Dashboard4 {...dashboard4Demo} />;
}

Props

PropTypeDefaultDescription
navItemsNavItem[]noneStatic sidebar nav entries. Icons are assigned by position, not passed in as data.
statsStatItem[]noneFour-up stat tiles; set highlighted: true on exactly one to render it as the accented primary-colored tile.
weeklyDatanumber[]noneSeven hours-logged values, Monday through Sunday, plotted as a bar chart.
meetingMeetingnoneThe reminder card's upcoming meeting: title, time, and attendee avatars.
teamTeamMember[]noneTeam collaboration list rows, each with a status dot (online, away, offline).
projectProgressnumbernoneOverall project completion percentage (0-100) shown in the radial gauge.
focusHoursTodaynumbernoneHours of focus time logged today, shown against focusHoursGoal in the tracker bar.
focusHoursGoalnumbernoneDaily focus-time goal in hours, used as the denominator for the tracker bar.
classNamestringnoneExtra classes for the outer section element.

Types

type NavItem = { label: string; href: string; active?: boolean };

type StatItem = { label: string; value: string; helpText?: string; highlighted?: boolean };

type Attendee = { name: string; avatar?: { src: string; alt: string } };

type Meeting = { title: string; time: string; attendees: Attendee[] };

type TeamMember = {
  name: string;
  role: string;
  avatar?: { src: string; alt: string };
  status: "online" | "away" | "offline";
};

Behavior notes

  • This is a fully static server component: the bar chart, radial gauge, and focus-time bar are all inline SVG/CSS-width math over fixed props, no client JS.
  • "Start meeting" is an inert button with no wired action; the meeting card is entirely presentational.
  • Team member status dots (online/away/offline) are static per the status field you pass in, not a live presence feed.
  • The one stat tile with highlighted: true renders with bg-primary/text-primary-foreground; passing it on more than one item highlights all of them since there's no enforced single-selection.
  • The topbar search input has no live filtering wired up, matching this category's other analytics-style blocks.