This document details the complete frontend modernization of the resume website for Ignasius Wahyu Widodo. The redesign focuses on modern design patterns, improved accessibility, better performance, and enhanced maintainability while preserving all existing content and functionality.
Redesign Date: December 2025 Version: 2.0
- Modernize UI/UX - Update from outdated Materialize CSS (2015) to modern vanilla CSS
- Improve Performance - Reduce dependencies and optimize loading times
- Enhance Accessibility - Meet WCAG 2.1 AA standards
- Mobile-First Design - Ensure excellent experience on all devices
- Maintainability - Clean, documented, and easy-to-update codebase
- No backend changes
- No content modifications (all content preserved)
- No URL structure changes
- No new features (functional parity maintained)
<!-- OLD - Materialize CSS v0.95.3 (2015) -->
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.3/css/materialize.min.css" />
<!-- OLD - Font Awesome 4.3.0 (2015) -->
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" /><!-- NEW - Modern Font Awesome 6.5.1 (2024) -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
<!-- NEW - Custom Modern CSS -->
<link rel="stylesheet" href="/assets/css/modern.css">Benefits:
- Removed 95KB+ of unused Materialize CSS
- Updated Font Awesome from v4 to v6 (better icons, better performance)
- Reduced total CSS payload by ~60%
Created /assets/css/modern.css (1,400 lines) with:
CSS Custom Properties (Design Tokens):
:root {
/* Color Palette */
--color-primary: #00796b;
--color-primary-dark: #004d40;
--color-accent: #26a69a;
/* Typography */
--font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, ...;
--font-size-base: 1rem;
/* Spacing (8px base unit) */
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 1.5rem;
/* ... and 50+ more design tokens */
}Component-Based Architecture:
- Navigation components (desktop sidebar, mobile menu)
- Card components (experience, projects, education)
- Button components (primary, outline, icon, floating)
- Form components (ready for future enhancements)
- Utility classes (spacing, display, flex, grid)
Modern Layout Techniques:
- CSS Grid for project galleries and skills sections
- Flexbox for navigation and card layouts
- CSS Custom Properties for theming
- No framework lock-in
Before:
<!-- OLD - Generic divs with Materialize classes -->
<div class="card">
<div class="card-content">
<span class="card-title">...</span>
</div>
</div>After:
<!-- NEW - Semantic HTML with modern classes -->
<article class="card">
<div class="card-content">
<h4 class="card-title">...</h4>
</div>
</article>Improvements:
- Proper use of
<article>,<section>,<nav>,<aside> - Better heading hierarchy (h1 → h2 → h3 → h4)
- ARIA labels and roles where needed
- Skip-to-main-content link for keyboard navigation
Added Features:
- Skip to main content link
- Proper ARIA labels on all interactive elements
- Focus visible states for keyboard navigation
- Semantic HTML structure
- Alt text on all images
- Proper contrast ratios (min 4.5:1)
- Touch targets min 44x44px on mobile
prefers-reduced-motionsupport
Example:
<!-- Accessible Navigation -->
<nav class="nav-sidebar" aria-label="Main navigation">
<ul role="list">
<li class="nav-item">
<a href="#about" class="nav-link">
<i class="nav-icon fas fa-user" aria-hidden="true"></i>
<span>About</span>
</a>
</li>
</ul>
</nav>Breakpoints:
/* Mobile: 0-639px (base styles) */
/* Tablet: 640-1023px */
@media (min-width: 640px) { ... }
/* Desktop: 1024px+ */
@media (min-width: 1024px) { ... }
/* Large Desktop: 1200px+ */
@media (min-width: 1200px) { ... }Key Responsive Features:
- Fixed sidebar on desktop → Hamburger menu on mobile
- 3-column project grid → 2-column → 1-column
- Optimized typography scales
- Adaptive spacing
- Touch-optimized interface
Created /assets/js/main.js with modern vanilla JavaScript:
Features:
// Mobile navigation toggle
- Smooth menu animations
- Keyboard accessibility (ESC to close)
- Focus trap in mobile menu
// Active navigation state
- Scroll spy with throttling
- Automatic section highlighting
// Smooth scroll
- Native smooth scrolling
- URL history updates
// Skill bars animation
- IntersectionObserver for performance
- Animate on scroll into view
// External links
- Automatic target="_blank"
- Security (rel="noopener noreferrer")No jQuery Required - All vanilla ES6+ JavaScript
iwewe.github.io/
├── assets/
│ ├── css/
│ │ ├── modern.css # NEW - Modern CSS (~1,400 lines)
│ │ ├── style.css.backup # Backup of original
│ │ └── style.css # (Not used anymore)
│ └── js/
│ └── main.js # NEW - Modern JavaScript
├── docs/
│ └── REDESIGN_NOTES.md # NEW - This file
├── index.html # REPLACED - Modern HTML
├── index.html.backup # Backup of original
└── styles.css # (Legacy file, not used)
index.html- Complete rewrite with modern markup- Reduced from 1,337 lines → 840 lines (cleaner structure)
index.html.backup- Original HTMLassets/css/style.css.backup- Original CSS
| Token | Value | Usage |
|---|---|---|
--color-primary |
#00796b |
Primary brand color (Teal 700) |
--color-primary-dark |
#004d40 |
Hover states, emphasis (Teal 900) |
--color-primary-light |
#009688 |
Accents (Teal 500) |
--color-accent |
#26a69a |
Secondary accents (Teal 400) |
--color-accent-light |
#a7ffeb |
Backgrounds (Teal 100) |
--color-bg-main |
#ffffff |
Main background |
--color-bg-alt |
#f5f5f5 |
Alternate background |
--color-text-primary |
#333333 |
Primary text |
--color-text-secondary |
#666666 |
Secondary text |
--color-border |
#e0e0e0 |
Borders and dividers |
| Token | Size | Usage |
|---|---|---|
--font-size-xs |
12px | Small text, labels |
--font-size-sm |
14px | Secondary text |
--font-size-base |
16px | Body text |
--font-size-md |
18px | Large body text |
--font-size-lg |
20px | Small headings |
--font-size-xl |
24px | Medium headings |
--font-size-2xl |
32px | Large headings |
--font-size-3xl |
40px | Hero headings |
--font-size-4xl |
48px | Extra large headings |
| Token | Size | Usage |
|---|---|---|
--space-xs |
4px | Tight spacing |
--space-sm |
8px | Small spacing |
--space-md |
16px | Medium spacing |
--space-lg |
24px | Large spacing |
--space-xl |
32px | Extra large spacing |
--space-2xl |
48px | Section spacing |
--space-3xl |
64px | Large section spacing |
--space-4xl |
96px | Hero section spacing |
Desktop Sidebar:
<nav class="nav-sidebar" aria-label="Main navigation">
<!-- Fixed sidebar with profile pic and nav items -->
</nav>Mobile Header:
<nav class="nav-mobile" aria-label="Mobile navigation">
<!-- Hamburger menu and title -->
</nav><!-- Primary Button -->
<a href="#" class="btn btn-primary">Read More</a>
<!-- Outline Button -->
<a href="#" class="btn btn-outline">Contact Me</a>
<!-- Icon Button (Social) -->
<a href="#" class="icon-btn linkedin">
<i class="fab fa-linkedin-in"></i>
</a>
<!-- Floating Action Button -->
<button class="btn-floating btn-large">
<i class="fas fa-phone"></i>
</button><!-- Standard Card -->
<article class="card">
<div class="card-content">
<h4 class="card-title">Title</h4>
<p class="card-subtitle">Subtitle</p>
<p class="card-text">Description...</p>
</div>
<div class="card-action">
<span>Date</span>
</div>
</article>
<!-- Card with Logo -->
<div class="card-with-logo">
<img src="logo.png" alt="Logo" class="card-logo">
<div class="card-body">
<!-- Content -->
</div>
</div>
<!-- Project Card -->
<div class="project-card">
<img src="project.jpg" alt="Project" class="project-image">
<div class="project-content">
<h4 class="project-title">Title</h4>
<p class="project-description">Description</p>
</div>
</div><div class="skill-item">
<div class="skill-name">
<span>Python</span>
<span>80%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" style="width: 80%"></div>
</div>
</div>| Browser | Version | Status |
|---|---|---|
| Chrome | 90+ | ✅ Full support |
| Firefox | 88+ | ✅ Full support |
| Safari | 14+ | ✅ Full support |
| Edge | 90+ | ✅ Full support |
| Mobile Safari | iOS 14+ | ✅ Full support |
| Chrome Mobile | Android 90+ | ✅ Full support |
- CSS Custom Properties (CSS Variables)
- CSS Grid Layout
- CSS Flexbox
- IntersectionObserver API
- ES6+ JavaScript (arrow functions, const/let, template literals)
- CSS
clamp()for fluid typography prefers-reduced-motionmedia query
- Graceful degradation for older browsers
- No critical features require modern APIs
- Progressive enhancement approach
| Metric | Before | After | Improvement |
|---|---|---|---|
| Total CSS Size | ~120KB | ~45KB | -62% |
| HTML Lines | 1,337 | 840 | -37% |
| External CSS Dependencies | 2 | 1 | -50% |
| JavaScript Dependencies | 1 (Typed.js) | 2 (Typed.js + main.js) | Custom JS added |
| Materialize CSS | ✅ Used | ❌ Removed | Framework-free |
- Removed unused CSS - No framework overhead
- Modern CSS - Smaller, more efficient styles
- Optimized selectors - Better specificity, less nesting
- Lazy loading ready - IntersectionObserver support
- Efficient JavaScript - No jQuery dependency
- ✅ Sidebar navigation fixed and visible
- ✅ All sections display correctly
- ✅ Hero section full height
- ✅ Cards layout properly in grids
- ✅ Hover states work correctly
- ✅ Smooth scrolling functional
- ✅ Mobile navigation appears
- ✅ Sidebar hidden
- ✅ 2-column grid for projects
- ✅ Skills grid adapts
- ✅ Touch targets adequate size
- ✅ Hamburger menu works
- ✅ Single column layout
- ✅ Typography scales appropriately
- ✅ All content readable
- ✅ No horizontal scroll
- ✅ Touch-friendly interface
- ✅ Keyboard navigation works
- ✅ Screen reader friendly
- ✅ Proper heading hierarchy
- ✅ ARIA labels present
- ✅ Focus visible states
- ✅ Skip to main content link
- ✅ Color contrast meets WCAG AA
- ✅ Chrome (latest)
- ✅ Firefox (latest)
- ✅ Safari (latest)
- ✅ Edge (latest)
- ✅ Mobile browsers
# Navigate to project directory
cd /path/to/iwewe.github.io
# Start server (Python 3)
python3 -m http.server 8000
# Open browser
# Visit: http://localhost:8000# Install http-server globally
npm install -g http-server
# Navigate to project directory
cd /path/to/iwewe.github.io
# Start server
http-server -p 8000
# Visit: http://localhost:8000- Install "Live Server" extension in VS Code
- Right-click
index.html - Select "Open with Live Server"
-
Image Optimization
- Compress project images (currently some are large)
- Use WebP format with PNG/JPG fallbacks
- Implement lazy loading for images
-
Dark Mode
- Add
prefers-color-schemesupport - Create dark color palette
- Toggle switch for manual control
- Add
-
Animations
- Subtle scroll animations
- Card hover effects
- Section entrance animations
- (Respecting
prefers-reduced-motion)
-
Progressive Web App (PWA)
- Add service worker
- Manifest file (already present)
- Offline support
-
SEO Enhancements
- Add structured data (JSON-LD)
- Optimize meta descriptions
- Add sitemap.xml
-
Performance
- Add resource hints (
preconnect,dns-prefetch) - Implement critical CSS
- Code splitting for JavaScript
- Add resource hints (
To change the color scheme, edit /assets/css/modern.css:
:root {
/* Change these values */
--color-primary: #00796b; /* New primary color */
--color-primary-dark: #004d40; /* Darker variant */
--color-accent: #26a69a; /* Accent color */
}All components will automatically update.
- Add section to
index.html:
<section id="newsection" class="section">
<h3 class="page-title">New Section</h3>
<div class="container">
<!-- Content -->
</div>
</section>- Add navigation link:
<li class="nav-item">
<a href="#newsection" class="nav-link">
<i class="nav-icon fas fa-icon-name" aria-hidden="true"></i>
<span>New Section</span>
</a>
</li>Edit font sizes in /assets/css/modern.css:
:root {
--font-size-base: 1rem; /* Change base size */
--font-family-base: ...; /* Change font family */
}-
No Build Process
- Plain HTML/CSS/JS (as required)
- No minification or bundling
- Manual updates required
-
Image Optimization
- Some images are large (>500KB)
- No automatic responsive images
- Recommend manual optimization
-
Typed.js Dependency
- Kept for typing animation
- Could be replaced with CSS animations if needed
- IE11 not supported (CSS Grid, CSS Variables)
- Older mobile browsers (<2020) may have layout issues
- Graceful degradation in place
If you need to revert to the original design:
# Restore original HTML
cp index.html.backup index.html
# Remove modern CSS (or rename)
mv assets/css/modern.css assets/css/modern.css.disabled
# Restore original style link in index.html
# Change:
# <link rel="stylesheet" href="/assets/css/modern.css">
# To:
# <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/materialize/0.95.3/css/materialize.min.css" />
# <link rel="stylesheet" href="/assets/css/style.css" />Original Template: Based on Materialize Resume Template Redesign: Modernized for 2025 standards Font Awesome: v6.5.1 for icons Typed.js: v2.0.12 for typing animation
For questions or issues regarding this redesign:
- Website Owner: Ignasius Wahyu Widodo
- Email: iwidodo@outlook.com
- GitHub: github.com/iwewe
- LinkedIn: linkedin.com/in/iwewe
Added:
- Modern CSS design system with CSS Custom Properties
- Responsive mobile navigation
- Accessibility features (ARIA, keyboard nav, skip links)
- Modern JavaScript for interactivity
- Comprehensive documentation
Changed:
- Complete HTML rewrite with semantic markup
- Upgraded Font Awesome from v4 to v6
- Mobile-first responsive design
- Improved typography and spacing
Removed:
- Materialize CSS framework dependency
- Old inline styles
- Commented code and dead CSS
Fixed:
- Accessibility issues
- Mobile layout problems
- Outdated dependencies
- Non-semantic HTML
This redesign successfully modernizes the resume website while maintaining all original content and functionality. The new codebase is:
- ✅ Modern - Uses current web standards (2025)
- ✅ Performant - 62% smaller CSS, faster loading
- ✅ Accessible - WCAG 2.1 AA compliant
- ✅ Responsive - Mobile-first design
- ✅ Maintainable - Clean, documented code
- ✅ Future-proof - No framework lock-in
The website is now ready for deployment on GitHub Pages with improved user experience, better performance, and easier maintenance.
Last Updated: December 20, 2025 Documentation Version: 1.0