Skip to content

Repository files navigation

Nurul Izwan Dahlan - Portfolio Website

A modern, accessible portfolio website showcasing design systems expertise, built with Next.js, React, TypeScript, and Tailwind CSS featuring a Stripe-inspired design aesthetic.

πŸš€ Features

  • Modern Tech Stack: Built with Next.js 15, React 19, and TypeScript for type safety and performance
  • Tailwind CSS: Utility-first CSS framework for rapid UI development
  • Stripe-Inspired Design: Clean, professional aesthetic with gradient backgrounds and glassmorphism effects
  • Fully Responsive: Optimized for desktop, tablet, and mobile devices with mobile-first approach
  • WCAG 2.2 AA Compliant: Achieves 95%+ accessibility compliance with:
    • Semantic HTML landmarks (<header>, <main>, <footer>)
    • ARIA attributes for screen readers
    • Focus trap in modals with keyboard navigation
    • Skip navigation link for keyboard users
    • Enhanced focus visible styles
    • Proper color contrast ratios
    • 44Γ—44px minimum touch target sizes
  • Google Analytics: Integrated GA4 tracking for visitor analytics
  • SEO Optimized: Comprehensive SEO implementation with:
    • Open Graph tags for social media sharing
    • Twitter Card metadata
    • Structured data (JSON-LD) with schema.org Person markup
    • robots.txt and sitemap.xml
    • Canonical URLs and meta descriptions
    • Google Search Console integration
  • Interactive Elements:
    • Project cards with keyboard support (Enter/Space to activate)
    • Modal case studies with full accessibility
    • Smooth scroll behavior
    • Body scroll lock when modal is open
  • Automated Deployment: GitHub Actions workflow for continuous deployment to GitHub Pages
  • Static Export: Optimized for static site generation with Next.js output: 'export'

πŸ“‹ Prerequisites

  • Node.js 20 or later
  • npm package manager
  • GitHub account for deployment

πŸ› οΈ Installation

  1. Clone the repository

    git clone https://github.com/baliomega/baliomega.github.io.git
    cd baliomega.github.io
  2. Install dependencies

    npm install

πŸƒβ€β™‚οΈ Development

Run the development server:

npm run dev

Open http://localhost:3000 in your browser to see the result.

πŸ—οΈ Build

Create a production build:

npm run build

This generates a static export in the out/ directory, ready for deployment.

πŸ“¦ Deployment

GitHub Pages (Automated)

The repository is configured with GitHub Actions for automatic deployment:

  1. Push to main branch:

    git add .
    git commit -m "Your commit message"
    git push origin main
  2. GitHub Actions will automatically:

    • Install dependencies
    • Build the Next.js site
    • Export static files to out/ directory
    • Deploy to GitHub Pages
  3. Enable GitHub Pages (first time only):

    • Go to repository Settings β†’ Pages
    • Under "Build and deployment", select "GitHub Actions"
    • Your site will be live at https://baliomega.github.io

The workflow file is located at .github/workflows/deploy.yml.

πŸ“ Project Structure

baliomega.github.io/
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       └── deploy.yml          # GitHub Actions deployment workflow
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ layout.tsx          # Root layout with metadata & Google Analytics
β”‚   β”‚   β”œβ”€β”€ page.tsx            # Home page
β”‚   β”‚   └── globals.css         # Global styles, focus styles, sr-only utility
β”‚   └── components/
β”‚       └── Portfolio-Stripe.tsx # Main portfolio component with accessibility
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ favicon.ico             # Legacy browser favicon
β”‚   β”œβ”€β”€ favicon.svg             # Modern browser favicon (vector)
β”‚   β”œβ”€β”€ favicon.png             # Favicon source file
β”‚   β”œβ”€β”€ apple-touch-icon.png    # iOS home screen icon
β”‚   β”œβ”€β”€ og-image.png            # Open Graph image (1200x630px)
β”‚   β”œβ”€β”€ og-image-square.png     # Square OG image (1200x1200px)
β”‚   β”œβ”€β”€ robots.txt              # Search engine crawler directives
β”‚   └── sitemap.xml             # XML sitemap for SEO
β”œβ”€β”€ .nojekyll                   # Disable Jekyll processing for GitHub Pages
β”œβ”€β”€ next.config.ts              # Next.js config with static export
β”œβ”€β”€ tailwind.config.ts          # Tailwind CSS configuration
β”œβ”€β”€ tsconfig.json               # TypeScript configuration
β”œβ”€β”€ package.json
└── README.md

🎨 Customization

Update Content

Edit /src/components/Portfolio-Stripe.tsx:

Projects (lines 107-141):

const projects: Project[] = [
  {
    id: 1,
    title: "Your Project Title",
    category: "Project Category",
    year: "2024",
    description: "Brief description",
    challenge: "The challenge you faced",
    solution: "How you solved it",
    impact: "The results and impact",
    color: "from-stripe-blue-500 to-stripe-purple-500"
  },
  // Add more projects...
]

Experience (lines 143-149):

const experience: Experience[] = [
  {
    role: "Your Role",
    company: "Company Name",
    period: "Aug 2023 - Present",
    desc: "Brief description"
  },
  // Add more experiences...
]

Tools & Expertise (lines 151-158):

