Available for new opportunities! Ready to take on your next project

Design System

A comprehensive design system that ensures visual consistency across the portfolio. This system includes colors, typography, spacing, shadows, and more.

Colors

Our color system uses a 100-point scale (50, 100, 150, 200, 300...900) where 500 is typically the base color.

Gray Scale

Gray 0
#FFFFFF
Gray 50
#F9FAFB
Gray 100
#F3F4F6
Gray 150
#E5E7EB
Gray 200
#D1D5DB
Gray 300
#9CA3AF
Gray 400
#6B7280
Gray 500
#4B5563
Gray 600
#374151
Gray 700
#1F2937
Gray 800
#111827
Gray 900
#0F172A
Gray 950
#020617
Gray 1000
#000000

Primary (Sky Blue)

Primary 50
#F0F9FF
Primary 100
#E6F7FF
Primary 150
#B3E5FF
Primary 200
#80D4FF
Primary 300
#4DC2FF
Primary 400
#1AC9FF
Primary 500
#0099CC
Primary 600
#007399
Primary 700
#005B7A
Primary 800
#004D66
Primary 900
#002633

Accent Colors

Vibrant colors used for variety and visual interest throughout the portfolio.

Sky Blue

Sky Blue 50
#F0F9FF
Sky Blue 100
#E6F7FF
Sky Blue 150
#B3E5FF
Sky Blue 200
#80D4FF
Sky Blue 300
#4DC2FF
Sky Blue 400
#1AC9FF
Sky Blue 500
#00BFFF
Sky Blue 600
#0099CC
Sky Blue 700
#007399
Sky Blue 800
#004D66
Sky Blue 900
#002633

Coral

Coral 50
#FFF5F5
Coral 100
#FFE9E9
Coral 150
#FFCDCD
Coral 200
#FFB0B0
Coral 300
#FF8E8E
Coral 400
#FF7C7C
Coral 500
#FF6B6B
Coral 600
#FF4444
Coral 700
#E62E2E
Coral 800
#B32323
Coral 900
#801919

Emerald

Emerald 50
#ECFDF5
Emerald 100
#D1FAE5
Emerald 150
#A7F3D0
Emerald 200
#6EE7B7
Emerald 300
#34D399
Emerald 400
#22C587
Emerald 500
#10B981
Emerald 600
#0D9468
Emerald 700
#047857
Emerald 800
#065F46
Emerald 900
#064E3B

Amber

Amber 50
#FFFBEB
Amber 100
#FEF3C7
Amber 150
#FDE68A
Amber 200
#FCD34D
Amber 300
#FBBF24
Amber 400
#FAAD14
Amber 500
#F59E0B
Amber 600
#D97706
Amber 700
#B45309
Amber 800
#92400E
Amber 900
#78350F

Indigo

Indigo 50
#EEF2FF
Indigo 100
#E0E7FF
Indigo 150
#C7D2FE
Indigo 200
#A5B4FC
Indigo 300
#818CF8
Indigo 400
#7478F5
Indigo 500
#6366F1
Indigo 600
#4F46E5
Indigo 700
#4338CA
Indigo 800
#3730A3
Indigo 900
#312E81

Pink

Pink 50
#FDF2F8
Pink 100
#FCE7F3
Pink 150
#FBCFE8
Pink 200
#F9A8D4
Pink 300
#F472B6
Pink 400
#F05DAA
Pink 500
#EC4899
Pink 600
#DB2777
Pink 700
#BE185D
Pink 800
#9D174D
Pink 900
#831843

Cyan

Cyan 50
#ECFEFF
Cyan 100
#CFFAFE
Cyan 150
#A5F3FC
Cyan 200
#67E8F9
Cyan 300
#22D3EE
Cyan 400
#18BCEB
Cyan 500
#0EA5E9
Cyan 600
#0284C7
Cyan 700
#0369A1
Cyan 800
#075985
Cyan 900
#0C4A6E

Purple

Purple 50
#FAF5FF
Purple 100
#EDE9FE
Purple 150
#DDD6FE
Purple 200
#C4B5FD
Purple 300
#A78BFA
Purple 400
#9973F8
Purple 500
#8B5CF6
Purple 600
#7C3AED
Purple 700
#6D28D9
Purple 800
#5B21B6
Purple 900
#4C1D95

