Open House Fasilkom UI 2026

Design System

Official Design System of OH26 Fasilkom UI

Foundation

Guidelines

Typography

Text styles, fonts, and headings used across the application.

Heading

Bold display hierarchy for section titles and page headings.

H1

Aa

60px / 40px

font-size 60px, line-height 40px

H2

Aa

48px / 40px

font-size 48px, line-height 40px

H3

Aa

36px / 40px

font-size 36px, line-height 40px

H4

Aa

30px / 36px

font-size 30px, line-height 36px

H5

Aa

24px / 32px

font-size 24px, line-height 32px

H6

Aa

20px / 28px

font-size 20px, line-height 28px

H7

Aa

16px / 24px

font-size 16px, line-height 24px

H8

Aa

14px / 20px

font-size 14px, line-height 20px

H9

Aa

12px / 16px

font-size 12px, line-height 16px

Sub Heading

Supporting hierarchy for labels, cards, and compact sections.

S1

Aa

60px / 60px

font-size 60px, line-height 60px

S2

Aa

48px / 48px

font-size 48px, line-height 48px

S3

Aa

36px / 40px

font-size 36px, line-height 40px

S4

Aa

30px / 36px

font-size 30px, line-height 36px

S5

Aa

24px / 32px

font-size 24px, line-height 32px

S6

Aa

20px / 28px

font-size 20px, line-height 28px

S7

Aa

16px / 24px

font-size 16px, line-height 24px

S8

Aa

14px / 20px

font-size 14px, line-height 20px

S9

Aa

12px / 16px

font-size 12px, line-height 16px

Body

Reading and interface copy scale for content-heavy surfaces.

B1

Aa

60px / 60px

font-size 60px, line-height 60px

B2

Aa

48px / 48px

font-size 48px, line-height 48px

B3

Aa

36px / 40px

font-size 36px, line-height 40px

B4

Aa

30px / 36px

font-size 30px, line-height 36px

B5

Aa

24px / 32px

font-size 24px, line-height 32px

B6

Aa

20px / 28px

font-size 20px, line-height 28px

B7

Aa

16px / 24px

font-size 16px, line-height 24px

B8

Aa

14px / 20px

font-size 14px, line-height 20px

B9

Aa

12px / 16px

font-size 12px, line-height 16px

<h1 className="font-league-spartan font-bold text-h1 text-primary-10">Heading</h1>
<p className="font-aileron text-b7 text-primary-20">Body copy</p>

Color

Color palette using the project tokens declared in app.css.

Primary

Main brand purple surfaces and emphasis.

primary-10

#E7DEF9

bg-primary-10

primary-20

#D6C3FC

bg-primary-20

primary-30

#B89CEF

bg-primary-30

primary-40

#946AE7

bg-primary-40

primary-50

#7139DF

bg-primary-50

primary-60

#551FBF

bg-primary-60

primary-70

#3F178D

bg-primary-70

primary-80

#2D1165

bg-primary-80

primary-90

#1C0A3E

bg-primary-90

Secondary

Blue support palette for depth and layout gradients.

secondary-10

#D9E1F4

bg-secondary-10

secondary-20

#C0D2F8

bg-secondary-20

secondary-30

#99B5F2

bg-secondary-30

secondary-40

#6590EB

bg-secondary-40

secondary-50

#326BE5

bg-secondary-50

secondary-60

#194FC4

bg-secondary-60

secondary-70

#133B91

bg-secondary-70

secondary-80

#0C265E

bg-secondary-80

secondary-90

#07183A

bg-secondary-90

Tertiary

Aqua accent palette for highlights and active states.

tertiary-10

#D6F5F2

bg-tertiary-10

tertiary-20

#C0FCF7

bg-tertiary-20

tertiary-30

#82F9EF

bg-tertiary-30

tertiary-40

#43F5E7

bg-tertiary-40

tertiary-50

#0CEBD9

bg-tertiary-50

tertiary-60

#0AC1B2

bg-tertiary-60

tertiary-70

#08978B

bg-tertiary-70

tertiary-80

#066D64

bg-tertiary-80

tertiary-90

#06554E

bg-tertiary-90

Neutral

Text, dividers, and low-emphasis interface elements.

neutral-10

