Overview
The About component showcases a personal bio, technical skills arsenal, and a decorative image. It uses a two-column layout with text content on the left and a stylized image on the right.
This component is data-driven for the skills list, making it easy to update your technical stack without touching the component logic.
Component Structure
Location : src/components/About/About.jsx
Styles : src/components/About/About.module.css
No props required - self-contained with internal data
Implementation
Basic Usage
import About from './components/About/About' ;
export default function App () {
return (
< main >
< About />
</ main >
);
}
Full Component Code
import styles from './About.module.css' ;
const skills = [
'Java' , 'C#' , 'JavaScript (ES6+)' , 'SQL' ,
'React.js' , 'Vite' , 'Tailwind CSS' , 'HTML5' , 'CSS3' ,
'Git' , 'GitHub' , 'VS Code' , 'MySQL Workbench'
];
export default function About () {
return (
< section id = "about" className = { styles . section } >
< div className = "container" >
< div className = { styles . grid } >
{ /* Left: text */ }
< div >
< h2 className = { styles . headline } >
PURE < br /> CODE. < br /> NO FLUFF.
</ h2 >
< p className = { styles . body } >
I don't just write code; I engineer solutions. My approach is
rooted in mathematical precision and creative problem-solving. I
believe in software that is fast, reliable, and accessible.
</ p >
< div className = { styles . skillsBox } >
< h3 className = { styles . skillsTitle } > Technical Arsenal </ h3 >
< ul className = { styles . skillsList } >
{ skills . map (( s ) => (
< li key = { s } className = { styles . skillItem } >
< span className = { styles . dot } />
{ s }
</ li >
)) }
</ ul >
</ div >
</ div >
{ /* Right: image */ }
< div className = { styles . imageWrapper } >
< div className = { styles . rotatedBg } />
< div className = { styles . imageFrame } >
< img
src = "https://images.unsplash.com/photo-1555066931-4365d14bab8c?q=80&w=800&auto=format&fit=crop"
alt = "Minimalist laptop setup on a wooden desk"
className = { styles . photo }
/>
</ div >
</ div >
</ div >
</ div >
</ section >
);
}
Layout Structure
Two-Column Grid
Left Column (Text)
Right Column (Image)
Contains three main elements:
Headline : Bold statement broken into three lines
Body Text : Personal philosophy paragraph
Skills Box : Titled list of technical skills
Features a decorative image setup:
Rotated Background : Geometric decoration behind image
Image Frame : Styled container for the photo
Photo : Unsplash stock image (easily replaceable)
Text Content
Headline
< h2 className = { styles . headline } >
PURE < br /> CODE. < br /> NO FLUFF.
</ h2 >
Three-line statement with manual line breaks for visual impact.
Body Paragraph
< p className = { styles . body } >
I don't just write code; I engineer solutions. My approach is
rooted in mathematical precision and creative problem-solving. I
believe in software that is fast, reliable, and accessible.
</ p >
Personal philosophy and approach to software development.
Skills Arsenal
Skills Data
Defined as a constant array at the top of the file:
const skills = [
'Java' , 'C#' , 'JavaScript (ES6+)' , 'SQL' ,
'React.js' , 'Vite' , 'Tailwind CSS' , 'HTML5' , 'CSS3' ,
'Git' , 'GitHub' , 'VS Code' , 'MySQL Workbench'
];
Update this array to reflect your current tech stack. The component automatically renders any changes.
Skills List Rendering
< div className = { styles . skillsBox } >
< h3 className = { styles . skillsTitle } > Technical Arsenal </ h3 >
< ul className = { styles . skillsList } >
{ skills . map (( s ) => (
< li key = { s } className = { styles . skillItem } >
< span className = { styles . dot } />
{ s }
</ li >
)) }
</ ul >
</ div >
Features :
Semantic <ul> list
Each item has a decorative dot (.dot span)
Automatically adapts to array length
Uses skill name as unique key
Image Section
Decorative Structure
< div className = { styles . imageWrapper } >
< div className = { styles . rotatedBg } />
< div className = { styles . imageFrame } >
< img
src = "https://images.unsplash.com/photo-1555066931-4365d14bab8c?q=80&w=800&auto=format&fit=crop"
alt = "Minimalist laptop setup on a wooden desk"
className = { styles . photo }
/>
</ div >
</ div >
.rotatedBg is an absolutely positioned decorative element (likely rotated via CSS transform) that creates a geometric accent behind the image.
.imageFrame provides a styled border/container for the photo, potentially with neobrutalist shadows or borders.
Uses Unsplash as placeholder. Replace with your own photo: < img
src = "/about-image.webp"
alt = "Your workspace or portrait"
className = { styles . photo }
/>
CSS Module Styling
Key Classes
Grid Layout
Headline
Skills List
Image Wrapper
.grid {
display : grid ;
grid-template-columns : 1 fr 1 fr ;
gap : 4 rem ;
align-items : center ;
}
Customization
Update Skills
const skills = [
'TypeScript' , 'Python' , 'Go' ,
'Next.js' , 'GraphQL' , 'PostgreSQL' ,
'Docker' , 'AWS' , 'CI/CD'
];
Change Headline
< h2 className = { styles . headline } >
CLEAN < br /> EFFICIENT < br /> SCALABLE.
</ h2 >
Modify Body Text
< p className = { styles . body } >
Your personal statement here. Describe your approach,
philosophy, or what drives you as a developer.
</ p >
Replace Image
< img
src = "/your-image.jpg"
alt = "Descriptive alt text"
className = { styles . photo }
/>
Add More Sections
Insert additional content blocks:
< div className = { styles . skillsBox } >
< h3 className = { styles . skillsTitle } > Education </ h3 >
< ul className = { styles . skillsList } >
< li className = { styles . skillItem } >
< span className = { styles . dot } />
B.S. Computer Science
</ li >
< li className = { styles . skillItem } >
< span className = { styles . dot } />
AWS Certified Developer
</ li >
</ ul >
</ div >
Change Skills Layout
Switch from grid to single column:
.skillsList {
grid-template-columns : 1 fr ; /* Single column */
}
Or three columns:
.skillsList {
grid-template-columns : repeat ( 3 , 1 fr );
}
Responsive Design
Typical responsive patterns:
Desktop (≥768px)
Mobile (<768px)
.grid {
grid-template-columns : 1 fr 1 fr ;
}
Accessibility
Semantic <section> with unique id="about"
Proper heading hierarchy (h2 for main headline, h3 for subsections)
Semantic <ul> and <li> for skills list
Descriptive alt text for image
Adequate color contrast for text readability
Design Patterns
Follows neobrutalist aesthetic:
Bold typography : Large, uppercase headlines
Hard shadows : No blur on box-shadow
Geometric decoration : Rotated background elements
High contrast : Primary color accents on dark background
List bullets : Custom dot elements instead of default bullets
No external dependencies : Pure React component
CSS Modules : Scoped styles with no runtime cost
Static array : Skills list doesn’t change during runtime
Optimized image : Could replace Unsplash URL with local WebP for faster load
Optimize External Image
Replace Unsplash with local asset:
Download and convert to WebP
Place in /public directory
Update src:
< img
src = "/about-photo.webp"
alt = "Workspace photo"
className = { styles . photo }
loading = "lazy"
/>
Component Variants
Centered Layout
For single-column centered design:
< section id = "about" className = { styles . section } >
< div className = "container" >
< div className = { styles . centered } >
< h2 className = { styles . headline } > ABOUT ME </ h2 >
< p className = { styles . body } > Your bio here... </ p >
< div className = { styles . skillsBox } >
{ /* Skills */ }
</ div >
</ div >
</ div >
</ section >
CSS:
.centered {
max-width : 800 px ;
margin : 0 auto ;
text-align : center ;
}
Skills Grid with Icons
Enhance with technology icons:
{ skills . map (( s ) => (
< li key = { s } className = { styles . skillItem } >
< img src = { `/icons/ ${ s . toLowerCase () } .svg` } alt = "" className = { styles . icon } />
{ s }
</ li >
))}
Hero : Links to About section via #about anchor
Navbar : Contains “ABOUT” navigation link
Contact : Often follows the About section