Rohobo Design System Readme
I'll start by inspecting the existing project structure to preserve any valid brand/design decisions already in place.
Let me check the existing project for design decisions.
Now let me create the complete design system. First, the directory structure:
Bashmkdir -p skills/frontend/design-system
Markdown--- name: rohobo-design-system-readme description: Explains the skill hierarchy, source of truth, and dependency graph for the ROHOBO/O³ design system. Use when starting any frontend task to determine which skill files to read and in what order. --- # ROHOBO/O³ Design System — Master Index No pre-existing design tokens, component library, or brand guide were found in this project at inspection time. This design system is therefore established here as the **single source of truth** going forward. Every visual decision in every ROHOBO surface (web app, O³ AI interface, marketing pages, internal tools) must trace back to `design-tokens.md`. Nothing below invents a competing system — if a future inspection finds existing brand assets (logo files, existing Tailwind config, existing color values in production), those take precedence and this file must be updated to match, not overridden.
A ₹100Cr+ SaaS company cannot afford a product that looks like it was built by five different teams. Every button, every heading, every spacing value, every icon must come from the same well. This folder is that well.
design-tokens.md ← ROOT. All raw values (hex, px, rem, ms) live ONLY here.
│
├── design-foundation.md (principles, hierarchy, grid philosophy)
├── colors-surfaces.md (semantic color usage — imports tokens)
├── typography.md (font usage — imports tokens)
├── spacing-layout.md (spacing/grid usage — imports tokens)
├── iconography.md (icon system — imports tokens)
│
├── buttons-actions.md ─┐
├── forms-inputs.md │
├── cards-panels.md │ All component skills import from
├── tables-data-grid.md │ tokens + the 5 core skills above.
├── navigation.md │ NEVER define their own raw values.
├── modals-drawers.md │
├── dropdowns-menus.md │
├── tabs-filters.md │
├── badges-status.md ─┘
│
├── feedback-states.md (states used BY all components above)
├── microcopy.md (voice/tone used BY all components above)
├── ai-interface.md (O³ orb — composes buttons, cards, states, tokens)
├── responsive-ui.md (breakpoint rules applied ACROSS all components)
│
└── visual-consistency.md (AUDIT layer — validates everything above)
Rule of inheritance: A skill file may only reference values defined in
design-tokens.md. If a skill needs a new value (a new color, a new spacing unit,
a new radius), that value must be added to design-tokens.md FIRST, given a
semantic name, and only then referenced. No skill file may contain a raw hex code,
raw px value (outside the 4px grid), raw font name, or one-off shadow definition.
When given any frontend task, follow this exact reading order. Do not skip steps. Do not improvise values that "look close enough."
- Read
README.md(this file) — understand the hierarchy. - Read
design-tokens.md— load the canonical values into context. - Read
design-foundation.md— understand visual hierarchy principles. - Read the core skills relevant to the task:
typography.md,colors-surfaces.md,spacing-layout.md,iconography.md. - Read the component skill(s) needed for the specific task (e.g. building a
table →
tables-data-grid.md; building a form →forms-inputs.md). - Read
feedback-states.mdif the component has loading/error/empty/success states (almost all do). - Read
microcopy.mdbefore writing any user-facing text. - If the task touches AI/O³ features → read
ai-interface.md. - Read
responsive-ui.mdto apply correct mobile/tablet/desktop behavior. - Before finishing, run the checklist in
visual-consistency.md— verify no new color, font, spacing value, radius, shadow, or icon was invented.
Hard rules for every AI agent
- Never hardcode a hex color, px value, font-family, or shadow. Use the token
name (e.g.
bg-surface-raised,text-heading-lg,space-4,radius-md). - Never introduce a new icon that isn't in the canonical icon map in
iconography.md. If a needed icon is missing, add it to the map first. - Never invent new component states. Use the state set defined in
feedback-states.md(default, hover, focus, active, disabled, loading, error, empty, success). - Never write technical/database language in the UI. Follow
microcopy.md. - Every screen must look like it was designed by the same person. If in doubt, copy the pattern from an existing component skill rather than creating a new one.
See the worked example in visual-consistency.md ("Customer CRM page") for the
exact skill-reading sequence and output expectations.
- React + Next.js
- Tailwind CSS — configured so every utility class maps to a token, no arbitrary
values (
bg-[#123456]is forbidden) - shadcn/ui — used as unstyled/behavioral primitives only; all visual styling overridden to match tokens
- Lucide Icons — canonical icon set, restricted to the map in
iconography.md - Inter — primary typeface, with Tamil-compatible fallback stack (see
typography.md)
Any time a new value is needed anywhere in the product, it is added to
design-tokens.md with a semantic name and a one-line justification, and then
visual-consistency.md's checklist is re-run. This folder is a living system, but
it changes in one place at a time — never by silent duplication.
---
Markdown--- name: design-tokens description: Defines the canonical, exhaustive set of raw and semantic design values (color, typography, spacing, radius, shadow, motion, z-index) for ROHOBO/O³. Use whenever any other skill or component needs a concrete value — this is the only file allowed to define raw values. --- # Design Tokens — Single Source of Truth Purpose: every color, font size, spacing unit, radius, shadow, duration, and z-index used anywhere in ROHOBO comes from this file. No exceptions.
- Raw values live ONLY here. All other skills reference semantic token names.
- Tailwind config must mirror these tokens exactly (
tailwind.config.tstheme.extendshould be generated from this file, not the other way around). - Adding a new token requires: a semantic name, a value, and a one-line reason.
- Never use an arbitrary Tailwind value (
p-[13px],text-[15px],#1a2b3c).
1.1 Brand
| Token | Value | Usage |
|---|---|---|
brand-primary | #4F46E5 (indigo-600) | Primary CTAs, active nav, links, focus rings |
brand-primary-hover | #4338CA (indigo-700) | Hover state of primary elements |
brand-primary-active | #3730A3 (indigo-800) | Pressed state |
brand-primary-subtle | #EEF2FF (indigo-50) | Selected row bg, subtle highlight |
brand-secondary | #0EA5A4 (teal-600) | O³ AI accent only — never used for standard UI |
brand-secondary-subtle | #F0FDFA (teal-50) | O³ AI surfaces only |
Rationale: Indigo reads premium/trustworthy for SaaS (Linear/Vercel-adjacent without copying), teal is reserved exclusively for AI/O³ so users always know "teal = AI is involved."
1.2 Neutrals (UI grays — warm-neutral scale, not pure gray)
| Token | Value | Usage |
|---|---|---|
neutral-0 | #FFFFFF | Base surface, cards |
neutral-25 | #FAFAFA | App background |
neutral-50 | #F5F5F4 | Subtle surface, hover bg |
neutral-100 | #E7E5E4 | Borders (default) |
neutral-200 | #D6D3D1 | Borders (strong), dividers |
neutral-300 | #A8A29E | Disabled text, placeholder |
neutral-400 | #78716C | Secondary icons |
neutral-500 | #57534E | Body text (secondary) |
neutral-700 | #3F3C3A | Body text (primary) |
neutral-900 | #1C1917 | Headings, high-emphasis text |
1.3 Semantic status colors
| Token | Value | Usage |
|---|---|---|
success-500 | #16A34A | Success text/icon |
success-50 | #F0FDF4 | Success surface/badge bg |
warning-500 | #D97706 | Warning text/icon |
warning-50 | #FFFBEB | Warning surface/badge bg |
danger-500 | #DC2626 | Error/destructive text/icon |
danger-50 | #FEF2F2 | Error surface/badge bg |
info-500 | #2563EB | Informational text/icon |
info-50 | #EFF6FF | Informational surface/badge bg |
1.4 Semantic surface tokens (composed from above — components use ONLY these)
| Token | Maps to | Usage |
|---|---|---|
surface-base | neutral-25 | Page background |
surface-raised | neutral-0 | Cards, modals, dropdowns |
surface-sunken | neutral-50 | Table header, code blocks, input bg |
surface-overlay | neutral-900 @ 60% opacity | Modal/drawer backdrop |
border-default | neutral-100 | Default component borders |
border-strong | neutral-200 | Emphasized dividers, table borders |
text-primary | neutral-900 | Headings, primary body |
text-secondary | neutral-500 | Secondary/help text |
text-disabled | neutral-300 | Disabled labels |
text-inverse | neutral-0 | Text on brand/dark backgrounds |
focus-ring | brand-primary @ 40% opacity, 2px | All focus-visible states |
Do not use neutral-* or brand-* tokens directly in components — always go
through the semantic layer (surface-*, text-*, border-*) so a future rebrand
only requires editing this file.
2.1 Font families
| Token | Stack | Usage |
|---|---|---|
font-sans | "Inter", "Noto Sans Tamil", -apple-system, "Segoe UI", sans-serif | All UI text |
font-mono | "JetBrains Mono", "SFMono-Regular", monospace | Code, IDs, tok |