#333333

bg-neutral-10

neutral-100

#FFFFFF

bg-neutral-100

neutral-200

#E8E8E8

bg-neutral-200

neutral-300

#D2D2D2

bg-neutral-300

neutral-400

#BBBBBB

bg-neutral-400

neutral-500

#A4A4A4

bg-neutral-500

neutral-600

#8E8E8E

bg-neutral-600

neutral-700

#777777

bg-neutral-700

neutral-800

#606060

bg-neutral-800

neutral-900

#4A4A4A

bg-neutral-900

neutral-1000

#333333

bg-neutral-1000

Feedback

Status colors for alerts, success, and warnings.

red-10

#FB3748

bg-red-10

red-100

#FB3748

bg-red-100

red-200

#D00416

bg-red-200

yellow-10

#FFDB43

bg-yellow-10

yellow-100

#FFDB43

bg-yellow-100

yellow-200

#DFB400

bg-yellow-200

green-10

#1FC16B

bg-green-10

green-100

#84EBB4

bg-green-100

green-200

#1FC16B

bg-green-200

<div className="bg-primary-80 text-primary-10">Primary surface</div>
<div className="bg-tertiary-50 text-primary-90">Accent surface</div>

Core controls

Atoms

Button

Interactive button element used for actions.

Primary/Default Button

Secondary Button

Tertiary Button

Ghost Button

import { Button } from "~/components/ui/button";

// Primary Button
<Button variant="primary">
	<LucideBiohazard />
	Primary
	<LucideBiohazard />
</Button>

<Button variant="primary" disabled>
	<LucideBiohazard />
	Disabled
	<LucideBiohazard />
</Button>


// Secondary Button
<Button variant="secondary">
	<LucideBiohazard />
	Secondary
	<LucideBiohazard />
</Button>

<Button variant="secondary" disabled>
	<LucideBiohazard />
	Disabled
	<LucideBiohazard />
</Button>


// Tertiary Button
<Button variant="tertiary">
	<LucideBiohazard />
	Tertiary
	<LucideBiohazard />
</Button>

<Button variant="tertiary" disabled>
	<LucideBiohazard />
	Disabled
	<LucideBiohazard />
</Button>


// Ghost Button
<Button variant="ghost">
	<LucideBiohazard />
	Ghost
	<LucideBiohazard />
</Button>

<Button variant="ghost" disabled>
	<LucideBiohazard />
	Disabled
	<LucideBiohazard />
</Button>

Alert

Alert message placeholder.

import {
  Alert,
  AlertAction,
  AlertDescription,
  AlertIcon,
  AlertTitle,
} from "~/components/ui/alert";

<Alert variant="info">
  <AlertIcon />
  <AlertTitle>Info</AlertTitle>
  <AlertDescription>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit
  </AlertDescription>
  <AlertAction />
</Alert>

<Alert variant="error">
  <AlertIcon />
  <AlertTitle>Error</AlertTitle>
  <AlertDescription>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit
  </AlertDescription>
  <AlertAction />
</Alert>

<Alert variant="success">
  <AlertIcon />
  <AlertTitle>Success</AlertTitle>
  <AlertDescription>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit
  </AlertDescription>
  <AlertAction />
</Alert>

<Alert variant="warning">
  <AlertIcon />
  <AlertTitle>Warning</AlertTitle>
  <AlertDescription>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit
  </AlertDescription>
  <AlertAction />
</Alert>

Chips & Badges

Small status indicators or tags.

import { useState } from "react";
import { Chip } from "~/components/ui/chip";

export function ChipExample() {
  const [active, setActive] = useState(false);

  return (
    <>
      {/* Regular */}
      <Chip>Chips</Chip>

      {/* Starts selected on first render */}
      <Chip defaultSelected>Chips</Chip>

      {/* Controlled */}
      <Chip selected={active} onSelectedChange={setActive}>
        Chips
      </Chip>
    </>
  );
}

Toast

Brief notification pill in 4 variants: error, loading, success, warning.

import { toast } from "~/components/ui/toast";

<Button onClick={() => toast.error("Error message")}>Error</Button>
<Button onClick={() => toast.loading("Loading")}>Loading</Button>
<Button onClick={() => toast.success("Success message")}>Success</Button>
<Button onClick={() => toast.warning("Warning message")}>Warning</Button>

