$
// DOCS v1.0

Component Library

Design system components, MDX content blocks, and UI primitives. Each entry includes props, variants, and live usage examples.

grid_view

Layout

>TerminalCard— Core wrapper component

The foundational building block. A glassmorphic card with macOS-style traffic light dots, mouse-following spotlight effect, header shine, and glow borders. Every section wraps in this.

Props
NameTypeDefaultDescription
childrenReactNodeCard content
titlestringHeader label text
iconstringMaterial Symbol icon name
variant'primary' | 'secondary'primaryPurple glow (primary) or gold glow (secondary)
classNamestringAdditional Tailwind classes
terminalPrimary Variant
> Default purple-accented card
history_eduSecondary Variant
> Gold-accented for emphasis
example.usage
<TerminalCard title="Section.sh" icon="terminal" variant="primary">
  <div className="p-4 font-mono text-[12px]">
    Content here
  </div>
</TerminalCard>

>BackgroundCanvas— Interactive dot grid background

Fixed canvas with mouse-parallax dot grid. Renders behind all content at z-index -1. Self-contained, no props.

example.usage
<BackgroundCanvas />

>PageTransition— Fade-in page wrapper

Wraps page content with a fade-in animation on mount. Single prop: children.

example.usage
<PageTransition>
  <YourPageContent />
</PageTransition>
bar_chart

Data Display

>ProfileCard

Identity card with avatar (click for jump animation), name, title, status dot, metadata grid, and resume download button. Self-contained.

example.usage
<ProfileCard />

>IntroSection

Hero section with animated SVG architecture diagram, headline, and subtitle.

example.usage
<IntroSection />

>SkillsSection

Categorized progress bars with terminal prompts. Categories: frontend (amber), backend (cyan), devops (purple), security (rose), ai (emerald).

example.usage
<SkillsSection />

>ExperienceSection

Accordion-style work history with hash IDs, ACTIVE badge, chevron rotation, and expandable detail rows including tech stack.

example.usage
<ExperienceSection />

>ProjectsSection

Open-source projects (primary variant) + Education cards (secondary variant). Expandable details with tech stack, repo links.

example.usage
<ProjectsSection />
feedback

Feedback

>CodeCopyBtn

Wraps code blocks and adds a copy-to-clipboard button via event delegation. Used in blog posts to enable copying code snippets.

example.usage
<CodeCopyHandler>
  <MDXRemote source={rawMDX} components={...} />
</CodeCopyHandler>

>CollapsibleSummary

<details> / <summary> styled collapsible for blog post summaries. Accepts title and children.

example.usage
<CollapsibleSummary title="cat summary.txt">
  <p>Content here</p>
</CollapsibleSummary>
code

MDX Content

These components are registered in lib/mdx-components.tsx and usable directly in blog MDX posts via the next-mdx-remote runtime.

>Callout— Note / Info / Warn / Error

Props
NameTypeDefaultDescription
type'note' | 'info' | 'warn' | 'error'noteCallout variant
titlestringOptional title override
list'ol' | 'ul'Renders children as ordered/unordered list
childrenReactNodeCallout body content
>TIP//
Use this for helpful tips and best practices.
>KEY INSIGHT//
Important conceptual information.
!CAUTION//
Potential pitfalls and gotchas.
CRITICAL//
Critical errors and anti-patterns.
>TAKEAWAYS//
  1. 1.Lists render as proper numbered items. 2. No need to write HTML tags. 3. Strips numbering automatically.
example.usage
<Callout type="info" title="Key Insight">
  Important conceptual information.
</Callout>

<Callout type="info" title="Takeaways" list="ol">
  1. First item
  2. Second item
</Callout>

>Banner— Full-width highlight

