Community Wolf
Community
APIAboutContact
Book a demo

Community Wolf

Real-time safety intelligence for citizens and the teams who protect them.

Community Tools

  • Public map
  • Namola
  • WhatsApp

Business Tools

  • Access Control
  • Intelligence
  • Safety API
  • Group Agents
  • Patrol Management
  • Roster Management
  • Safety Survey
  • Pricing
  • Pricing calculator

Resources

  • Docs
  • Changelog
  • Design system

Company

  • Community
  • Business
  • API
  • About
  • Contact

Get pilot updates

New features, city launches, and integration partnerships - delivered monthly.

Subscribe to updates

(c) 2026 Community Wolf. All rights reserved.

Privacy PolicyTerms of Service
Wolf design system
Foundations
  • Brand
  • Voice and tone
  • Colour
  • Typography
  • Spacing and layout
  • Radius, elevation and borders
  • Motion
  • Iconography
  • Imagery and photography
  • Data visualisation
  • Accessibility
Patterns
  • App shell
  • Hero sections
  • Empty states
  • Error states
  • Skeletons and loading
  • Forms
  • Tables and data density
  • Confirmation and destructive actions
  • Authentication surfaces
Components
  • Button
  • Input
  • Card
  • Badge
  • Dialog
  • Label
  • Textarea
  • Select
  • Checkbox
  • Radio group
  • Switch
  • Form field
  • Tabs
  • Popover
  • Tooltip
  • Accordion
  • Alert dialog
  • Confirm dialog
  • Toast (Sonner)
  • Skeleton
  • Empty state

components

Empty state

Empty states do three jobs at once — explain why there's nothing to see, tell the user what would change that, and offer the shortest path to fix it.

Read the full spec

Default

Icon, title, description and a primary action. The icon is at `size-12` (48px) — large enough to anchor the column without dominating it.

No reports yet

Reports appear when civilians message your WhatsApp number.

tsx
import { Inbox } from "lucide-react";
import { Button, EmptyState } from "@wolf/design-system";

<EmptyState
  icon={<Inbox className="size-12" />}
  title="No reports yet"
  description="Reports appear when civilians message your WhatsApp number."
  action={<Button>Share WhatsApp link</Button>}
/>

Bordered

Dashed-border variant for sections embedded in a page — the border contains the whitespace and makes the empty block feel intentional.

No areas monitored

Draw your first area on the map to start receiving alerts.

Read the guide
tsx
<EmptyState variant="bordered" ... />

Search — no results

When the empty state is the result of a filter, name the query in the helper so the user can see what to change.

Nothing matches “bishopscourt”

Try a broader search or clear your filters to see every report.

Inside a card

Empty states also drop neatly into a Card shell when a whole panel is empty.

No team members yet

Invite colleagues to share the dashboard and dispatch duties.

Previous — ComponentsSkeleton
Next — FoundationsBrand