Getting started
Set up RAMTT in your project. The system is designed for Next.js + Tailwind CSS v4.
Installation
Copy the component files into your project. No npm package yet.
# Clone the design system git clone <repo-url> # Copy into your project cp -r components/ui/ your-project/components/ui/ cp -r components/icons/ your-project/components/icons/ cp -r components/charts/ your-project/components/charts/ cp lib/ui.ts your-project/lib/ui.ts cp components/ui/tokens.css your-project/components/ui/tokens.css
Setup tokens
Import tokens.css in your root layout, before globals.css.
// app/layout.tsx import '@/components/ui/tokens.css' import './globals.css'
Setup font
Satoshi is the only font. Load it as a variable font.
// app/layout.tsx
import localFont from 'next/font/local'
const satoshi = localFont({
src: '../public/fonts/Satoshi-Variable.woff2',
variable: '--font-sans',
display: 'swap',
})
// In <html>:
<html className={satoshi.variable}>
<body className="font-sans antialiased bg-canvas text-text-primary">
{children}
</body>
</html>Tailwind CSS v4
Use @theme tokens in globals.css. No tailwind.config.js.
// app/globals.css
@import "tailwindcss";
@theme {
--font-sans: "Satoshi", system-ui, sans-serif;
--font-label: "Satoshi", system-ui, sans-serif;
/* ... see globals.css for full @theme tokens */
}Import components
All components export from a single barrel file.
import { Button, Badge, Card, Input } from '@ramtt/ui/components'
import { cn, WEIGHT, BORDER, RADIUS } from '@ramtt/ui'
// UI constants are in lib/ui.ts — use them instead of hardcoded values
import { FONT, LABEL_STYLE, VALUE_STYLE, MUTED_STYLE } from '@ramtt/ui'Principles
Monochrome UI
Color is reserved for data (charts, zones, status). UI chrome uses the warm neutral scale exclusively. No colored buttons, no accent-tinted headers.
Single font, weight hierarchy
Satoshi for everything — body, labels, numbers. Weight communicates importance: 400 (body), 450 (metadata), 500 (badges), 550 (headings). Never bold, never italic.
0.5px hairline borders
Every border is 0.5px solid var(--n400). No 1px, no 2px (except underline tabs). No decorative shadows — RAMTT is flat.
cursor: default everywhere
Buttons, links, and interactive elements all use default cursor. Only text inputs get cursor: text.
lib/ui.ts is the source of truth
Never hardcode font weights, border widths, border radii, or transition values. Import constants from lib/ui.ts. This ensures consistency across all 83 components.
Inventory
134 UI components (components/ui/)
46 chart primitives (components/charts/primitives/)
126 icons × 3 variants + 8 animated + 12 context + 11 morph + 30 reactive
8 neutral tokens + 4 semantic colors + 4 border radii + 7 spacing stops