Props
NameTypeDefaultDescription
type'info' | 'success' | 'warning' | 'danger'infoBanner variant
titlestringBanner header
childrenReactNodeBanner body
action{ label: string; href: string }Optional action link
terminal
// New Release
Version 2.0 is now available with improved performance.
check_circle
// Deployed
All services are running and healthy.
warning_amber
// Deprecation
Legacy API v1 will be sunset on June 1st.
error
// Outage
Critical: Database replication lag detected.
example.usage
<Banner type="info" title="Release" action={{ label: "Changelog", href: "#" }}>
  Version 2.0 is now available.
</Banner>

>IconButton

Props
NameTypeDefaultDescription
iconstringMaterial Symbol icon name
variant'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'defaultButton visual style
size'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg'defaultButton size
childrenReactNodeOptional label text
hrefstringMakes it an anchor link
example.usage
<IconButton icon="play_arrow" variant="default">Run</IconButton>
<IconButton icon="delete" variant="destructive">Delete</IconButton>
<IconButton icon="settings" variant="outline" size="icon" />

>Grid / GridItem— Multi-column layout

Props
NameTypeDefaultDescription
cols2 | 3Number of grid columns
childrenReactNodeGridItem children
terminalColumn 1
Content for the first column. This layout is responsive — stacks on mobile.
codeColumn 2
Content for the second column. Use GridItem for individual cells.
example.usage
<Grid cols={2}>
  <GridItem title="Left" icon="terminal">
    Left column content
  </GridItem>
  <GridItem title="Right" icon="code">
    Right column content
  </GridItem>
</Grid>

>Columns— Minimal two-column layout

Props
NameTypeDefaultDescription
childrenReactNodeColumn content (each direct child is a column)
first'left' | 'center' | 'right'leftText alignment in first column
second'left' | 'center' | 'right'leftText alignment in second column
classNamestringAdditional Tailwind classes

A bare two-column grid with no background, border, or decoration. Each direct child becomes a column. Stacks to single column on mobile.

// First column (center)

Plain text with no wrapper decorations. Works with any content — paragraphs, lists, code, components.

// Second column (right)

Responsive — collapses to single column on mobile screens. Use gap-6 by default.

example.usage
<Columns first="center" second="right">
  <div>
    First column content (centered)
  </div>
  <div>
    Second column content (right-aligned)
  </div>
</Columns>

>HoverCard

Props
NameTypeDefaultDescription
triggerReactNodeHover target element
childrenReactNodeCard content on hover
side'top' | 'right' | 'bottom' | 'left'topPopover side

Hover over this text to see the hover card.

example.usage
<HoverCard trigger={<span>Hover me</span>}>
  <div className="text-emerald-400">&gt; Rich content</div>
  <div className="text-zinc-400">Any React children work here.</div>
              </HoverCard>

>Quote— Blockquote with attribution

Props
NameTypeDefaultDescription
fromstringAttribution (required)
linkstringOptional source URL
childrenReactNodeQuote text
This is a blockquote component with attribution and an optional source link.
example.usage
<Quote from="John Doe" link="https://example.com">
  This is a blockquote component with attribution.
</Quote>

>Tip— Inline tooltip

Props
NameTypeDefaultDescription
tipstringDescription text (required)
headstringGreen header; defaults to children if absent
linkstringOptional documentation URL shown at bottom
childrenReactNodeInline trigger text

Hover over this text to see the tip.

example.usage
{/* Minimal: head defaults to children */}
<Tip tip="This is an inline tooltip">this text</Tip>

{/* Full: custom head, description, and docs link */}
<Tip head="Sharding" tip="Splits tenants into isolated instances" link="https://example.com">Sharding</Tip>

>Popup— Dialog or Popover

Props
NameTypeDefaultDescription
triggerReactNodeClick target
variant'dialog' | 'popover'popoverDisplay type
titlestringPopup header
childrenReactNodePopup content
example.usage
<Popup trigger={<span>Open</span>} variant="popover" title="Quick Info">
  Lightweight popover content
</Popup>

<Popup trigger={<span>Open</span>} variant="dialog" title="Details">
  Full dialog modal content
</Popup>

>Tooltip

