Skip to content

Design

Shared design system for haritssr.com and harimaki.com.

Design Principles

  • A design system is a set of rules and opinions that shape the user interface and the experience as a whole.
  • Design principles explain why we make specific decisions; implementation explains how they work in code.
  • The Components system takes cues from the tools used to solve math and physics problems: paper, pencils, whiteboards, and pencil cases.
  • Heavily inspired by Apple design videos.
  • The core of digital services is to adapt to their cognitive load and enable their capabilities
  • I care deeply about UX/UI design, with references including Apple, Linear, Raycast, Dub, and Vercel.
  • Why is it called "Components"?
    • The name makes the purpose of this page clear in navigation.
    • Blue, black, gray, and white keep the visual language focused and familiar.
  • Distinguish between link and button, link to navigate, button for action.
    • Both need clear hover, active, and focus-visible states when those states are relevant.
    • A link navigates; a button performs an action. Their visual treatment should reinforce that distinction.
  • Prefer the system's basic colors and components to accelerate development while maintaining consistency.
  • Use Oklab/Oklch (not RGB or HSV) for random colors, palettes, and gradients to ensure perceptually uniform, balanced results that match human vision.
  • Components include responsive behavior and keyboard focus treatment where interaction requires it.
  • Controls use subtle shadows; floating controls sit one level higher. Hover raises elevation and pressing lowers it. Disabled controls and selects stay flat, and keyboard focus keeps a visible outline.
  • Strive for one line navigation layer on all screen views as possible.
  • The system works on mobile and desktop.
  • The main grid uses one column on mobile, two on tablets, and four on desktop, with the same gap-5 at every size.
  • For Harimaki, supporting-feature modals should use grid-cols-1 and include a button at the bottom to open the full page.
  • The mobile tab bar should appear on every Harimaki page except Materi.
  • View the component code here
  • Browse the lab collection and discontinued history
  • Still evolving: typography, use cases, do's and don'ts, and component-specific guidance are next.

UI Components

SwitchSwitch.tsx
AccordionAccordion.tsx

CheckboxCheckbox.tsx
PopoverPopover.tsx
Number inputNumberInput.tsx
Table
Example data table
NameRoleStatus
AdaEngineerActive
GraceDesignerAway
TabsTabs.tsx
Update your profile details and account preferences.
ToastToast.tsx
Button: PrimaryButton.tsx
Button: LoadingButton.tsx
Button: SecondaryButton.tsx
Button: With IconButton.tsx
Button: Only IconButton.tsx
Button: DangerButton.tsx
Button: DisabledButton.tsx
External LinkExternalLink.tsx
Input: Text
Input: Search
Input: Number
BoxBox.tsx
  • Exercise title

    Use a heading and list item for exercise cards.

  • Another exercise

    Cards stretch to the same height within each grid row.

Text Area
ToggleToggle.tsx
Breadcrumbs
BadgesBadge.tsx
GeneralSuccessDangerAttentionInformation
Back ButtonBackButton.tsx
TooltipTooltip.tsx
Tooltip
Logo
haritssr.com logo
Harits Syahharitssr.com
Harimaki logo
Harimakiharimaki.com
ModalDialog.tsx
SelectSelect.tsx
Bottom BarBottomBar.tsx
SliderSlider.tsx
Context MenusContextMenu.tsx
Right-click here

Right-click the panel

Date Picker
Main ColorsColorsDemo.tsx
Success
bg-success
Attention
bg-attention
Danger
bg-danger
Action
bg-action
Foreground
bg-foreground
Background
bg-background
Hierarchical ColorsColorsDemo.tsx
white
#fafafa
zinc-50
#fafafa
zinc-100
#f4f4f5
zinc-200
#e4e4e7
zinc-300
#d4d4d8
zinc-400
#a1a1aa
zinc-500
#71717a
zinc-600
#52525b
zinc-700
#3f3f46
zinc-800
#27272a
zinc-900
#18181b
black
#18181b