Skip to main content
Flowra
PricingCommunityFAQ
JoinStart with Flowra
  • PricingPlans, seats and payment
  • Frequently asked questionsEverything you have asked, in one place
  • Contact usWrite to the right team
  • CommunityKaro Studio, who make Flowra

For your team

  • Marketing teamsCampaigns from brief to launch
  • Product and dev teamsFeatures and bugs with full context
  • Design and content teamsBrief, files and delivery side by side
  • Operations teamsWork, documents and costs you can track
  • Sales and services teamsFrom meeting to contract and payment
  • Remote teamsOnline meeting to delivery, on your time

For your role

  • Project managersAction stories instead of chasing the team
  • Freelancers and consultantsFrom brief to contract and settlement

For your workflow

  • Meeting to actionMeeting decisions as trackable work
  • Actions with financial contextCosts next to the work that caused them
  • Actions with contract contextEvery commitment as trackable work
  • Brief to project deliveryEvery project step, one complete action
See all solutionsStart with FlowraJoin
++
Flowra design system

Fundamentals

PrinciplesVoice and writingCopy rules for each surfaceGlossaryRTL and languagesNumbers and datesAccessibility

Foundations

ColorDark modePrintingTypographySpacing and layoutRadius and shadowLayersMotionNotification soundKeyboard shortcutsIconsService logos

Components

ButtonsText fieldPickerDate and timeCheckboxRadioKeySegmented controlSliderMenu and sheetDialogCard and listTables and data listsBadge, pill, and switchTabs and filtersAvatarEmpty and loading statesProgress and stepsToastFloating helpNavigationPage headerAssistants

Patterns

Connector pageList, filter, and searchForm layoutCreation flowUpgrade promptConfirmation and irreversible actionsPhone layoutFixed bars and scrolling

Brand

Flowra brandMark and logoBrand colorBrand typographyMisuse

Design system/Components

Empty and loading states

A page that has nothing yet shows an empty box and one sentence: what's missing and how to create the first one. A page that's loading shows the shape of what's coming.

In codecomponents/empty-box.tsxcomponents/knowledge/ui.tsx (SkeletonRows)components/load-more.tsx

On this page

  1. Empty state
  2. Loading
  3. Rules
  4. Sizes
  5. Accessibility

Empty state

EmptyState draws an open, empty box in outline, in the tertiary text color, so it's correct in both themes. Below it, one sentence and, if needed, an action. Every list used to write its own centered paragraph, and no two empty pages matched.

art="deal" is for places where the first thing is revenue-related: the first company, the first project, the first account. That illustration is shown exactly as drawn.

Live example

No projects yet. Create your first so your actions have somewhere to go.

Nothing found for this phrase.

Loading

For lists, skeleton rows shaped like the real rows; the page doesn't jump when data arrives. For a button that performs an action, a small spinner in place of the label. For long lists, "More" at the bottom instead of loading everything up front.

Live example

Rules

Do

"No files yet. Drag your first one and drop it here."

Don't

"No data found."

Do

A filter that found nothing: "Nothing matches that search."

Don't

The same "You haven't created anything yet" box when the user has only filtered.

Do

A skeleton shaped like the real row.

Don't

A big spinner in the middle of the page for every load.

<EmptyState className="card" action={
  <button className="btn btn-dark" onClick={create}>{tr("ساخت پروژه")}</button>
}>
  {tr("هنوز پروژه‌ای نداری.")}
</EmptyState>

<SkeletonRows count={4} />

Sizes

Box112pxsize prop; EmptyBox itself 132
Box color--text-tertiary · stroke 3
Sentence12px · --text-secondary · leading 24px · max-width 320px
Containerpadding 32px 16px · text-center
Button52px · padding-inline 26px · 15.5px / 600margin-top 16px; phone full-width
art="deal"height round(size × 1.3)
Row skeleton28 × 28px r 9 · 11px and 9pxgap 10px between rows
Skeleton shimmer--muted → --border · 1.3s ease-in-out
Spinner15px · border 2px · 0.6s linear.spinner-dark 20px
LoadMore.pill · arrow 11px“* left” 11px

Accessibility

  • The box illustration is aria-hidden and focusable="false"; the sentence is what gets read.
  • SkeletonRows has aria-busy="true" and the aria-label “Loading...”.
  • The empty state sentence is --text-secondary at 12px: 5.14 to 1 on a light card and 5.8 in dark, AA in both. The sentence is short, and its button says what to do.
  • If the deal image doesn't load, the box takes its place; a broken image icon on an empty page looks like a bug.
  • With reduced motion, the skeleton shimmer and spinner rotation drop to almost zero.

Do

Pass the empty state button only through action; CSS sets its size.

Don't

btn-sm in an empty state; the page's only action looks small.

Related pages

Card and listThe empty state takes the place of the list inside the card.Voice and writingThe empty state sentence.ButtonsThe empty state button carries the weight of an entry button.List, filter, and searchA filter that found nothing is different from an empty list.
PreviousAvatarNextProgress and steps

Related pages

  • PageBrand kitThe Flowra mark and logo, colors, typography, clear space and minimum size, and the brand kit files to download.
  • PageDocumentationThe complete Flowra guide: actions, calendar, meetings, knowledge, files, Folio, chat, network, finance, connectors, settings and AI, each with its connections.
  • PageChangelogWhat each release added to Flowra, what got better, and what’s coming next.
  • PageContact usReach the right team: support, sales and plans, partnerships, careers, or security and privacy.
Flowra

Flowra is an all-in-one workspace for managing tasks, projects, finances, meetings, and teamwork, powered by AI to keep everything organized in one place.

Solutions for teams

  • Marketing teams
  • Product and dev teams
  • Design and content teams
  • Operations teams
  • Sales and services teams
  • Remote teams

Roles and flows

  • Project managers
  • Freelancers and consultants
  • Meeting to action
  • Actions with financial context
  • Actions with contract context
  • Brief to project delivery

With Flowra

  • All solutions
  • Pricing
  • Frequently asked questions
  • Documentation
  • Contact us
  • Brand kit
  • Design system
Crafted by Karo Studio
SecurityPrivacyTermsCookies
Version 0.16.0