Design Systemjiajialin.me
Delights
Small details most people won't consciously notice, and why each one is there. 35 of them, all live.
Arriving
A notification with somewhere to go
A Notes notification announces the essay. It opens what it’s about, and swipes away to the right like on a Mac.
desktop/ExploringCard.tsxThe painting moves
A slow current drifts the painting under the glass, which bends and frosts whatever passes beneath it.
river/River.tsxThe painting keeps Stanford time
The river follows Jia’s clock: warm amber at the real Stanford sunset, cooler and dimmer after dark, untouched by day.
Try it: Add ?time=19:05 to the address to see golden hour.
river/StanfordLight.tsxIt remembers where you left off
Come back another day and a “Welcome back” notification offers what you last had open. It never opens anything by itself.
desktop/WelcomeBack.tsx
A tip that only shows once
A macOS Tip teaches Spotlight a few seconds in. It shows once, and not at all if you’ve already found it.
desktop/SpotlightTip.tsx
Spotlight
Search the whole site
⌘K, “/” or the magnifier opens Spotlight, or just start typing on the desktop. It searches everything on the site.
Try it: Press ⌘K on the desktop.
desktop/Spotlight.tsx
It says hi back
Type “hi”, “hire” or “coffee” and it answers like a person: “Say hi to Jia”.
desktop/spotlightIndex.ts
It’s honest about the résumé
Search “resume” and it says there isn’t one yet, and offers to email Jia for it.
desktop/spotlightIndex.ts
macOS, down to the details
Windows grow out of what opened them
Windows grow out of whatever opened them and shrink back into it. Focus follows.
desktop/Window.tsxThe dock behaves like a dock
Apps bounce once as they launch and get a dot while running. When Work is full screen, the dock hides until you reach for it.
desktop/Dock.tsxThe traffic lights work
Red closes, yellow minimizes, and green takes Work full screen and back.
desktop/TrafficLights.tsx
Minimize shrinks into the dock
Minimized windows shrink into a thumbnail at the end of the dock and come back exactly as you left them.
Try it: Open Art and click the yellow light.
desktop/Window.tsx
Contact opens right above its icon
Contact opens a small Messages window right above its dock icon, with email and LinkedIn as bubbles.
Try it: Click Contact in the dock.
desktop/windows/MessagesWindow.tsxWindows have a little weight
Small windows lean as you drag them, settle on a spring, and glide a little after a flick. Big ones just follow.
Try it: Open Contact and fling it across the desktop.
desktop/Window.tsxWindows stay where you left them
Leave the desktop and come back: every window is where you left it, minimized ones included.
desktop/DesktopProvider.tsxRight-click the desktop
Right-click the desktop for a real macOS menu where every item works. Get Info is the site’s colophon.
Try it: Right-click an empty part of the desktop.
desktop/DesktopMenu.tsxThe clock is Jia’s
The menu bar shows the time at Stanford, not yours.
desktop/StanfordClock.tsxSo is the weather
Beside the clock: Stanford’s weather right now, with the condition on hover.
desktop/StanfordWeather.tsx
Mission Control
Every open window spreads out so you can pick one, then goes back exactly where it was. Hold the pointer in the top-left corner to open it, like a macOS hot corner.
Try it: Open a few windows, then push the pointer into the top-left corner, or press fn F3.
desktop/MissionControl.tsxScroll to explore
Scroll down on the desktop and Spotlight opens, so you choose where to go: the work, the photos, the notes, or a way to say hi.
Try it: Scroll down on the desktop.
desktop/ScrollToSpotlight.tsx
Reading the work
Studies open as a sheet
Case studies open as a sheet inside Safari, with their own shareable URL. Back closes them.
case/CaseSheet.tsxSafari loads the page
Safari’s thin blue progress line runs under the address as a study opens.
desktop/windows/SafariWindow.tsxExpand grows in place
Expand grows the same sheet to fill Safari. Nothing reloads.
case/CaseSheet.tsxClosing goes one step at a time
Full page, then sheet, then grid. Focus lands back on the card you opened.
case/CaseSheet.tsxA wrong password shakes
A wrong password shakes the field, like the macOS login, and offers to email Jia for access.
case/LockPanel.tsxUnlocking starts from the top
After unlocking, a study starts at the top with focus on its title.
case/FocusOnArrival.tsxStudies print cleanly
⌘P gives a plain document: the whole study, finished, with no desktop around it.
Try it: Open a case study and press ⌘P.
case/CasePrint.tsxLong stories keep their place
Long stories get a sticky section nav that highlights where you are.
case/SectionNav.tsx
Art
A photo on the desktop
Under the About card, a Photos widget slowly crossfades through the film photos, and holds still while you hover it. Click it and Art opens on that same photo.
desktop/PhotosWidget.tsxPhotos grow out of their tiles
Photos grow out of their thumbnails and shrink back. Arrow keys step through.
desktop/windows/ArtWindow.tsxFilms play like they’re on a Mac
Films play under macOS-style controls that fade once you stop moving.
desktop/windows/FilmPlayer.tsx
Underneath