Red

Red 50
#FEF2F2
Red 100
#FEE2E2
Red 150
#FECACA
Red 200
#FCA5A5
Red 300
#F87171
Red 400
#F65B5B
Red 500
#EF4444
Red 600
#DC2626
Red 700
#B91C1C
Red 800
#991B1B
Red 900
#7F1D1D

Semantic Colors

Success Light
#34D399
Success Base
#10B981
Success Dark
#0D9468
Error Light
#F87171
Error Base
#EF4444
Error Dark
#DC2626
Warning Light
#FBBF24
Warning Base
#F59E0B
Warning Dark
#D97706
Info Light
#22D3EE
Info Base
#0EA5E9
Info Dark
#0284C7

Typography

Font Sizes

Extra Large Heading
5XL - 3rem (48px)
Large Heading
4XL - 2.25rem (32px)
Medium Heading
3XL - 1.875rem (16px)
Small Heading
2XL - 1.5rem (16px)
Extra Large Text
XL - 1.25rem (16px)
Large Text
Large - 1.125rem (16px)
Base Text (Default)
Base - 1rem (16px)
Small Text
Small - 0.875rem (0px)
Extra Small Text
XSmall - 0.75rem (0px)

Font Weights

The quick brown fox jumps over the lazy dog
Light - 300
The quick brown fox jumps over the lazy dog
Normal - 400
The quick brown fox jumps over the lazy dog
Medium - 500
The quick brown fox jumps over the lazy dog
Semibold - 600
The quick brown fox jumps over the lazy dog
Bold - 700

Spacing

Consistent spacing scale for layouts and components.

0
0 (0px)
50
0.125rem (0px)
100
0.25rem (0px)
150
0.375rem (0px)
200
0.5rem (0px)
300
0.75rem (0px)
400
1rem (16px)
500
1.25rem (16px)
600
1.5rem (16px)
700
2rem (32px)
800
2.5rem (32px)
900
3rem (48px)
1000
4rem (64px)
1100
5rem (80px)
1200
6rem (96px)
xs
0.25rem (0px)
sm
0.5rem (0px)
md
0.75rem (0px)
lg
1rem (16px)
xl
1.25rem (16px)
2xl
1.5rem (16px)
3xl
2rem (32px)
4xl
3rem (48px)
5xl
4rem (64px)
6xl
6rem (96px)

Shadows

Shadow definitions for elevation and depth.

100
0 1px 2px rgba(0, 0, 0, 0.05)
200
0 2px 4px rgba(0, 0, 0, 0.06)
300
0 4px 6px rgba(0, 0, 0, 0.07)
400
0 6px 12px rgba(0, 0, 0, 0.08)
500
0 8px 16px rgba(0, 0, 0, 0.1)
600
0 12px 24px rgba(0, 0, 0, 0.12)
700
0 16px 32px rgba(0, 0, 0, 0.15)
800
0 20px 40px rgba(0, 0, 0, 0.2)
900
0 24px 48px rgba(0, 0, 0, 0.25)
inner
inset 0 2px 4px rgba(0, 0, 0, 0.06)
none
none
sm
0 1px 2px rgba(0, 0, 0, 0.05)
base
0 4px 6px rgba(0, 0, 0, 0.07)
md
0 6px 12px rgba(0, 0, 0, 0.08)
lg
0 8px 16px rgba(0, 0, 0, 0.1)
xl
0 12px 24px rgba(0, 0, 0, 0.12)
buttonHover
0 6px 12px rgba(0, 0, 0, 0.08)
buttonActive
0 2px 4px rgba(0, 0, 0, 0.06)
darkMd
0 6px 12px rgba(0, 0, 0, 0.08)

Icons

FontAwesome icons used throughout the portfolio for consistent iconography. All icons adapt to the current theme.

Solid Icons

Commonly used solid icons for actions, UI elements, and general purposes.

faHeart
faCode
faLightbulb
faRocket
faStar
faCheck
faTimes
faExclamationTriangle
faInfoCircle
faSearch
faUser
faCog
faEnvelope
faPhone
faMapMarkerAlt
faHome
faCamera
faDownload
faUpload
faTrash
faEdit
faPlus
faMinus
faArrowRight
faArrowLeft
faChevronDown
faChevronUp
faBars
faGlobe