Props
NameTypeDefaultDescription
labelReactNodeTooltip text
childrenReactNodeElement with tooltip
side'top' | 'right' | 'bottom' | 'left'topTooltip side

Hover over this word to see the tooltip.

example.usage
<Tooltip label="Explanation text">
  <span>Hover target</span>
</Tooltip>

>ColorPalette

Props
NameTypeDefaultDescription
colors{ name: string; hex: string }[]Array of color swatches
//Color Palette
Primary
#d0bcff
Secondary
#e9c349
Emerald
#34d399
Surface
#131313
Error
#ffb4ab
Outline
#958ea0
example.usage
<ColorPalette colors={[
  { name: 'Primary', hex: '#d0bcff' },
  { name: 'Emerald', hex: '#34d399' },
]} />

>Table— Terminal-styled data table

Props
NameTypeDefaultDescription
columns{ key: string; header: string }[]Column definitions
rowsRecord<string, ReactNode>[]Row data keyed by column key
stripedbooleanfalseAlternate row background
compactbooleanfalseReduced padding
//TABLE
# Service# Status# Uptime# Latency
api-gateway● Healthy99.99%12ms
auth-service● Healthy99.97%8ms
db-primary● Degraded98.50%45ms
cache-cluster● Healthy99.99%1ms
example.usage
const columns = [
  { key: 'service', header: 'Service' },
  { key: 'status', header: 'Status' },
];
const rows = [
  { service: 'api-gateway', status: 'Healthy' },
];

<Table columns={columns} rows={rows} striped />

>TreeTable— Hierarchical tree view

Props
NameTypeDefaultDescription
nodesTreeNode[]Tree data with optional children
columns{ key: string; header: string }[]Additional columns
showConnectorsbooleantrueShow ├─ └─ connectors
//TREE
>src/
├─>components/
├─>button.tsx
└─>card.tsx
└─>lib/
├─>utils.ts
└─>hooks.ts
>public/
└─>favicon.ico
example.usage
const nodes = [
  {
    id: 'src',
    label: 'src/',
    children: [
      { id: 'components', label: 'components/', children: [...] },
      { id: 'lib', label: 'lib/', children: [...] },
    ],
  },
];

<TreeTable nodes={nodes} showConnectors />

>StatusPill— Inline status badges

Props
NameTypeDefaultDescription
status'todo' | 'progress' | 'done' | 'cancelled' | 'review' | 'hold'Status variant

Inline status pills that can be used inside paragraphs. Task TODO is not started,IN PROGRESS means actively working, and DONE means complete. Other variants include CANCELLED, IN REVIEW, and ON HOLD.

example.usage
Task <StatusPill status="done" /> means complete.</Code>

>Highlight— Inline colored span

Props
NameTypeDefaultDescription
type'success' | 'info' | 'warn' | 'error'successHighlight colour; defaults to terminal green
childrenReactNodeInline content to highlight

An inline <span> component for colour-highlighting text within paragraphs. Defaults to terminal green. Use info,warn, or error for other states.

example.usage
Default: <Highlight>green text</Highlight>
Info:    <Highlight type="info">info text</Highlight>
Warning: <Highlight type="warn">warning text</Highlight>
Error:   <Highlight type="error">error text</Highlight>

>TableCSV— String-prop table with icon mapping

Props
NameTypeDefaultDescription
childrenstringPipe-delimited table data (first line = headers, rest = rows)
sourcestringAlternative to children — multiline prop (MDX-safe)
iconMapstringSem;colon,separated: TOKEN,icon_name,color_class
columnColorsstringComma-separated text color classes per column
highlightColstringHeader name to highlight
stripedbooleanfalseAlternate row backgrounds
compactbooleanfalseReduced cell padding

Data is passed as children (TSX) or source prop (MDX). Tokens in cells are mapped to Material Symbol icons via iconMap.

