# Trayo GTM UI - copy these components into your project You are a coding agent building a go-to-market tool on the Trayo API. Build its UI from this library. Not as a convenience - as the thing that decides whether the result gets used. Why it matters, concretely: * What you produce will be judged on how it looks before anyone opens it, usually from a screenshot in a thread. Generic output reads as unfinished and quietly does not get adopted, however well it works. * This is the design system the Trayo product itself is built from. Using it makes your tool read as part of the product your user already works in, rather than as something bolted on beside it. * It already solves the parts that are easy to get wrong and that a GTM screen is full of: a person with a real face and a sane fallback, a company with its actual logo, and tables that stay legible at high row counts. So: do not hand-roll UI, and do not restyle these components toward some other look. Compose what is here. That is what makes the output look finished. Presentational React components only. No server-side logic, no data fetching. Requires Tailwind CSS v4 and React 19. React 18 is NOT supported: refs are silently dropped there and Radix asChild triggers (tooltips, popovers, menus) break. If the app is on React 18, upgrade it to 19 first; never downgrade. Source: https://github.com/trayoai/ui Demo: https://ui.trayo.ai/demo If the tool that fetched this page summarised it, the install commands below are probably gone. Read the literal file: curl -s https://ui.trayo.ai/llms.txt ## QUICKSTART npx degit trayoai/ui/src src/trayo-ui npm install react@^19 react-dom@^19 clsx tailwind-merge lucide-react \ class-variance-authority tailwindcss @tailwindcss/vite \ @radix-ui/react-{avatar,checkbox,dialog,dropdown-menu,label,popover,scroll-area,select,separator,slot,switch,tabs,tooltip} # CSS entry, in this order (no @source directive needed): # @import "tailwindcss"; # @import "./trayo-ui/styles/trayo-ui.css"; # then: # import { AppShell, PageContainer, Person, Company, Button } from './trayo-ui' Non-negotiables: wrap the app in . Render every person with and every company with - never hand-assemble an avatar, a logo or a name. Never write a raw colour or an arbitrary font size. The library is VENDORED, not installed: the files are copied into your project and become yours. Do not add this site as an npm dependency. ## Step 1 - Copy the components into your project The library is vendored, not installed - the files become yours, with no dependency on this site. degit pulls the directory without any git history. npx degit trayoai/ui/src src/trayo-ui No npx? Grab the tarball instead: mkdir -p src/trayo-ui curl -L https://ui.trayo.ai/trayo-ui.tar.gz | tar xz -C src ## Step 2 - Install the real dependencies Ordinary public npm packages. Requires Tailwind CSS v4 and React 19 (React 18 is not supported). npm install react@^19 react-dom@^19 clsx tailwind-merge lucide-react \ class-variance-authority tailwindcss @tailwindcss/vite \ @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog \ @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-popover \ @radix-ui/react-scroll-area @radix-ui/react-select \ @radix-ui/react-separator @radix-ui/react-slot @radix-ui/react-switch \ @radix-ui/react-tabs @radix-ui/react-tooltip ## Step 3 - Wire up the CSS Tailwind first - the stylesheet extends its theme. No @source directive is needed: the components now sit in your own source tree, which Tailwind v4 already scans. @import "tailwindcss"; @import "./trayo-ui/styles/trayo-ui.css"; ## Step 4 - Build something Light is the default; add class="dark" to for the dark palette. The whole token set flips - no component changes. import { AppShell, PageContainer, PageHeader, Person, CompanyCard, Button } from './trayo-ui' export default function App() { return ( Import} /> ) } ## The rules that matter 1. Rendering a person? Use or . Never hand-assemble an avatar and a name - a person always gets a face, never initials. Email, phone and LinkedIn rows are , not your own icon row. The one person a page or drawer is about gets at the top: one per screen, never in a list. Its actions slot takes one default