Brand Icons

Technology and social media brand icons used in the portfolio.

faGithub
faLinkedin
faTwitter
faFigma
faReact
faNodeJs
faPython
faJsSquare
faHtml5
faCss3Alt

Regular Icons

Outlined regular icons for a lighter visual weight.

faCopyright
faClock
faFile
faFolder

Icon Colors

Icons can be styled with any color from the design system palette.

Accent Color Variations
Icons styled with different accent colors from the design system.
Coral
Amber
Emerald
Amber 400
Indigo
Cyan
Purple
Sky Blue
Semantic Colors
Icons using semantic colors for status indicators and feedback.
Success
Error
Warning
Info

Usage Examples

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faHeart, faCode, faCheck } from "@fortawesome/free-solid-svg-icons";
import { faGithub } from "@fortawesome/free-brands-svg-icons";
import { colors } from '../styles/designSystem';

// Basic usage
<FontAwesomeIcon icon={faHeart} />

// With inline color styling
<FontAwesomeIcon
  icon={faHeart}
  style={{ fontSize: '2rem', color: colors.coral[500] }}
/>

// With styled-components
const StyledIcon = styled(FontAwesomeIcon)`
  font-size: 2rem;
  color: ${colors.emerald[500]};
  margin-right: ${spacing.md};

  &:hover {
    color: ${colors.emerald[600]};
  }
`;

<StyledIcon icon={faCode} />

// Using theme colors
const ThemedIcon = styled(FontAwesomeIcon)`
  font-size: 1.5rem;
  color: ${({ theme }) => theme.primary};
`;

// Semantic color usage
<FontAwesomeIcon
  icon={faCheck}
  style={{ color: colors.success.base }}
/>

// In a button with color
<DemoButton>
  <FontAwesomeIcon icon={faGithub} style={{ color: '#fff' }} />
  View on GitHub
</DemoButton>

Buttons

Interactive button components with consistent states and behaviors.

Primary Button States
Default primary button with hover, active, and disabled states.
Secondary Button States
Outlined secondary button with transparent background.
Button Color Variants
Primary buttons using different accent colors from the design system.

Usage Examples

import { primaryButtonBase } from '../styles/buttonStyles';

const Button = styled.button`
  ${primaryButtonBase}
  background-color: ${colors.primary[500]};
`;

// With loading state
const LoadingButton = styled.button`
  ${primaryButtonBase}
  ${({ loading }) => loading && `
    position: relative;
    color: transparent;

    &::after {
      content: '';
      position: absolute;
      width: 16px;
      height: 16px;
      border: 2px solid #ffffff;
      border-radius: 50%;
      border-top-color: transparent;
      animation: spin 0.6s linear infinite;
    }
  `}
`;

Bullet Lists

Styled bullet lists with automatic formatting, accent color bullets, and support for title/description splits. Used primarily in case study pages for Key Features sections.

Live Examples

The SectionBlock component automatically detects bullet points (starting with •, -, or *) and renders them with styled bullets.

Simple Bullet List
Basic bullet points without titles, using the Coral accent color.

Features

  • Responsive design that works across all devices
  • Accessibility-first approach following WCAG guidelines
  • Performance optimized with lazy loading and code splitting
Bullet List with Titles
Bullet points with title: description format, using the Emerald accent color.

Key Features Delivered

  • Promotional Flow DesignLed UX for new promotional experiences that drove user engagement and conversion
  • Line & Accessory AdditionImproved end-to-end workflows for adding lines and purchasing accessories
  • Mobile App NavigationEnhanced overall navigation architecture to improve discoverability and user flows
  • Chat Experience OptimizationStreamlined chat support interfaces for faster, clearer customer interactions
Different Accent Colors
The bullet color automatically matches the section's accent color.

Indigo Bullets

  • First feature item
  • Second feature item
  • Third feature item

Purple Bullets

  • Design SystemBuilt scalable component library
  • User ResearchConducted extensive usability testing
  • PrototypingCreated high-fidelity interactive prototypes

Features