The blueprint doorway
Hover the “jia” mark and it turns into a blueprint. Click it, or Design System in the dock, and the desktop outlines every surface on the way here.
blueprint/BlueprintMark.tsxA Control Center for visitors
The switches icon opens a Control Center: turn motion off, or see the painting sharp. Your choices are remembered.
Try it: Click the switches icon next to the clock.
desktop/ControlCenter.tsxEvery animation has an off switch
Every effect has a designed still version for reduced motion, not just a switched-off one.
styles/motion.module.cssFocus is never lost
Focus moves into windows when they open and back when they close.
desktop/DesktopProvider.tsx
Accessibility
- Reduced motion gets a still composition. The painting holds still and “feel” is already written.
- Control Center puts the settings in view. Reduce Motion and a sharp painting, one click from the menu bar, remembered on your device.

- Everything works from the keyboard. Windows take focus, close with Esc, and hand focus back.
- Focus rings follow the surface. White on the painting, near-black on white.
- Glass keeps its text readable. A faint tint under the glass keeps white text at WCAG contrast over pale water.
- Nothing is said by motion alone. The painting is decoration; everything you can read is real HTML.
Surfaces
Every window and page, captured from the live site.

Desktop
The home screen: menu bar, About card, notification, headline and dock over the painting.
app/page.tsxFigma 8300:1685
Work · Safari window
The case studies, full screen. The dock hides like macOS; tabs jump between sections.
desktop/windows/SafariWindow.tsxFigma 8300:2053
Case study sheet
A study opens over the dimmed grid with its own URL. Esc, × or the grid closes it.
case/CaseSheet.tsx
Case study page
The same template as a full page, for direct links and refreshes.
case/CaseStudy.tsxFigma 8312:10220
Lock panel
Protected studies check the password on the server before loading the full story.
case/LockPanel.tsxFigma 8300:1196
About · Notes window
Apple Notes with two notes: about, and the essay.
desktop/windows/NotesAboutWindow.tsxFigma 8494:6464
Art · Photos window
Photography and films, opening into the Photos detail view.
desktop/windows/ArtWindow.tsxFigma 8241:16331
Color
Everything sits on a painting, so most of the palette is white at different strengths. Each swatch sits over the painting and over white.
text
- Aa
text-primary#ffffff - Aa
text-strongrgba(255, 255, 255, 0.9) - Aa
text-secondaryrgba(255, 255, 255, 0.8)
glass
glass-barrgba(255, 255, 255, 0.09)glass-widgetrgba(255, 255, 255, 0.13)glass-chiprgba(255, 255, 255, 0.1)glass-borderrgba(255, 255, 255, 0.2)glass-border-strongrgba(255, 255, 255, 0.33)glass-separatorrgba(255, 255, 255, 0.14)glass-dock-dividerrgba(255, 255, 255, 0.27)
window chrome
window-titlebar-borderrgba(255, 255, 255, 0.1)
Window controls
traffic-close#ff5c60traffic-minimize#fac800traffic-zoom#35c759traffic-borderrgba(0, 0, 0, 0.45)
Hero cards
card-about-bgrgba(255, 255, 255, 0.1)card-avatar-borderrgba(255, 255, 255, 0.38)card-row-bgrgba(255, 255, 255, 0.1)- Aa
card-row-mutedrgba(255, 255, 255, 0.7) - Aa
timeline-apple#9cc4ec - Aa
timeline-goldman#a9cfa0 - Aa
timeline-sequoia#efcb86 - Aa
timeline-meta#f0b7c6 - Aa
text-card-subtitlergba(255, 255, 255, 0.65)
Notification
notif-bgrgba(255, 255, 255, 0.82)notif-close-bgrgba(246, 246, 246, 0.92)notif-close-borderrgba(0, 0, 0, 0.12)notif-icon-bg#f0f0f5notif-icon-borderrgba(255, 255, 255, 0.21)- Aa
notif-title#0d0d0d - Aa
notif-time#808080 - Aa
notif-bodyrgba(38, 38, 38, 0.7)
Darkening behind the headline only
headline-scrimradial-gradient(ellipse 60% 40% at 50% 52%, rgba(0, 0, 0, 0.14) 0%, rgba(0, 0, 0, 0) 100%)
Dock
dock-mini-bg#f6f6f8glass-dockrgba(255, 255, 255, 0.15)dock-over-window-bgrgba(96, 104, 114, 0.5)
Glass windows
window-glass-bgrgba(255, 255, 255, 0.12)window-glass-scrimlinear-gradient(rgba(22, 36, 50, 0.3), rgba(22, 36, 50, 0.3))- Aa
window-glass-titlebarrgba(255, 255, 255, 0.08) window-glass-dividerrgba(255, 255, 255, 0.05)video-bgrgba(0, 0, 0, 0.85)
Keyboard focus rings
focus-ring-on-darkrgba(255, 255, 255, 0.95)focus-ring-on-lightrgba(29, 29, 31, 0.85)
TV window
tv-page#f5f3ef- Aa
tv-ink-muted#6e6e73 tv-rule#dedad3tv-barrgba(245, 243, 239, 0.86)
Figma
photos-content#f8f8f8- Aa
photos-inkrgba(0, 0, 0, 0.85) photos-item#1a1a1a- Aa
photos-labelrgba(0, 0, 0, 0.6) photos-accent#0088ffphotos-selectedrgba(0, 0, 0, 0.07)photos-dividerrgba(0, 0, 0, 0.06)photos-buttonrgba(0, 0, 0, 0.08)- Aa
photos-search-ink#727272 photos-search-bgrgba(255, 255, 255, 0.55)photos-tile#a3a3a3photos-play-overlayrgba(0, 0, 0, 0.35)photos-play-bgrgba(255, 255, 255, 0.85)photos-viewer#ffffff
One shading for every dock icon
dock-icon-edgergba(0, 0, 0, 0.08)
Dock tooltip, not in Figma
dock-tip-bgrgba(236, 236, 232, 0.82)dock-tip-borderrgba(255, 255, 255, 0.6)- Aa
dock-tip-ink#1d1d1f
Messages window
messages-page#ffffffmessages-barrgba(246, 246, 246, 0.92)messages-linergba(0, 0, 0, 0.08)messages-in#e9e9eb- Aa
messages-in-ink#000000 messages-meta#8e8e93
404 alert
alert-bgrgba(246, 246, 246, 0.84)alert-borderrgba(255, 255, 255, 0.6)- Aa
alert-ink#1d1d1f - Aa
alert-bodyrgba(29, 29, 31, 0.72) alert-buttonrgba(0, 0, 0, 0.06)alert-button-hoverrgba(0, 0, 0, 0.1)
Desktop right-click menu + Get Info
- Aa
context-menu-selectedrgba(0, 0, 0, 0.08) - Aa
context-menu-separatorrgba(0, 0, 0, 0.1) info-page#f6f6f6info-linergba(0, 0, 0, 0.08)- Aa
info-label#6e6e73
Mission Control
mission-dimrgba(10, 16, 24, 0.32)
Stanford light over the painting
light-goldenrgb(255, 158, 77)light-nightrgb(31, 43, 92)
Control Center
cc-tile-bgrgba(0, 0, 0, 0.05)cc-tile-hoverrgba(0, 0, 0, 0.08)cc-glyph-offrgba(0, 0, 0, 0.08)cc-glyph-on#1d1d1fspotlight-bgrgba(255, 255, 255, 0.82)- Aa
spotlight-ink#0d0d0d - Aa
spotlight-bodyrgba(38, 38, 38, 0.7) - Aa
spotlight-faint#6e6e73 spotlight-selectedrgba(0, 0, 0, 0.07)spotlight-dividerrgba(0, 0, 0, 0.06)
Window and page palettes (11 groups)
Photos widget
photo-widget-caption-scrimlinear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.45))
Safari "Work" window
menubar-selected-bgrgba(255, 255, 255, 0.22)scrollbar-thumbrgba(0, 0, 0, 0.28)
Safari 26
safari-capsule-bgrgba(255, 255, 255, 0.78)safari-capsule-dividerrgba(60, 60, 67, 0.16)safari-tab-hoverrgba(0, 0, 0, 0.04)safari-segment-bgrgba(0, 0, 0, 0.05)safari-page#ffffffsafari-borderrgba(0, 0, 0, 0.1)safari-toolbarrgba(236, 238, 241, 0.86)safari-dividerrgba(0, 0, 0, 0.06)safari-iconrgba(60, 60, 67, 0.8)safari-icon-dimrgba(60, 60, 67, 0.3)- Aa
safari-ink#1d1d1f - Aa
safari-ink-strong#1c1c1e - Aa
safari-ink-card#1d1d1f - Aa
safari-ink-muted#86868b safari-pill-bgrgba(255, 255, 255, 0.8)safari-pill-borderrgba(0, 0, 0, 0.1)
Notes "About" window
notes-chromergba(244, 245, 246, 0.9)notes-line#e0e0e0- Aa
notes-ink#1c1c1e - Aa
notes-muted#8e8e93 notes-selected#0a60ffnotes-selected-soft#e0f0ffnotes-tagrgba(0, 0, 0, 0.04)button-blue#007aff
Case study pages
case-page#f5f5f7case-window#ffffffcase-chrome#f9fafbcase-line#e5e7eb- Aa
case-ink#111827 - Aa
case-muted#6b7280 - Aa
case-body#374151 - Aa
case-faint#86868b - Aa
case-link#2563eb case-barrgba(255, 255, 255, 0.85)case-sheet-scrimrgba(0, 0, 0, 0.18)case-hero-tintlinear-gradient(90deg, #e2e4ec, #f1edf6 50%, #ebf1f5)case-badge-blue-bg#e0e6f8case-badge-blue#2563ebcase-badge-green-bg#ecfdf5case-badge-green#059669case-error#c81e1e
Protected stories
- Aa
case-body-strong#111827 case-accent#2563ebcase-accent-midrgba(37, 99, 235, 0.45)case-accent-softrgba(37, 99, 235, 0.18)case-bar-lead#60b8ff- Aa
case-bar-muted#cbd5e1 case-bar-current#d1d5dbcase-tint-bg#eff6ffcase-tint-line#bfdbfecase-missing-bg#fee2e2case-missing#b91c1ccase-partial-bg#fef3c7case-partial#92400ecase-unlocked-bg#ecfdf5case-unlocked-line#a7f3d0case-unlocked#047857case-insight-bg#fff7f8case-insight-linergba(244, 164, 176, 0.3)
Capsule
cover-accent#7297c5- Aa
cover-apple-title#e5e5ea cover-apple-glowrgba(248, 248, 248, 0.25)cover-apple-glow-hoverrgba(248, 248, 248, 0.5)- Aa
cover-sequoia-title#fff cover-sequoia-shadowrgba(0, 0, 0, 0.25)cover-lightrgba(255, 255, 255, 0.55)case-violet#6d28d9case-violet-bg#f5f3ffcase-violet-line#ddd6fecase-grad-warmlinear-gradient(225deg, #ff967d 14.6%, #f4a4ce 85.4%)case-grad-coollinear-gradient(225deg, #f4a4ce 14.6%, #6c8cee 85.4%)case-grad-deeplinear-gradient(225deg, #6c8cee 14.6%, #9678e6 85.4%)
Lock panel
lock-panel-bg#f5f5f7lock-icon-bg#e8e8edlock-line#d1d5db- Aa
lock-placeholder#9ca3af lock-arrow#60b8ff
Photos window
photos-glasslinear-gradient(90deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.1))photos-barlinear-gradient(90deg, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.2))photos-borderrgba(255, 255, 255, 0.2)
Player controls
player-barrgba(40, 40, 40, 0.55)player-bar-edgergba(255, 255, 255, 0.14)- Aa
player-ink#ffffff player-trackrgba(255, 255, 255, 0.3)
Safari page-load progress line
safari-progress#0a84ff
Materials
Liquid glass
The About card and dock use Figma's Glass. CSS can't refract, so a WebGL shader bends and frosts the painting under each surface and adds the light rim.
| Parameter | About card | Dock |
|---|---|---|
| Refraction | 0.5 | 0.71 |
| Depth | 30px | 49px |
| Dispersion | 0.4 | 0.56 |
| Frost | 0 | 90 |
| Light angle | 315° | 315° |
| Light intensity | 0.7 | 0.8 |
| Radius | 24px | 20px |
Glass type
The headline is white text run through an SVG filter: Figma's fill, shadows cut out of the letters so they don't show through, and a lit bevel.
Blur
blur-glass | 10px | windows, work tiers |
|---|---|---|
blur-menu-bar | 20px | |
blur-card | 12px | light cards, dock, glass windows |
Typography
- hey! i'm jiaInstrument Serif · The headline, and every case study title and display line 5 files
- i care about how thingsGeist · Headline line 2 and the case study cover art 4 files
- feelCedarville Cursive · One handwritten word 1 file
- Work · Art · About · ContactSF Pro Rounded · The default: menu bar, cards, dock labels, case study body copy 8 files
- Photography · 83 itemsSF Pro Text · Window chrome, Safari and Photos, the notification, dock tooltips 25 files
- Design and ProductInter · The Notes window, as in Apple Notes 1 file
Scale
- Aa
text-1010pxcaps eyebrows - Aa
text-1111pxtimestamps, dates, caps section headers - Aa
text-1212pxchips, subtitles, role rows - Aa
text-1313pxmenu items, body in windows, card copy - Aa
text-1414pxmenu bar name, expanded subtitle - Aa
text-1515pxAbout card description - Aa
text-1616pxwidget name - Aa
text-1717pxlock panel title - Aa
text-1818pxproject window title - Aa
text-2020pxfeatured case study title, Photos album title - Aa
text-2222pxnote title - Aa
text-2424pxexpanded widget name - Aa
text-2828pxTV window section titles (Etch) - Aa
text-5656pxfull-screen Work intro name
Weights
- regular 400
- medium 500
- semibold 600
- bold 700
Spacing
Figma's px values, kept as they were.
Radius
radius-bubble18pxradius-alert26pxradius-context-menu12pxradius-spotlight-field30pxradius-spotlight-row14pxradius-menu-item6pxradius-chip8pxchips, note rowsradius-tile-sm10pxcard icon tiles, images, notification iconradius-tile12pxdock app tiles, Get Info windowsradius-window16pxradius-glass20pxwidget, dock, notificationradius-glass-lg24pxexpanded widget, lock panel, app windowsradius-round999pxradius-facetime30pxradius-particles-panel18px
Shadows
photo-widget-shadownotif-shadowdock-shadowsafari-capsule-shadowsafari-card-shadownotes-shadowcase-shadowcase-sheet-shadowphotos-shadowdock-icon-shadowdock-tip-shadowalert-shadowspotlight-shadowshadow-barshadow-glassshadow-window-liftedfacetime-shadow
Motion
One set of timings and curves for every interaction, shared by CSS and JavaScript. Every effect also has a reduced-motion version.
--ease-outquick start, long soft landing--ease-expandsheet ⇄ full page: even sweep, ~50% at 1/4 time (liumichelle.com)--ease-inexits: get out of the way--ease-glidenot in Figma: TV film to and from the corner, eases in and settles--ease-springDuration
Components
Live pieces of the desktop, built from its own CSS.
