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

Avatar

One way to draw anyone's face: their photo if there is one, otherwise the first letter of their name on a circle. Before this component, 29 different places hand-wrote avatars, and an uploaded photo only showed up on the profile page.

In codecomponents/avatar.tsxlib/ui.ts (avatarGradient)

On this page

  1. Variants
  2. Rules
  3. Sizes and color

Variants

The default tone is contrast: charcoal with a light letter. accent is orange, for the user themselves or something that must be seen. gradient is for lists of people: the color is derived from a hash of the name, so each person always gets the same color and two people side by side rarely match.

Live example
S18S24S32S44S58
OcontrastOaccentOgradient?name=""
SONKMEach name always gets the same color.

Rules

  • The letter size is 42 percent of the circle size and never goes below 9px, so one component covers everything from an 18px stack to the 58px profile header.
  • If the name is empty, "?" is shown; an empty circle looks like an error.
  • When there's no src, the first letter is drawn; the component doesn't catch image load errors itself, so clear the URL of a photo that no longer exists.
  • A photo has alt text with the person's name; a decorative avatar next to the full name doesn't repeat the name.
<Avatar name={user.name} src={user.avatar} size={32} />
<Avatar name={member.name} tone="gradient" size={24} />

Sizes and color

Defaultsize 32 · tone contrast
Letter sizemax(9, round(size × 0.42))Weight 600
Radius999px
contrast--dark-contrast on --dark12.94 : 1 · 14.62 : 1
accent#fff on --accent3.63 : 1 · 3.37 : 1
gradientlinear-gradient(140deg, hsl(h 58% 52%), hsl(h+42 52% 36%))h from the name hash
In the phone dock menu40px · 16px≤ 720px
Mention chip16px · 9px
  • The photo is an <img> with alt equal to the name and object-fit: cover. The first letter is a <span> and screen readers read that letter; next to the full name, prevent the repetition with aria-hidden on the container or a suitable title.
  • In gradient, the letter is white and the color's lightness depends on the name hash; that's why a gradient avatar always appears next to a name, never alone.
  • Avatar accepts onClick but isn't a button itself; put a tappable avatar inside a <button>.

Do

One Avatar with name and src.

Don't

A hand-made <span className="avatar">{name[0]}</span>; the photo never shows up in it.

Do

tone="gradient" for lists of people.

Don't

A random color on every render; each person should always have one color.

Related pages

Card and listThe avatar at the start of people rows.NavigationYour own face at the bottom of the services column.ColorCharcoal, orange, or gradient.
PreviousTabs and filtersNextEmpty and loading states

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