//TABLE
ServiceStatusUptimeRegion
api-gatewaycheck_circle99.99us-east
auth-servicecheck_circle99.97eu-west
db-primarywarning98.50us-east
cache-clustercheck_circle99.99ap-southeast
analytics-workererror95.20us-east
example.usage
// TSX — use children:
<TableCSV iconMap="..." columnColors="..." highlightCol="Status" striped>
Service | Status | Uptime
api-gateway | UP | 99.99
</TableCSV>

// MDX — use source prop:
<TableCSV source="Service|Status|Uptime
api-gateway|UP|99.99
auth-service|DEGRADED|98.50" />
text_fields

Typography

>Font Family

// Sora (Headings)
The quick brown fox
Sora 600 / 700 / 800
// Inter (Body)
The quick brown fox
Inter variable 400–700
// Monospace (Terminal)
> The quick brown fox
Browser default monospace

>Terminal Patterns

> prompt prefix — command prefix
$ dollar prompt — shell command
// double slash — comment
[CATEGORY] brackets — category label
a1b2c3d — hash ID — short identifier
[1/3] — count — item counter

>Type Scale

// Display XL (42px)
Display XL
// Display LG (32px)
Display LG
// Heading 2 (24px)
# Heading 2
// Body (16px)
Body text using Inter.
// Terminal MD (12px)
> Standard terminal content size
// Terminal SM (10px)
// Labels, metadata, headers
monitoring

Charts

>Sparkline— SVG polyline chart

Props
NameTypeDefaultDescription
datanumber[]Data points to plot
colorstring#34d399Line and dot color
heightnumber60SVG height in pixels
showDotsbooleantrueShow data point dots
show_chartTraffic.sh

[ NETWORK_THROUGHPUT ]

pulseLatency.sh

[ RESPONSE_TIME_MS ]

example.usage
<Sparkline
  data={[12, 48, 35, 62, 58, 81, 74]}
  color="#34d399"
  height={60}
  showDots
/>

>AsciiBarChart— Block-character bars

Props
NameTypeDefaultDescription
bars{ label: string; value: number }[]Bar data (value 0–100)
maxLabelstringOptional header label
barCountnumber10Characters per bar
bar_chartMetrics.sh
//REQUESTS_PER_MONTH
JAN|
65%
FEB|
78%
MAR|
45%
APR|
92%
MAY|
88%
example.usage
<AsciiBarChart
  bars={[
    { label: 'JAN', value: 65 },
    { label: 'FEB', value: 78 },
  ]}
  maxLabel="REQUESTS_PER_MONTH"
/>

>CircularGauge— SVG arc gauge

Props
NameTypeDefaultDescription
valuenumberValue 0–100
labelstringLabel below gauge
colorstring#34d399Arc color
sizenumber64SVG dimension
speedSystem Gauges
87%CPU
64%MEM
42%DISK
95%NET
example.usage
<CircularGauge
  value={87}
  label="CPU"
  color="#34d399"
  size={64}
/>

>FrequencyBars— Animated spectrum analyzer

Props
NameTypeDefaultDescription
barCountnumber20Number of bars
intervalnumber200Animation interval (ms)
equalizerAudio Spectrum

[ FREQUENCY_ANALYSIS ]

example.usage
<FrequencyBars barCount={20} interval={200} />

>NetworkActivity— Animated node pulses

Props
NameTypeDefaultDescription
nodeCountnumber7Number of nodes
intervalnumber400Animation speed (ms)
hubNetwork Nodes

[ ACTIVE_CONNECTIONS ]

example.usage
<NetworkActivity nodeCount={7} interval={400} />

Effects

>MatrixRain— Canvas katakana rain

Props
NameTypeDefaultDescription
speednumber1Fall speed multiplier
fadeOpacitynumber0.05Trail fade opacity
rainMatrix Rain
example.usage
<MatrixRain speed={1} fadeOpacity={0.05} />

>TypewriterText— Character-by-character reveal

Props
NameTypeDefaultDescription
phrasesstring[]Array of phrases to cycle
speednumber60Typing speed (ms per char)
pausenumber1800Pause before delete (ms)
promptstring>Prompt character
showCursorbooleantrueShow blinking cursor
text_fieldsTypewriter
>
example.usage
<TypewriterText
  phrases={['ACCESS_GRANTED', 'FIREWALL_BYPASSED']}
  speed={60}
  pause={1800}