The bullet list component includes several smart features:

  • Automatic Detection: Detects bullet characters (•, -, *) and converts to styled bullets
  • Title Parsing: Automatically splits "Title: Description" format with bold titles
  • Accent Colors: Bullet dots inherit the section's accent color
  • Perfect Alignment: Bullets stay aligned at the top while text wraps naturally
  • Consistent Spacing: Uses design system spacing tokens for uniformity

Usage Example

import SectionBlock from '../components/sub-components/SectionBlock';
import { colors } from '../styles/designSystem';

// Basic usage with bullet points
<SectionBlock
  title="Key Features"
  accentColor={colors.emerald[500]}
  paragraphs={[
    "• First feature description",
    "• Second feature description",
    "• Third feature description"
  ]}
/>

// With title: description format
<SectionBlock
  title="Deliverables"
  accentColor={colors.coral[500]}
  paragraphs={[
    "• Design System: Built comprehensive component library for consistency",
    "• User Research: Conducted 20+ usability tests with target users",
    "• Prototyping: Created high-fidelity prototypes for stakeholder review"
  ]}
/>

// Alternative bullet characters work too
<SectionBlock
  title="Technical Skills"
  accentColor={colors.indigo[500]}
  paragraphs={[
    "- React and TypeScript for component development",
    "- Figma for design and prototyping",
    "* Accessibility testing with screen readers"
  ]}
/>

Implementation Details

// The SectionBlock component automatically handles bullet detection
const hasBulletPoints = paragraphs?.some(para =>
  typeof para === 'string' &&
  (para.trim().startsWith('•') ||
   para.trim().startsWith('-') ||
   para.trim().startsWith('*'))
);

// Styled bullet with accent color
const BulletItem = styled.li`
  display: flex;
  align-items: flex-start;
  gap: ${spacing[400]};

  &::before {
    content: "";
    min-width: 8px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background-color: ${({ accentColor, theme }) =>
      accentColor || theme.primary};
    margin-top: 10px;
    flex-shrink: 0;
  }
`;

Metrics Cards

Interactive metric cards with hover effects, colored borders, and responsive grid layout. Used to showcase key performance indicators and project impact in case studies.

Live Examples

Metrics cards automatically arrange in a responsive grid and lift on hover to provide visual feedback.

Basic Metrics
Simple metrics with values and labels.
50%
Increase in Engagement
2x
Faster Load Time
100K+
Active Users
Metrics with Descriptions
Detailed metrics including descriptive text for additional context.
Millions
User Reach

Features used by Verizon's nationwide customer base

Enterprise
Design System

Contributed to Verizon's scalable design system

Multiple
High-Priority Projects

Managed concurrent design initiatives with tight deadlines

Different Accent Colors
Each metric card can have its own unique accent color for the border and value.
95%
User Satisfaction

Based on post-launch surveys and feedback

30%
Time Saved

Reduction in average task completion time

4.8/5
App Store Rating

Consistently high ratings from users

Features

The metrics card component provides several key features:

  • Responsive Grid: Auto-fit layout with minimum 200px cards that adapts to screen size
  • Hover Effects: Cards lift up and enhance shadow on hover for interactivity
  • Accent Colors: Left border and value text use customizable accent colors
  • Optional Descriptions: Support for additional context below the label
  • Smooth Transitions: Animated hover states using design system transitions

Usage Example

import MetricsCard from '../components/sub-components/MetricsCard';
import { colors } from '../styles/designSystem';

// Basic usage
<MetricsCard
  metrics={[
    {
      value: "50%",
      label: "Conversion Rate",
      color: colors.emerald[500]
    },
    {
      value: "2.5s",
      label: "Load Time",
      color: colors.cyan[500]
    }
  ]}
/>

// With descriptions
<MetricsCard
  metrics={[
    {
      value: "Millions",
      label: "User Reach",
      description: "Features used by nationwide customer base",
      color: colors.coral[500]
    },
    {
      value: "Enterprise",
      label: "Scale",
      description: "Built for large-scale deployment",
      color: colors.indigo[500]
    },
    {
      value: "15+",
      label: "Integrations",
      description: "Connected with major platforms",
      color: colors.purple[500]
    }
  ]}
/>

Implementation Details

