--- name: minimalist-portfolio-design description: Minimalist, typography-focused portfolio design system inspired by neo-brutalist and Swiss design principles. Emphasizes bold typography, generous whitespace, monochromatic color schemes, and elegant simplicity for developer/designer portfolios. --- # Minimalist Portfolio Design Skill This skill guides the creation of clean, typography-focused portfolio websites with a minimalist aesthetic. Based on neo-brutalist and Swiss design principles, this approach prioritizes readability, visual hierarchy, and professional presentation over decorative elements. ## Core Design Philosophy **Design Principles:** - **Typography as the hero**: Let type do the heavy lifting - **Radical simplicity**: Remove everything that isn't essential - **Generous whitespace**: Space is a design element, not emptiness - **Monochromatic palette**: Black, white, and shades of gray - **Grid-based precision**: Everything aligns to an invisible grid - **No decoration**: Form follows function - **Swiss design influence**: Clean, asymmetric layouts with clear hierarchy **What This Style IS:** - Bold, confident, professional - Clean and uncluttered - Typography-driven - Timeless and elegant - Easy to scan and navigate **What This Style IS NOT:** - Colorful or playful (no bright colors) - Heavily animated (subtle interactions only) - Cluttered or busy - Decorative or ornamental - Trendy or flashy ## Typography System ### Font Selection **Primary Typeface Options** (Neo-Grotesk/Geometric Sans): 1. **Aeonik** (as shown in reference) - Neo-Grotesk, geometric, modern 2. **Inter** - Versatile, excellent screen readability, free 3. **Satoshi** - Geometric, clean, contemporary feel 4. **Supreme** - Bold, geometric, great for large display text 5. **Space Grotesk** - Modern geometric with personality 6. **Neue Montreal** - Swiss-inspired, clean lines 7. **General Sans** - Balanced, professional, versatile **System Font Stack (fallback):** ```css font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif; ``` ### Type Scale & Hierarchy **Display/Hero Text (Large greeting like "Hello"):** - Desktop: 8rem-12rem (128px-192px) - Tablet: 6rem-8rem (96px-128px) - Mobile: 4rem-6rem (64px-96px) - Weight: 400-500 (Regular to Medium) - Line height: 0.9-1.0 (tight) - Letter spacing: -0.02em to -0.04em (tight) **Section Headers (Like "Colors", "Typography"):** - Desktop: 4rem-6rem (64px-96px) - Tablet: 3rem-4rem (48px-64px) - Mobile: 2.5rem-3rem (40px-48px) - Weight: 400-500 - Line height: 1.1 - Letter spacing: -0.02em **Subheadings/Labels (Like "Primary", "Secondary"):** - Size: 1.25rem-1.5rem (20px-24px) - Weight: 400-500 - Line height: 1.4 - Letter spacing: 0 **Body Text (Like the description under "Colors"):** - Size: 1rem-1.125rem (16px-18px) - Weight: 400 - Line height: 1.6-1.7 - Letter spacing: 0 - Max width: 65ch (characters) for readability **Small Text/Labels (Like "Scroll down ↓"):** - Size: 0.875rem-1rem (14px-16px) - Weight: 400 - Line height: 1.5 - Letter spacing: 0.01em **Navigation Links:** - Size: 1rem-1.125rem (16px-18px) - Weight: 400-500 - Letter spacing: 0 ### Typography Rules - **One font family** for the entire site (consistency over variety) - **Use font weight** to create hierarchy, not multiple fonts - **Tight letter spacing** for large display text - **Standard spacing** for body text - **Generous line height** (1.6-1.7) for readable body text - **Tight line height** (0.9-1.1) for display text - **Left-aligned** text (not centered, except for specific hero elements) - **No all-caps** for body text (only for small labels if needed) ## Color System ### Monochromatic Palette (Primary Approach) This is the CORE aesthetic - black, white, and grays only. **Color Palette:** ```css --color-black: #222222; /* Primary - rich black, not pure black */ --color-gray-dark: #7B7B7B; /* Secondary - medium gray */ --color-gray-light: #F8F8F8; /* Tertiary - off-white background */ --color-white: #FFFFFF; /* Pure white */ --color-gray-50: #FAFAFA; /* Lightest gray */ --color-gray-100: #F5F5F5; /* Very light gray */ --color-gray-200: #EEEEEE; /* Light gray */ --color-gray-300: #E0E0E0; /* Border gray */ --color-gray-400: #BDBDBD; /* Disabled state */ --color-gray-500: #9E9E9E; /* Mid gray */ --color-gray-600: #757575; /* Text gray */ --color-gray-700: #616161; /* Dark text gray */ --color-gray-800: #424242; /* Almost black */ --color-gray-900: #212121; /* Darkest gray */ ``` **Color Usage:** - **Background**: #F8F8F8 or #FFFFFF (light mode) / #0A0A0A (dark mode) - **Text primary**: #222222 (light mode) / #F8F8F8 (dark mode) - **Text secondary**: #7B7B7B (both modes) - **Borders**: #E0E0E0 (light mode) / #2A2A2A (dark mode) - **Cards/Surfaces**: #FFFFFF (light mode) / #1A1A1A (dark mode) - **Hover states**: Slight darkening/lightening (10-15% opacity change) ### Accent Color Option (Minimal Use) **Only if absolutely necessary** - use ONE accent color sparingly: - For CTAs only (Book A Call button) - For hover states on key elements - For active link indicators - **Never** for backgrounds or large areas **Suggested Accent Colors** (choose ONE): - **Tech Blue**: #0066FF (IBM blue, professional) - **Success Green**: #00B386 (subtle, trustworthy) - **Warm Red**: #FF3B30 (Apple red, attention-grabbing) - **Keep it black**: No accent color at all (purest approach) ### Color Application Rules 1. **Light Mode Default**: White/off-white background (#F8F8F8 to #FFFFFF) 2. **Dark Mode Option**: Dark gray/black background (#0A0A0A to #121212) 3. **Text contrast**: Minimum 4.5:1 ratio for body text, 3:1 for large text 4. **No gradients**: Solid colors only 5. **No shadows** (or very subtle 1-2px shadows): Use borders instead 6. **Hover states**: Opacity changes (0.7-0.8) or background color shifts 7. **Photography**: Black and white or desaturated (like the reference portrait) ### Dark Mode Considerations If implementing dark mode: - Background: #0A0A0A to #121212 (not pure black) - Surfaces: #1A1A1A to #222222 - Text: #F8F8F8 to #FFFFFF - Borders: #2A2A2A to #333333 - Keep the same monochromatic approach - Avoid pure white on pure black (causes eye strain) ## Layout & Spacing System ### Grid System **Container Widths:** - Max content width: 1440px-1600px - Content padding: 5-10% on sides (responsive) - Mobile padding: 24px-32px on sides **Grid Structure:** - 12-column grid for flexibility - For hero: Asymmetric 60/40 or 50/50 split (text/image) - Generous gutters: 32px-48px between columns ### Spacing Scale (8pt Grid) All spacing in multiples of 8: ``` 4px (0.25rem) - Minimal gap 8px (0.5rem) - Tight spacing 16px (1rem) - Small spacing 24px (1.5rem) - Medium spacing 32px (2rem) - Standard spacing 48px (3rem) - Large spacing 64px (4rem) - XL spacing 96px (6rem) - Section spacing (mobile) 128px (8rem) - Section spacing (tablet) 160px (10rem) - Section spacing (desktop) 192px (12rem) - Hero spacing ``` ### Vertical Rhythm **Between sections:** - Mobile: 96px-128px - Tablet: 128px-160px - Desktop: 160px-192px **Within sections:** - Between heading and content: 32px-48px - Between paragraphs: 24px-32px - Between list items: 16px-24px **Component spacing:** - Navigation padding: 24px-32px vertical - Card padding: 32px-48px internal - Button padding: 16px-32px horizontal, 12px-16px vertical ### Responsive Breakpoints ```css /* Mobile-first approach */ mobile: 320px-640px tablet: 641px-1024px desktop: 1025px-1440px xl: 1441px+ /* Tailwind equivalent */ sm: 640px md: 768px lg: 1024px xl: 1280px 2xl: 1536px ``` ### Layout Patterns for Portfolio #### Hero Section (Full Viewport) ``` Layout: 50/50 split (text left, image right) Height: 100vh (full viewport) Vertical alignment: center Left side: - Large greeting text: "Hello" - Subtitle: "— It's [Name] a [role]" - Stats (optional): "+200 Project completed" - Scroll indicator: "Scroll down ↓" - Vertical text (optional): "Product designer" Right side: - Large portrait photo - Black and white or desaturated - Professional, confident pose - No background (or subtle gradient) ``` **Navigation:** - Position: Absolute top or fixed top - Height: 80px-100px - Logo: Top left (24px-32px from edges) - Links: Top center or right - CTA: Top right ("Book A Call" with arrow) - Background: Transparent or subtle backdrop-blur on scroll - Border: None or 1px bottom border (#E0E0E0) #### About/Info Sections ``` Layout: Single column, centered content Max width: 800px-900px for readability Heading: Left-aligned, large Body: Left-aligned, comfortable line length ``` #### Portfolio Grid ``` Desktop: 3 columns Tablet: 2 columns Mobile: 1 column Gap: 32px-48px Card aspect ratio: 4:3 or 16:9 ``` ### Whitespace Philosophy **More space = More premium** - Empty space is a design element - Don't fill every pixel - Let content breathe - Use whitespace to guide the eye - Balance is key: Not too sparse, not too crowded **Whitespace Checklist:** - [ ] Is there breathing room around all elements? - [ ] Can the eye easily identify sections? - [ ] Does the layout feel calm and organized? - [ ] Are related items grouped with less space? - [ ] Are unrelated items separated with more space? ## Component Design Patterns ### Navigation Bar **Structure:** ``` [Logo] [About Me] [Portfolio] [Services] [Blog] [Book A Call →] ``` **Specifications:** - Height: 80px-100px - Position: Fixed top with backdrop-filter blur OR absolute - Background: Transparent → Semi-transparent on scroll - Logo: Simple wordmark or icon (24px-32px size) - Links: 16px-18px, Medium weight - Link spacing: 32px-48px apart - CTA button: Outlined or filled, right-aligned - Hover: Opacity 0.7 or subtle underline (1-2px) **Mobile Navigation:** - Hamburger menu: Simple 3-line icon (24px) - Menu: Full-screen overlay OR slide-in drawer - Links: Larger text (24px-32px), vertical stack - Animation: Smooth 200-300ms ease ### Buttons **Primary Button (CTA):** ```css padding: 14px-16px vertical, 28px-32px horizontal border-radius: 4px-8px (subtle, not pill) font-size: 16px-18px font-weight: 500 background: #222222 (or accent color) color: #FFFFFF border: none OR 1-2px solid hover: opacity: 0.9 or transform: translateY(-2px) ``` **Secondary Button:** ```css Same sizing as primary background: transparent color: #222222 border: 1-2px solid #222222 hover: background: #222222, color: #FFFFFF ``` **Text Link:** ```css No background, no border Underline: 1px solid (only on hover) OR always present Hover: opacity: 0.7 ``` ### Cards (Project Cards) **Structure:** ``` ┌──────────────────────────┐ │ │ │ Project Image │ │ (16:9 ratio) │ │ │ ├──────────────────────────┤ │ Project Title │ │ Brief description... │ │ [Tag] [Tag] [Tag] │ └──────────────────────────┘ ``` **Specifications:** - Background: #FFFFFF or #FAFAFA - Border: 1px solid #E0E0E0 OR subtle shadow - Border-radius: 8px-12px (subtle) - Padding: 0 (image edge-to-edge) + 24px-32px bottom - Image: Fill width, fixed aspect ratio - Hover: Scale 1.02 OR lift with shadow OR border color change - Transition: 200-300ms ease **Card Content:** - Title: 20px-24px, Medium weight - Description: 16px, Regular, 2-3 lines max - Tags: 12px-14px, padding 6px-12px, rounded-full, border 1px ### Stats Display ("+200 Project completed") **Style:** ``` Number: 3rem-4rem (48px-64px), Medium weight Label: 1rem (16px), Regular weight, gray color Layout: Vertical stack Spacing: 8px between number and label ``` **Positioning:** - Near hero text - Subtle, not competing with main message - Can be multiple stats side-by-side (32px-48px gap) ### Photography/Images **Portrait Photo (Hero):** - Black and white OR heavily desaturated - Professional, direct gaze - Clean background (solid color or subtle gradient) - High quality: Sharp, well-lit - Aspect ratio: Portrait (3:4) or square (1:1) - Size: Large, fills 40-50% of viewport **Project Images:** - High quality: Mockups or screenshots - Consistent aspect ratio across all projects - Consider: 16:9 (landscape) or 4:3 - Hover: Slight zoom (scale 1.05) or no effect - Alt text: Always include for accessibility ### Iconography **Icon Style:** - Minimal: Line icons only (no filled icons) - Stroke weight: 1.5px-2px - Size: 20px-24px standard, 32px-40px for featured - Color: Match text color (#222222 or #7B7B7B) - Examples: Arrow (→), Menu (≡), Close (×), Social icons **Icon Usage:** - Navigation: Hamburger menu, arrow for CTA - Social links: GitHub, LinkedIn, Twitter/X, Email - Arrows: For links, buttons, scroll indicators - Keep it minimal: Don't overuse icons ### Forms (Contact Forms) **Input Fields:** ```css padding: 16px border: 1px solid #E0E0E0 border-radius: 4px-8px background: #FFFFFF or #FAFAFA font-size: 16px focus: border-color: #222222, outline: none ``` **Label:** ```css font-size: 14px-16px font-weight: 500 margin-bottom: 8px color: #222222 ``` **Layout:** - Single column, full width - Fields: Name, Email, Message (3 fields max) - Spacing: 24px between fields - Submit button: Full width or right-aligned ### Scroll Indicator **Text Style:** ``` "Scroll down ↓" font-size: 14px-16px color: #7B7B7B position: bottom center or bottom left animation: subtle bounce (optional) ``` **Alternative:** - Animated line/arrow - Mouse icon with wheel animation - Keep it subtle and minimal ## Portfolio Page Structure ### 1. Hero Section (Above the Fold) **Purpose**: Immediate impact, clear identity **Content:** - Large greeting: "Hello" (or your variation) - Name and role: "— It's [Name] a [role]" - Optional stats: "+200 Project completed" "+50 Startup raised" - Scroll indicator: "Scroll down ↓" - Portrait photo: Right side, B&W, professional **Layout:** - Full viewport height (100vh) - 50/50 split (text left, photo right) OR 60/40 - Vertically centered content - White or off-white background - Minimalist navigation at top **Typography:** - "Hello": 10rem-12rem desktop, 6rem mobile - Subtitle: 1.25rem-1.5rem, gray color (#7B7B7B) - Stats: 3rem-4rem numbers, 1rem labels **Key Principles:** - Less is more: Don't overcrowd - Immediate clarity: Who you are, what you do - Professional confidence: Bold but not aggressive - Clear next action: Scroll or CTA button ### 2. About Section **Purpose**: Personal connection, your story **Content:** - Section heading: "About" or "Who I Am" - Your story: 2-3 paragraphs max - What you do currently - What drives you - Optional: Skills/tools you use **Layout:** - Single column, centered - Max width: 800px for readability - Large section heading: 4rem-6rem - Body text: 1.125rem, line-height 1.7 - Optional: Photo or no photo **Tone:** - Professional but human - Authentic, not generic - Confident without ego - Clear and concise ### 3. Portfolio/Work Section **Purpose**: Showcase your best work **Content:** - Section heading: "Work", "Projects", or "Selected Work" - 4-8 projects (quality over quantity) - Each project: Image, title, description, tech stack **Layout:** - Grid: 3 columns desktop, 2 tablet, 1 mobile - OR: 2 columns (larger cards) - OR: Bento grid (varied sizes for featured work) - Generous gaps: 32px-48px **Project Card:** ``` ┌─────────────────────────┐ │ │ │ Project Image │ │ (Full width, 16:9) │ │ │ │ Project Title │ │ Brief description of │ │ what you built and why │ │ [React] [Next.js] [TS] │ │ │ │ [View Project →] │ └─────────────────────────┘ ``` **Interaction:** - Hover: Subtle scale or border change - Click: Link to case study or live site - Clean, minimal hover states ### 4. Services Section (Optional) **Purpose**: What you offer clients/employers **Content:** - Section heading: "Services" or "What I Do" - 3-5 service offerings - Brief description for each **Layout:** - Grid: 2-3 columns OR single column list - Each service: Icon (optional), title, description - Clean, scannable **Examples:** - Web Development - Mobile App Development - UI/UX Design - Consulting - Custom Solutions ### 5. Skills/Tech Stack Section **Purpose**: Quick scan of your technical abilities **Content:** - Section heading: "Skills" or "Tech Stack" - Technologies you use - Grouped by category (optional) **Layout Options:** **Option A: Simple List** ``` Frontend: React, Next.js, TypeScript, Tailwind Backend: Node.js, Supabase, PostgreSQL Mobile: React Native, Expo Tools: Git, Figma, VS Code ``` **Option B: Icon Grid** ``` [React] [Next.js] [TypeScript] [Tailwind] [Node] [Supabase] [PostgreSQL] [Git] [Figma] [React Native] [Expo] ``` **Option C: Categorized Cards** ``` ┌──────────────────┐ ┌──────────────────┐ │ Frontend │ │ Backend │ │ • React │ │ • Node.js │ │ • Next.js │ │ • Supabase │ │ • TypeScript │ │ • PostgreSQL │ └──────────────────┘ └──────────────────┘ ``` **Styling:** - Monochromatic: Black text on white/gray background - OR: Subtle gray tags with borders - Consistent sizing and spacing - No skill bars or percentage indicators ### 6. Contact Section **Purpose**: Easy way to get in touch **Content:** - Section heading: "Get In Touch" or "Contact" - Email link OR contact form (prefer simplicity) - Social links: GitHub, LinkedIn, Twitter - Optional: Calendar booking link **Layout Options:** **Option A: Minimal (Preferred)** ``` Let's work together email@example.com [GitHub] [LinkedIn] [Twitter] ``` **Option B: Simple Form** ``` Name: [________________] Email: [________________] Message: [____________] [____________] [Send Message] ``` **Styling:** - Centered content - Large, clear email link - Social icons: Line style, 24px-32px - Button: Same style as primary CTA - Generous spacing ### 7. Footer **Purpose**: Supporting information, links **Content:** - Copyright: © 2024 Your Name - Links: Privacy, Terms (if needed) - Social links (if not in contact section) - Optional: Back to top link **Layout:** - Single row, horizontal - OR: Minimal vertical stack on mobile - Small text: 14px - Color: Gray (#7B7B7B) - Padding: 32px-48px vertical **Styling:** - Clean and minimal - No background color (or subtle gray) - Border top: 1px solid #E0E0E0 (optional) ## Page Architecture Summary ``` ┌────────────────────────────────────┐ │ Navigation (Fixed/Absolute Top) │ ├────────────────────────────────────┤ │ │ │ Hero Section (100vh) │ │ • Large greeting │ │ • Your name + role │ │ • Portrait photo │ │ │ ├────────────────────────────────────┤ │ │ │ About Section │ │ • Who you are │ │ • Your story │ │ │ ├────────────────────────────────────┤ │ │ │ Work Section │ │ • Project grid │ │ • 4-8 projects │ │ │ ├────────────────────────────────────┤ │ │ │ Skills Section │ │ • Tech stack │ │ • Tools │ │ │ ├────────────────────────────────────┤ │ │ │ Contact Section │ │ • Email or form │ │ • Social links │ │ │ ├────────────────────────────────────┤ │ Footer │ │ • Copyright + links │ └────────────────────────────────────┘ ``` **Spacing Between Sections:** - Mobile: 96px-128px - Desktop: 160px-192px ## Technical Implementation ### Next.js + TypeScript + Tailwind Setup **Recommended Stack:** - Next.js 14+ (App Router) - TypeScript - Tailwind CSS - Framer Motion (for animations) - next/font (for font optimization) ### Tailwind Configuration ```typescript // tailwind.config.ts import type { Config } from 'tailwindcss' const config: Config = { content: [ './pages/**/*.{js,ts,jsx,tsx,mdx}', './components/**/*.{js,ts,jsx,tsx,mdx}', './app/**/*.{js,ts,jsx,tsx,mdx}', ], theme: { extend: { colors: { black: '#222222', 'gray-dark': '#7B7B7B', 'gray-light': '#F8F8F8', white: '#FFFFFF', }, fontFamily: { sans: ['var(--font-inter)', 'system-ui', 'sans-serif'], }, fontSize: { 'display': ['10rem', { lineHeight: '0.9', letterSpacing: '-0.02em' }], 'hero': ['6rem', { lineHeight: '1.0', letterSpacing: '-0.02em' }], }, spacing: { '128': '32rem', '144': '36rem', '160': '40rem', }, }, }, plugins: [], } export default config ``` ### Font Setup (next/font) ```typescript // app/layout.tsx import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'], variable: '--font-inter', display: 'swap', }) export default function RootLayout({ children, }: { children: React.ReactNode }) { return (
{children} ) } ``` ### Hero Section Component Example ```typescript // components/Hero.tsx 'use client' import Image from 'next/image' import { motion } from 'framer-motion' export default function Hero() { return (— It's Kanji, a web developer
{/* Scroll Indicator */}Scroll down ↓
{description}
{/* Tags */}Loading...
, ssr: false, // if not needed on server }) ``` ## Animations & Interactions ### Animation Philosophy **Principles:** - Subtle over flashy - Purposeful, not decorative - Fast and smooth (200-400ms) - Respect prefers-reduced-motion - Enhance, don't distract ### Recommended Animations **Page Load:** ```typescript // Fade in + slight upward movement initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.6, ease: 'easeOut' }} ``` **Hover States:** ```css /* Subtle opacity change */ transition: opacity 200ms ease; hover:opacity-70 /* Slight lift */ transition: transform 200ms ease; hover:translate-y-[-2px] /* Border color change */ transition: border-color 200ms ease; hover:border-black ``` **Scroll Animations:** ```typescript // Use Framer Motion's scroll-triggered animations import { motion, useScroll, useTransform } from 'framer-motion' const { scrollYProgress } = useScroll() const opacity = useTransform(scrollYProgress, [0, 0.5], [1, 0])