Tooltip

Floating contextual information with info icon. Supports 4 directions and responsive desktop/mobile sizes.

import { Tooltip } from "~/components/ui/tooltip";

<Tooltip title="Tooltip Title" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." direction="top">
  <button>Hover me</button>
</Tooltip>

Check Box

Checkbox states with configurable shape and palette.

outline
solid
circle
Primary
Primary Light
Secondary
Secondary Light
Tertiary
Tertiary Light
Orange
Orange Light
import { Checkbox } from "~/components/ui/checkbox";

<Checkbox type="outline" color="primary" defaultChecked />
<Checkbox type="solid" color="secondary-light" defaultChecked />
<Checkbox type="circle" color="tertiary" defaultChecked />
<Checkbox type="solid" color="orange" />

Radio Button

Radio button states with configurable palette.

Radio
Primary
Primary Light
Secondary
Secondary Light
Tertiary
Tertiary Light
Orange
Orange Light
import { RadioGroup, RadioGroupItem } from "~/components/ui/radio-group";

<RadioGroup defaultValue="primary">
  <RadioGroupItem color="primary" value="primary" />
  <RadioGroupItem color="secondary-light" value="secondary-light" />
  <RadioGroupItem color="orange" value="orange" />
</RadioGroup>

Composed patterns

Molecules

Input Fields

Text input fields and variants.

Error Message

import { Input } from "~/components/ui/input";

<Input type="email" variant="email" placeholder="Email" leftSection={<Mail />} rightSection={<Mail />} />

// Left and right sections are optional, and can be any icons. If not provided, the default left and right sections for the variant will be used.
// Types and variants can be different, it is only for semantics.

Accordion

Vertically stacked set of interactive headings.

import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "~/components/ui/accordion";

<Accordion type="single" collapsible>
  <AccordionItem value="item-1">
    <AccordionTrigger>Is it accessible?</AccordionTrigger>
    <AccordionContent>Yes. It adheres to the WAI-ARIA design pattern.</AccordionContent>
  </AccordionItem>
</Accordion>

Cards

Displays content and actions on a single topic.

Card Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non ac mi nunc volutpat garavida malesuada eu massa vestibulum.

Centered Title

This card has its title centered.

Card with Image
Card Image

This card includes an image.

Card with Buttons

This card has a footer with buttons.

import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "~/components/ui/card";

<Card>
  <CardHeader>
    <CardTitle>Title</CardTitle>
  </CardHeader>
  <CardContent>...</CardContent>
</Card>

Modals & Dialogs

12 variations across Center / Wide alignment, 0–2 buttons, and optional close icon. All responsive — desktop card on larger screens, bottom-sheet on mobile.

import { CircleAlert } from "lucide-react";
import {
  Modal,
  ModalContent,
  ModalHeader,
  ModalTitle,
  ModalDescription,
  ModalFooter,
  ModalTrigger,
  ModalClose,
  ModalAction,
} from "~/components/ui/modal";

<Modal>
  <ModalTrigger>Open</ModalTrigger>
  <ModalContent
    alignment="center"
    icon={<CircleAlert strokeWidth={2.5} />}
    iconClassName="size-12 text-red-200"
    showCloseButton
    showIcon
  >
    <ModalHeader>
      <ModalTitle>Heading</ModalTitle>
      <ModalDescription>Description</ModalDescription>
    </ModalHeader>
    <ModalFooter>
      <ModalClose asChild>
        <ModalAction variant="primary">Confirm</ModalAction>
      </ModalClose>
    </ModalFooter>
  </ModalContent>
</Modal>

All 12 Variations

Tabs

A set of layered sections of content demonstrating all horizontal and vertical configurations.

Horizontal Configurations

orientation="horizontal" | variant="colored" | decor="numbered" | showArrows=true

Make changes to your account here.

orientation="horizontal" | variant="colored" | decor="numbered" | showArrows=false

Make changes to your account here.

orientation="horizontal" | variant="colored" | decor="diamonds" | showArrows=true

Make changes to your account here.

orientation="horizontal" | variant="colored" | decor="diamonds" | showArrows=false

Make changes to your account here.

