less flex.
More function.

Familiar components.
Thoughtful defaults.
Source you own.

project-form.tsx
'use client';
import { useState } from 'react';
import { Button } from './components/antiflex/button';
import { TextField } from './components/antiflex/text-field';

export function ProjectForm() {
  const [message, setMessage] = useState('');
  const [error, setError] = useState('');

  return (
    <form noValidate onSubmit={(event) => {
      event.preventDefault();
      const field = event.currentTarget.elements
        .namedItem('project') as HTMLInputElement;
      const name = field.value.trim();
      setError(name ? '' : 'Enter a project name.');
      setMessage(name ? `Sample project “${name}” created.` : '');
      if (!name) field.focus();
    }}>
      <TextField label="Project name" name="project"
        placeholder="e.g. Customer portal"
        description="A name your team will recognize."
        required error={error} />
      <Button type="submit">Create project</Button>
      <p role="status">{message}</p>
    </form>
  );
}
Live previewGive it a try
antiflex/uiProject workspace

Create something
worth using.

Start with a name. Make it your own.

A name your team will recognize.

Sample only. Nothing is sent or stored.

50 component families308 Storybook storiesReact + TypeScriptMIT core

Familiar patterns.
Nothing left to guess.

Useful on the first click.
Considered all the way through.

Feedback that finds you.

Labels, hints, and errors that stay with the field.

Keep your team in the loop.

Good defaults. Clear feedback.

For your workspace notifications.

Try saving with an incomplete email.

Explore forms

A shorter path to the action.

A search, a few keys, and you’re there.

Workspace
Create a projectA fresh start for your next idea
Invite a teammateGood work happens together
Tools
Export recordsTake your data with you

Search, use the arrow keys, then press Enter.

Explore Command

Make a date.

A familiar calendar. Your next milestone.

Choose, clear, or change your sample date.

Explore Date Picker

One system.
Complete screens.

Meet Orbit. A connected SaaS workspace
built from the same foundation.

Explore all 13 examples
Open dashboard
Orbit dashboard screen built with antiflex/ui, using illustrative sample data
A clear view of the work, down to the details.Illustrative data · Checkout is a local preview

A foundation.
Room to make it yours.

26 color palettes. 13 type sizes.
One shared language for design and code.

Color, with a shared language.
var(--af-palette-blue-500)Select a shade to copy its CSS variable.
Anybody / DisplayMake
your mark.
DM Sans / Interface

Clarity feels familiar.

From the first label to the final detail. A readable foundation for the work your interface needs to do.

Explore typography
Space Mono / Code--af-semantic-surface
--af-semantic-foreground
--af-semantic-action

Design decisions,
shared by name.

One system. Both themes.
AM
Alex MorganProduct designer · Sample profile
Available

Everything in its right place.

Shared tokens. Familiar patterns.Explore themes

This preview changes locally. Your site theme stays yours.

Explore the complete color foundation

From the first frame
to your first commit.

Inspect the decisions.
Take the source. Keep building.

surfaceLight / Dark
foregroundLight / Dark
actionLight / Dark

Design foundations

Named variables, component variants, and shared typography in Figma.

Open Figma foundations
DraftActiveIn review
Components / BadgeLight · Dark · States · Accessibility

Every state, in view

308 stories to inspect, with controls and accessibility checks.

Explore Storybook
import { Button }
from './components/antiflex/button';
ReactTypeScriptMIT

Your code to shape

Original components. Editable source. A foundation that stays in your hands.

Browse the source

Your next project
starts here.

Bring a React app. We’ll bring the building blocks.

Your React + Tailwind project
npx antiflex-ui@0.1.0-alpha.2 init --css src/index.css

React 19 · Tailwind CSS 4 · Node.js 22.18+
Current installer: 0.1.0-alpha.2. APIs may change before 1.0.