v2.0 · astro + react rebuild

The system powering this site.

Tokens, components, and patterns that keep every page visually coherent. Every example here is the real production component, rendered with the same code and the same props as the live site.

01 · Foundations

Tokens

Every value in the system lives in src/styles/tokens.css as a CSS custom property. Surfaces, accents, type, space, radius, shadow, and motion all share the same flat namespace.

01

Terminal-native

Mono labels and dot-grid backgrounds. Signals "this person ships code" before a single sentence is read.

02

One accent

Green (#00e896) is the only saturated color allowed for interaction. Blue, amber, and red are reserved for taxonomy.

03

Quiet by default

Borders sit at 7% white. Surfaces sit one shade above the navy floor. Loud is earned, never inherited.


01 · Foundations · Color

Color

A navy surface ramp, one interaction accent, four taxonomy accents, and a text scale. Click any token to copy var(--name) to your clipboard.

Surface

5 tokens

Page floor. The lowest surface.

Section bands and nav scrim.

Inset blocks, chip backgrounds.

Highest-elevation navy, rarely used.

Default card and panel surface.

Text

4 tokens

Aa

Primary body and heading color.

Aa

Secondary copy, descriptions, ledes.

Aa

Tertiary captions, dim labels, dots.

Aa

Low-emphasis captions on dark imagery.

Brand

2 tokens

Primary accent. The only saturated interaction color.

Primary hover state for buttons and links.

Accent

5 tokens

Design taxonomy. Used in Tag variant="design".

AI and warning treatments. Tag variant="ai".

Failure, danger, destructive actions.

Figma community accent. Used on /community.

Design system tag, secondary accent.

Border

2 tokens

Default hairline border between sections and cards.

Slightly stronger border for hover states and dividers.

Language

6 tokens

TypeScript language dot on repo cards.

JavaScript language dot.

HTML language dot.

CSS language dot.

Figma language dot for design-only projects.

Shopify Liquid language dot.

Accent tints

4 intensities × 5 accents

green --green-bg-soft --green-bg --green-border --green-border-strong
blue --blue-bg-soft --blue-bg --blue-border --blue-border-strong
amber --amber-bg-soft --amber-bg --amber-border --amber-border-strong
red --red-bg-soft --red-bg --red-border --red-border-strong
fig --fig-bg-soft --fig-bg --fig-border --fig-border-strong

Overlays & scrims

6 tokens

TokenValueUse
--overlay-gridwhite / 3.5%Dot & line backdrop grids
--overlay-hairlinewhite / 5%Faint surface tint over panels
--overlay-photoblack / 40%Image-darkening fill
--scrim-navnavy / 92%Sticky nav backdrop
--scrim-modalblack / 94%Lightbox / modal scrim
--text-disabledwhite / 50%Low-emphasis captions

01 · Foundations · Typography

Typography

Two families. DM Sans for long-form and headings, Space Mono for every label, eyebrow, button, stat, and code-feeling fragment.

H1 · DM Sans 700
clamp(2rem, 4.6vw, 3.4rem)
line-height 1.1, tracking -.02em

I design products
and I ship them.

H2 · DM Sans 700
clamp(1.5rem, 3vw, 2rem)

Projects I've designed, built, and shipped

H3 · DM Sans 600
1rem · line-height 1.3

BrainTech, Teen Tech Education Platform

Body · DM Sans 400
15px · line-height 1.65

Lead UX/UI Engineer specializing in AI SaaS, product design, and front-end engineering.

Eyebrow · Space Mono 700
10px · tracking .14em

Selected work


01 · Foundations · Space & radius

Space & radius

Six radius steps cover every surface. Sections breathe at 5rem, sub-sections at 3.5rem. Micro spacing is a 6-step ramp from 4px to 24px.

Radius scale

6 tokens

--r-xs · 2px · thin bars
--r-sm · 4px · tags, mini chips
--r · 8px · controls, chips
--r2 · 12px · cards, panels
--r3 · 16px · large surfaces
--r4 · 20px · pills, badges

Micro spacing

6 tokens

TokenValueUse
--space-xs4pxTight stacks, icon-to-label gaps
--space-sm8pxDefault chip and button gap
--space-md12pxCard internals, list rows
--space-lg16pxSection internals, grid gaps
--space-xl20pxPill padding, looser groupings
--space-2xl24pxCard padding, hero internals

Section rhythm

6 tokens

TokenValueUse
Section default5rem 0Top-level page sections
Section sm3.5rem 0Inset sub-sections
Container defaultmax 1060pxDefault page content width
Container widemax 1280pxGalleries, full-width cases
Container narrowmax 720pxLong-form text, 404, about
--trans.18s easeDefault transition timing

01 · Foundations · Shadow & glow

Shadow & glow

Three elevation steps. All shadows are tuned for dark surfaces and use a strong negative y-offset to pull the highlight up.

Elevation

3 tokens

Default card lift on dark panels.

Hero or feature card hover lift.

Modal and lightbox elevation.

Glow

2 patterns

box-shadow: 0 0 6px var(--green-border-strong)

Pulsing live indicator (HeroDemo, ticker, status badges).

box-shadow: 0 0 0 3px rgba(77,159,255,.12)

Halo glow for category dots (civic, case-study).


01 · Foundations · Motion

Motion

One default transition timing token, three named easing curves used across the site. Everything respects prefers-reduced-motion.

Token / curveValueUse
--transall 0.18s easeDefault transition on any interactive surface
cubic-bezier(0.22, 1, 0.36, 1)Out-expoCard lift, chip entry stagger, smooth reveals
steps(2)DiscreteBlinking caret on hero status indicator
ease-in-outSymmetricPulsing live dots (1.6s loop)

02 · Components · Button

Button

Two variants: primary for the action that earns the green, and outline for everything else. A small sm size for inline CTAs.

Button

<Button href="/work" variant="primary">View my work</Button>

02 · Components · Chip

Chip

Neutral pill for skill and tool labels.

Chip

React TypeScript AI/LLM integration Design systems
<Chip>React</Chip>

02 · Components · Tag

Tag

Four semantic variants. Each variant carries an accent color that maps directly into the color taxonomy.

Tag

UX Design React AI Integration Neutral
<Tag variant="design">UX Design</Tag>

02 · Components · Eyebrow

Eyebrow

Tiny mono label above section headings. Color prop ties into the accent palette.

Eyebrow

Selected work

figma community

/ AI session

design system

<Eyebrow color="fig">figma community</Eyebrow>

02 · Components · Skill bars

Skill bars

Numeric proficiency display used on /about. Bars fill on mount.

Skill bars

UX / Product
React / Front-end
Design systems
<SkillBars skills={[...]} />

03 · Patterns · Project card

Project card

The editorial variant is the one used on the home page now. The showcase, featured, split, and compact variants are kept for flexibility on listing pages.

Featured

AI Require: Requirements Gathering Platform
UX Design React AI Integration

AI Require: Requirements Gathering Platform

An AI SaaS for requirements gathering. I led design and the React front-end and built the human review step into the AI pipeline, across the V1.8 → V2.3 rebuild.

2023–2024 React · Anthropic API pinned

Split

Rebrand · 6-page site

ThunderBall Scout
Conquest Customs

Rebrand Web Design

ThunderBall Scout: Conquest Customs Rebrand

2022 Rebrand · Web Design

Compact (no screenshot, vis block)

EdTech · mobile + web

BrainTech
Redesign v2

UX Design Design System

BrainTech: Teen Tech Education Platform

A redesign of a teen tech-education platform: 10 production-grade screens and a complete design system, across mobile and web.

2024 Design System · HTML

03 · Patterns · Repo stack

Repo stack

GitHub-style repo cards stacked in a 3D deck, auto-rotating through the active project every 4.2 seconds.


03 · Patterns · Hero demo

Hero demo

Live AI-Require demo on the home page. Types a transcript, parses it into a structured requirement, cycles three examples. Prev / next + clickable pips, plus a reduced-motion fallback.

AI Require · live
REQ-042
transcriptSarah · PM

"_"

REQ-042requirement
  • type:feature
  • actor:admin
  • condition:viewing user list
  • spec:show last_login_at
  • priority:medium

04 · Brand · Palettes

Brand palettes

Each case study scopes its own brand palette via [data-brand] on the page root. Components read --brand, --brand-pop, etc.

BrainTech
[data-brand="braintech"]
Bean 2 Ground
[data-brand="bean2ground"]
ThunderBall
[data-brand="thunderball"]
CloverX
[data-brand="cloverx"]