orientation="horizontal" | variant="transparent" | decor="numbered" | showArrows=true

Make changes to your account here.

orientation="horizontal" | variant="transparent" | decor="numbered" | showArrows=false

Make changes to your account here.

orientation="horizontal" | variant="transparent" | decor="diamonds" | showArrows=true

Make changes to your account here.

orientation="horizontal" | variant="transparent" | decor="diamonds" | showArrows=

Make changes to your account here.

Vertical Configurations

orientation="vertical" | variant="colored" | decor="numbered" | showArrows=true

Make changes to your account here.

orientation="vertical" | variant="colored" | decor="numbered" | showArrows=false

Make changes to your account here.

orientation="vertical" | variant="colored" | decor="diamonds" | showArrows=true

Make changes to your account here.

orientation="vertical" | variant="colored" | decor="diamonds" | showArrows=

Make changes to your account here.

orientation="vertical" | variant="transparent" | decor="numbered" | showArrows=true

Make changes to your account here.

orientation="vertical" | variant="transparent" | decor="numbered" | showArrows=false

Make changes to your account here.

orientation="vertical" | variant="transparent" | decor="diamonds" | showArrows=true

Make changes to your account here.

orientation="vertical" | variant="transparent" | decor="diamonds" | showArrows=

Make changes to your account here.

import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs";

<Tabs defaultValue="account" orientation="vertical">
  <TabsList>
    <TabsTrigger value="account">Account</TabsTrigger>
  </TabsList>
  <TabsContent value="account">...</TabsContent>
</Tabs>

File Input

File upload control.

Click to open the File Input

import { FileInput } from "~/components/ui/file-input";
import { Button } from "~/components/ui/button";

<FileInput
  trigger={(open) => (
    <Button
      className="w-fit rounded-lg bg-secondary-50 px-8 py-3 font-bold text-neutral-100!"
      onClick={open}
      type="button"
    >
      Upload Document
    </Button>
  )}
/>

Application Sections

organisms

Contact Person

Component to display contact details.

Butuh Bantuan atau Punya Pertanyaan?

Hubungi kami pada kontak berikut

import ContactPerson from "~/components/elements/ContactPerson";

<ContactPerson
  firstContactUrl="https://wa.me/6289504139150"
  secondContactUrl="https://wa.me/6289504139150"
/>

Date Picker

A calendar date picker with day, month, and year views. Click the title to switch views. Supports min/max date constraints.

Mo
Tu
We
Th
Fr
Sa
Su
import { DatePicker } from "~/components/ui/date-picker";

export function MyDatePicker() {
  return (
    <DatePicker
      minDate={new Date(2025, 2, 1)}   // Mar 1, 2025
      maxDate={new Date(2027, 8, 30)}  // Sep 30, 2027
      onChange={(date) => console.log(date)}
    />
  );
}

Testimonials

User feedback and review display.

Lefi profile

Lefi

PIC IT Dev

Lorem ipsum dolor sit amet et ornare dignissim bibendum et. Dictum pretium ullamcorper dignissim pellentesque id bibendum sed.

Jocim profile

Jocim

VPIC IT Dev

Lorem ipsum dolor sit amet consectetur. Et ornare dignissim bibendum et. Viverra auctor interdum eleifend neque quis faucibus nunc scelerisque.

Tipen profile

Tipen

Staff Ahli IT Dev

Dictum pretium ullamcorper dignissim pellentesque id bibendum sed. Viverra auctor interdum eleifend neque quis faucibus nunc scelerisque.

Acan profile

Acan

PIC UI/UX

Sem non euismod risus viverra adipiscing natoque. Dictum pretium ullamcorper dignissim pellentesque id bibendum sed.

Rahel profile

Rahel

VPIC UI/UX

Lorem ipsum dolor sit amet et ornare dignissim bibendum et. Viverra auctor interdum eleifend neque quis faucibus nunc scelerisque.

// Placeholder for Testimonials component usage

Countdown

Timer component.

bola-bola ubi
00
Hours
:
bola-bola ubi
00
Minutes
:
bola-bola ubi
00
Seconds
import Countdown from "~/components/elements/Countdown"
<Countdown targetDate={new Date('2026-06-25T23:59:59+07:00')}/>