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

patterns

Skeletons and loading

Skeletons shape the content. Spinners belong only on button actions, infinite-scroll footers, and the first-ever boot.

Read the full spec

Card skeleton

Heading, meta line, media block, button row — matches a typical reports-feed card.

tsx
<div className="rounded-lg border p-6">
  <Skeleton className="h-6 w-48" />
  <Skeleton className="mt-2 h-4 w-32" />
  <Skeleton className="mt-6 h-32 w-full rounded-md" />
  <div className="mt-4 flex gap-2">
    <Skeleton className="h-9 w-24" />
    <Skeleton className="h-9 w-24" />
  </div>
</div>

Table skeleton

5–10 rows is enough. Match the column widths to the real header — don't render 100.

ReportAreaStatusReported
tsx
<tr>
  <td><Skeleton className="h-4 w-24" /></td>
  <td><Skeleton className="h-4 w-32" /></td>
  <td><Skeleton className="h-4 w-16" /></td>
  <td><Skeleton className="h-4 w-20" /></td>
</tr>

Form skeleton

Label + control stubs. Same rhythm as the real form so layout doesn't jump on arrival.

Stat-card skeleton

Label, value, sparkline — use above-the-fold on dashboards.

When spinners are fine

The exception list — everywhere else, shape the content.

  • Button actionLoader2 icon inside the button while saving / sending / signing in.
  • Infinite-scroll footerSmall spinner below the list as the next page fetches.
  • Sub-150ms loadsDelay skeleton render by 150ms so fast loads don't flicker.
  • First-ever bootRare. Under 2 seconds. Longer than that becomes a structural skeleton.
Previous — PatternsError states
Next — PatternsForms