import styled from "styled-components";
import { spacing, typography, shadows, borderRadius, transitions } from "../../styles/designSystem";

const MetricsGrid = styled.div`
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: ${spacing[600]};
    margin: ${spacing[800]} 0;
`;

const MetricCard = styled.div`
    background: ${({ theme }) => theme.cardBackground};
    border-radius: ${borderRadius[400]};
    padding: ${spacing[600]};
    box-shadow: ${shadows[300]};
    border-left: 4px solid ${({ accentColor, theme }) => accentColor || theme.primary};
    transition: ${transitions.base};

    &:hover {
        transform: translateY(-4px);
        box-shadow: ${shadows[500]};
    }
`;

const MetricValue = styled.div`
    font-size: ${typography.fontSize[800]};
    font-weight: ${typography.fontWeight.bold};
    color: ${({ accentColor, theme }) => accentColor || theme.primary};
    margin-bottom: ${spacing[200]};
    line-height: ${typography.lineHeight.tight};
`;

const MetricLabel = styled.div`
    font-size: ${typography.fontSize[300]};
    color: ${({ theme }) => theme.textSecondary};
    line-height: ${typography.lineHeight.snug};
    font-weight: ${typography.fontWeight.medium};
`;

const MetricDescription = styled.p`
    font-size: ${typography.fontSize[200]};
    color: ${({ theme }) => theme.text};
    margin: ${spacing[300]} 0 0 0;
    line-height: ${typography.lineHeight.relaxed};
`;

Data Structure

// Metric object interface
interface Metric {
  value: string;          // The main metric value (e.g., "50%", "2x", "Millions")
  label: string;          // The metric label (e.g., "User Reach", "Conversion Rate")
  description?: string;   // Optional descriptive text for context
  color: string;          // Accent color for border and value (from design system)
}

// Usage in case study template
const metrics = [
  {
    value: "Millions",
    label: "User Reach",
    description: "Features used by nationwide customer base",
    color: colors.emerald[500]
  }
];

Status Messages

Status and notification messages for user feedback (used in forms and alerts).

Thanks! Your message has been sent. I'll get back to you soon.
Something went wrong. Please try again.
This action cannot be undone. Please proceed with caution.
Here's some helpful information about this feature.

Usage Example

import styled from "styled-components";

export const StatusMessage = styled.div`
  padding: 1rem;
  border-radius: 0.5rem;
  font-size: 0.95rem;
  line-height: 1.5;

  background: ${({ type, theme }) =>
    type === "success"
      ? theme.mode === "dark"
        ? "rgba(16, 185, 129, 0.2)"
        : "rgba(16, 185, 129, 0.1)"
      : theme.mode === "dark"
      ? "rgba(239, 68, 68, 0.2)"
      : "rgba(239, 68, 68, 0.1)"};

  border: 1px solid ${({ type }) =>
    type === "success" ? "#10B981" : "#EF4444"};

  color: ${({ type, theme }) =>
    type === "success"
      ? theme.mode === "dark"
        ? "#34D399"
        : "#059669"
      : theme.mode === "dark"
      ? "#F87171"
      : "#DC2626"};
`;

// Usage in components
{submitStatus.message && (
  <StatusMessage type={submitStatus.type}>
    {submitStatus.message}
  </StatusMessage>
)}

Usage

Import and use the design system in your components:

Importing

import { colors, spacing, typography, shadows } from '../styles/designSystem';

Using in Styled Components

const Button = styled.button`
  background: ${colors.primary};
  padding: ${spacing.md} ${spacing.xl};
  font-size: ${typography.fontSize.base};
  border-radius: ${borderRadius.full};
  box-shadow: ${shadows.base};

  &:hover {
    box-shadow: ${shadows.md};
  }
`;

Using Theme Properties

const Card = styled.div`
  background: ${({ theme }) => theme.cardBackground};
  color: ${({ theme }) => theme.text};
  border: 1px solid ${({ theme }) => theme.borderLight};
`;

Helper Functions

import { getRandomAccentColor, hexToRgba } from '../styles/designSystem';

// Get a random accent color
const randomColor = getRandomAccentColor();

// Convert hex to rgba with opacity
const semiTransparent = hexToRgba(colors.primary, 0.1);