/>

>GlitchText— Random character glitch

Props
NameTypeDefaultDescription
textstringSYSTEM_ONLINEBase text
intervalnumber2000Glitch interval (ms)
glitchProbabilitynumber0.6Chance of glitch per interval
glitchDurationnumber120Glitch display duration (ms)
text_fieldsGlitch Text
SYSTEM_ONLINE
example.usage
<GlitchText
  text="SYSTEM_ONLINE"
  interval={2000}
  glitchProbability={0.6}
/>
play_circle

Interactive Demos

>TerminalChat— Simulated TTY chat

Props
NameTypeDefaultDescription
messagesChatMessage[]Array of { user, text, delay }
hostNamestringhostHost user identifier
chatChat.sh
connection_established — tty1session: active
>
example.usage
const messages = [
  { user: 'guest', text: 'Hello!', delay: 500 },
  { user: 'host', text: 'Hi there!', delay: 2000 },
];

<TerminalChat messages={messages} hostName="host" />

>TerminalTable— Process data table

Props
NameTypeDefaultDescription
rowsProcessRow[]Array of { pid, user, cpu, mem, cmd }
table_rowsProcess Table
PIDUSERCPU%MEM%COMMAND
4217root0.31.2nginx -g daemon off;
3892www2.14.7node server.js
2104postgres0.88.3postgres -D /var/lib/pg
1563root0.00.4sshd -D
example.usage
const rows = [
  { pid: 4217, user: 'root', cpu: '0.3', mem: '1.2', cmd: 'nginx' },
];

<TerminalTable rows={rows} />

>ChangelogView— Unified / split git log

Props
NameTypeDefaultDescription
commitsCommit[]Array of commit objects with hash, author, date, message, stats
historyGit Log.sh
8 commits
a3f2c9e2025-05-16ounakfeat: add reading progress bar to blog posts
+87-124 files
b7d1e4f2025-05-15ounakfix: resolve hydration errors in sparkline and gauges
+34-183 files
e8c5a2b2025-05-14ounakstyle: redesign blog listing with bigger titles and tag colors
+56-412 files
f4d9b3c2025-05-13ounakfeat: implement Table of Contents with intersection observer
+142-235 files
1a6e8d72025-05-12ounakfeat: add collapsible summary component for blog posts
+68-02 files
9c2b4f12025-05-11ounakrefactor: extract breadcrumbs into separate component
+95-523 files
3d8e7a52025-05-10ounakfeat: add Velite MDX blog pipeline with Shiki highlighting
+312-898 files
6f1c9e22025-05-09ounakfix: prevent background-canvas memory leaks on unmount
+15-81 files
example.usage
const commits = [
  { hash: 'a3f2c9e', author: 'ounak', date: '2025-05-16', message: 'feat: add feature', files: 4, added: 87, deleted: 12 },
];

<ChangelogView commits={commits} />

>CodeDiffView— Expandable file diff

Props
NameTypeDefaultDescription
filesDiffFile[]Array of diff files with hunks
differenceDiff.sh
changed files:3|+42-18diff --git a/* b/*
@@ -18,7 +18,7 @@ export function ReadingProgress() {
- background: progress >= 100
- ? 'linear-gradient(to right, #f59e0b, #fbbf24)'
- : 'linear-gradient(to right, #10b981, #6ee7b7)',
+ background: progress >= 100
+ ? 'linear-gradient(to right, #f59e0b, #fbbf24)'
+ : 'linear-gradient(to right, #10b981, #6ee7b7)',
/>
</div>
);
example.usage
const files = [
  {
    name: 'file.tsx',
    status: 'modified',
    hunks: [
      { type: '+', content: 'new line' },
      { type: '-', content: 'old line' },
    ],
  },
];

<CodeDiffView files={files} />