const tools = [
  {
    name: "Tool Name",
    category: "Category",
    icon: IconName, // from lucide-react
    items: ["Feature 1", "Feature 2", "Feature 3", "Feature 4"]
  },
  // Add more tools...
]

Google Analytics

Update GA4 Measurement ID in /src/app/layout.tsx (line 102):

gtag('config', 'G-YOUR-MEASUREMENT-ID');

SEO Configuration

Google Search Console Verification:

  1. Go to Google Search Console
  2. Add your property: https://baliomega.github.io
  3. Get verification code
  4. Update /src/app/layout.tsx (line 53):
verification: {
  google: 'your-verification-code',
},

Open Graph Image:

Social sharing images are included:

  • βœ… /public/og-image.png - 1200Γ—630px (Facebook, LinkedIn, Twitter)
  • βœ… /public/og-image-square.png - 1200Γ—1200px (alternative format)

Favicon Files:

Multiple favicon formats for broad compatibility:

  • βœ… /public/favicon.svg - Vector format (modern browsers)
  • βœ… /public/favicon.ico - Legacy format (older browsers)
  • βœ… /public/apple-touch-icon.png - iOS home screen icon

Test SEO & Social Sharing:

Design Customization

Colors: The site uses a blue-purple-teal gradient theme:

  • Primary: blue-600, purple-600, teal-600
  • Backgrounds: slate-50, slate-100
  • Text: slate-900, slate-600

Typography: Using Inter font (loaded in layout.tsx). Change by importing a different Google Font.

Accessibility: Focus styles are defined in /src/app/globals.css (lines 17-33)

πŸ”§ Available Scripts

Command Description
npm run dev Start development server at localhost:3000
npm run build Create production build and static export
npm run start Start production server (for testing)
npm run lint Run ESLint to check code quality

🎯 Key Technologies

β™Ώ Accessibility Features

WCAG 2.2 AA Compliance (~95%)

  • Semantic HTML: Proper use of <header>, <main>, <footer>, <section> landmarks
  • ARIA Attributes:
    • role="dialog" and aria-modal="true" for modals
    • aria-labelledby linking sections to headings
    • aria-label for interactive elements
    • aria-hidden to hide background content when modal is open
  • Keyboard Navigation:
    • Skip navigation link (press Tab on page load)
    • Project cards accessible via Enter/Space keys
    • Focus trap in modal dialogs
    • ESC key closes modals
    • Focus restoration when modal closes
  • Focus Management:
    • Enhanced focus visible styles with blue ring
    • 2px ring with 2px offset for clear visibility
    • Focus not obscured by other elements (WCAG 2.4.11)
  • Touch Targets: Minimum 44Γ—44px for all interactive elements (WCAG 2.5.8)
  • Color Contrast: All text meets WCAG AA standards (4.5:1 for normal text, 3:1 for large text)
  • Screen Reader Support: Descriptive labels and semantic structure

Testing Recommendations

  • Keyboard: Tab through entire page without mouse
  • Screen Reader: Test with NVDA (Windows) or VoiceOver (Mac)
  • Automated Testing: Use axe DevTools browser extension
  • Color Contrast: WebAIM Contrast Checker

🌟 Design Features

Stripe-Inspired Aesthetic

  • Clean, professional design with subtle gradients
  • Glassmorphism effects with backdrop blur
  • Gradient background orbs with blur effects
  • Responsive gradient text with bg-clip-text
  • Subtle shadows and hover effects
  • Timeline design with alternating layout

Interactive Components

  • Skip Navigation: Hidden until keyboard focused
  • Project Cards: Keyboard and mouse accessible with focus states
  • Modal System:
    • Full WCAG 2.2 compliance
    • Focus trap implementation
    • Backdrop click to close
    • Body scroll lock
    • Icons for Challenge, Solution, Impact sections

Responsive Design

Mobile-first approach with breakpoints:

  • Mobile: < 768px (reduced padding, smaller gradients, left-aligned timeline)
  • Tablet: 768px - 1024px
  • Desktop: > 1024px (full layout, centered timeline, larger spacing)

πŸ” SEO Features

Meta Tags & Social Sharing

  • βœ… Optimized title, description, and keywords
  • βœ… Open Graph tags (Facebook, LinkedIn, WhatsApp, Slack)
  • βœ… Twitter Card metadata with large image preview
  • βœ… Open Graph images (1200Γ—630px and 1200Γ—1200px)
  • βœ… Favicon support (SVG, ICO, PNG, Apple Touch Icon)
  • βœ… Canonical URLs
  • βœ… Robots meta directives

Structured Data

  • βœ… JSON-LD schema.org Person markup
  • βœ… Job title and organization
  • βœ… Social media profiles
  • βœ… Skills and expertise

SEO Files

  • βœ… /robots.txt - Crawler directives
  • βœ… /sitemap.xml - XML sitemap
  • βœ… Google Search Console integration

Performance

  • βœ… Static site generation (SSG)
  • βœ… Optimized images
  • βœ… Semantic HTML structure
  • βœ… Fast page load times

πŸ“§ Contact

Nurul Izwan Dahlan

πŸ“ License

This project is open source and available under the MIT License.


Built with ❀️ using Next.js, React, TypeScript, and Tailwind CSS

About

A modern, accessible portfolio website showcasing design systems expertise, built with Next.js, React, TypeScript, and Tailwind CSS featuring a Stripe-inspired design aesthetic.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages