Education logo

The Complete Beginner's Guide to Building a Personal Portfolio Website

Step-by-Step Guide to Creating Your Own Personal Portfolio Website

By Ajith Kumar Published 2 years ago β€’ 5 min read

Want to create a professional portfolio but cannot figure out how to? Use Developer Portfolio and create your own personalised portfolio today! With multiple themes to choose from, our easily customisable, user friendly website is designed to cater to developers and freelancers alike.

Table of ContentsΒ πŸ“œ

  • Sections
  • Demo
  • Themes
  • Installation
  • Getting Started
  • Folder Structure
  • Usage
  • Hosting
  • SEO
  • Packages Used
  • APIs Used
  • Fonts and Images
  • Upcoming Features
  • Contributors

Sections πŸ”–

  • HOME
  • ABOUT
  • RESUME
  • EDUCATION
  • SKILLS
  • EXPERIENCE
  • PROJECTS
  • Achievements
  • SERVICES
  • TESTIMONIALS
  • BLOG
  • CONTACTS
  • Demo πŸŽ₯

Themes 🎨

Green 🟒

Black & White ⚫

Blue πŸ”΅

Red πŸ”΄

Purple 🟣

Pink

Yellow 🟑

Installation ⬇️

You will need to download Git and Node to run thisΒ project

Git

Node

Also, check this out if you are new toΒ react.

Make sure you have the latest version of both Git and Node on your computer.

node --version

git --version

Getting Started 🎯

Fork and Clone theΒ repo

To Fork the repo click on the fork button at the top right of the page. Once the repo is forked open your terminal and perform the following commands

git clone https://github.com/<YOUR GITHUB USERNAME>/developer-portfolio.git

cd developer-portfolio

Install packages from the root directory

npm install

(or)

yarn install

Start the development server

npm start

(or)

yarn start

Folder Structure πŸ“‚

β”œβ”€β”€ LICENSE

β”œβ”€β”€ README.md

β”œβ”€β”€ package-lock.json

β”œβ”€β”€ package.json

β”œβ”€β”€ public

β”‚ β”œβ”€β”€ _redirects

β”‚ β”œβ”€β”€ favicon.ico

β”‚ β”œβ”€β”€ favicon.png

β”‚ β”œβ”€β”€ favicon512.png

β”‚ β”œβ”€β”€ index.html

β”‚ β”œβ”€β”€ manifest.json

β”‚ └── robots.txt

β”œβ”€β”€ src

β”‚ β”œβ”€β”€ App.css

β”‚ β”œβ”€β”€ App.js

β”‚ β”œβ”€β”€ assets

β”‚ β”‚ β”œβ”€β”€ fonts

β”‚ β”‚ β”‚ └── Bestermind

β”‚ β”‚ β”‚ └── BestermindRegular.ttf

β”‚ β”‚ β”œβ”€β”€ pdf

β”‚ β”‚ β”‚ └── resume.pdf

β”‚ β”‚ └── svg

β”‚ β”‚ β”œβ”€β”€ about

β”‚ β”‚ β”œβ”€β”€ contacts

β”‚ β”‚ β”œβ”€β”€ education

β”‚ β”‚ β”œβ”€β”€ experience

β”‚ β”‚ β”œβ”€β”€ projects

β”‚ β”‚ β”œβ”€β”€ skills

β”‚ β”‚ β”œβ”€β”€ social

β”‚ β”‚ └── testimonials

β”‚ β”œβ”€β”€ components

β”‚ β”‚ β”œβ”€β”€ About

β”‚ β”‚ β”‚ β”œβ”€β”€ About.css

β”‚ β”‚ β”‚ └── About.js

β”‚ β”‚ β”œβ”€β”€ Achievements

β”‚ β”‚ β”‚ β”œβ”€β”€ Achievements.css

β”‚ β”‚ β”‚ └── Achievements.js

β”‚ β”‚ β”‚ └── AchievementCard.js

β”‚ β”‚ β”œβ”€β”€ BackToTop

β”‚ β”‚ β”‚ β”œβ”€β”€ BackToTop.css

β”‚ β”‚ β”‚ └── BackToTop.js

β”‚ β”‚ β”œβ”€β”€ Blog

β”‚ β”‚ β”‚ β”œβ”€β”€ Blog.css

β”‚ β”‚ β”‚ β”œβ”€β”€ Blog.js

β”‚ β”‚ β”‚ └── SingleBlog

β”‚ β”‚ β”‚ β”œβ”€β”€ SingleBlog.css

β”‚ β”‚ β”‚ └── SingleBlog.js

β”‚ β”‚ β”œβ”€β”€ Contacts

β”‚ β”‚ β”‚ β”œβ”€β”€ Contacts.css

β”‚ β”‚ β”‚ └── Contacts.js

β”‚ β”‚ β”œβ”€β”€ Education

β”‚ β”‚ β”‚ β”œβ”€β”€ Education.css

β”‚ β”‚ β”‚ β”œβ”€β”€ Education.js

β”‚ β”‚ β”‚ └── EducationCard.js

β”‚ β”‚ β”œβ”€β”€ Experience

β”‚ β”‚ β”‚ β”œβ”€β”€ Experience.css

β”‚ β”‚ β”‚ β”œβ”€β”€ Experience.js

β”‚ β”‚ β”‚ └── ExperienceCard.js

β”‚ β”‚ β”œβ”€β”€ Footer

β”‚ β”‚ β”‚ β”œβ”€β”€ Footer.css

β”‚ β”‚ β”‚ └── Footer.js

β”‚ β”‚ β”œβ”€β”€ Landing

β”‚ β”‚ β”‚ β”œβ”€β”€ Landing.css

β”‚ β”‚ β”‚ └── Landing.js

β”‚ β”‚ β”œβ”€β”€ Navbar

β”‚ β”‚ β”‚ β”œβ”€β”€ Navbar.css

β”‚ β”‚ β”‚ └── Navbar.js

β”‚ β”‚ β”œβ”€β”€ Projects

β”‚ β”‚ β”‚ β”œβ”€β”€ Projects.css

β”‚ β”‚ β”‚ β”œβ”€β”€ Projects.js

β”‚ β”‚ β”‚ └── SingleProject

β”‚ β”‚ β”‚ β”œβ”€β”€ SingleProject.css

β”‚ β”‚ β”‚ └── SingleProject.js

β”‚ β”‚ β”œβ”€β”€ Services

β”‚ β”‚ β”‚ β”œβ”€β”€ Services.css

β”‚ β”‚ β”‚ β”œβ”€β”€ Services.js

β”‚ β”‚ β”‚ └── SingleService

β”‚ β”‚ β”‚ β”œβ”€β”€ SingleService.css

β”‚ β”‚ β”‚ └── SingleService.js

β”‚ β”‚ β”œβ”€β”€ Skills

β”‚ β”‚ β”‚ β”œβ”€β”€ Skills.css

β”‚ β”‚ β”‚ └── Skills.js

β”‚ β”‚ β”œβ”€β”€ Testimonials

β”‚ β”‚ β”‚ β”œβ”€β”€ Testimonials.css

β”‚ β”‚ β”‚ └── Testimonials.js

β”‚ β”‚ └── index.js

β”‚ β”œβ”€β”€ contexts

β”‚ β”‚ └── ThemeContext.js

β”‚ β”œβ”€β”€ data

β”‚ β”‚ β”œβ”€β”€ aboutData.js

β”‚ β”‚ β”œβ”€β”€ achievementData.js

β”‚ β”‚ β”œβ”€β”€ blogData.js

β”‚ β”‚ β”œβ”€β”€ contactsData.js

β”‚ β”‚ β”œβ”€β”€ educationData.js

β”‚ β”‚ β”œβ”€β”€ experienceData.js

β”‚ β”‚ β”œβ”€β”€ headerData.js

β”‚ β”‚ β”œβ”€β”€ projectsData.js

β”‚ β”‚ β”œβ”€β”€ servicesData.js

β”‚ β”‚ β”œβ”€β”€ skillsData.js

β”‚ β”‚ β”œβ”€β”€ socialsData.js

β”‚ β”‚ β”œβ”€β”€ testimonialsData.js

β”‚ β”‚ └── themeData.js

β”‚ β”œβ”€β”€ index.css

β”‚ β”œβ”€β”€ index.js

β”‚ β”œβ”€β”€ pages

β”‚ β”‚ β”œβ”€β”€ Blog

β”‚ β”‚ β”‚ β”œβ”€β”€ BlogPage.css

β”‚ β”‚ β”‚ └── BlogPage.js

β”‚ β”‚ β”œβ”€β”€ Main

β”‚ β”‚ β”‚ └── Main.js

β”‚ β”‚ β”œβ”€β”€ Project

β”‚ β”‚ β”‚ β”œβ”€β”€ ProjectPage.css

β”‚ β”‚ β”‚ └── ProjectPage.js

β”‚ β”‚ └── index.js

β”‚ β”œβ”€β”€ reportWebVitals.js

β”‚ β”œβ”€β”€ theme

β”‚ β”‚ β”œβ”€β”€ images.js

β”‚ β”‚ └── theme.js

β”‚ └── utils

β”‚ β”œβ”€β”€ ScrollToTop.js

β”‚ └── skillsImage.js

└── yarn.lock

Usage πŸ•ΉοΈ

Customize your details for each component in src/dataΒ folder.

Eg:

export const headerData = {

name: '-- YOUR NAME --',

title: '-- YOUR TITLE --',

desciption:'-- DESCRIPTION --',

image: '-- IMAGE --',

resumePdf: ''

}

// You can also import image and PDF from assets as shown below

import resume from '../assets/pdf/resume.pdf'

import profileImg from '../assets/png/profileImg'

export const headerData = {

name: '-- YOUR NAME --',

title: '-- YOUR TITLE --',

desciption:'-- DESCRIPTION --',

image: profileImg,

resumePdf: resume

}

Data for each component is divided into respective files.

Set website theme in src/data/themeData.js and choose your favourite font from src/App.css

About Youβ€Š-β€Šsrc/data/aboutData.js

Education detailsβ€Š-β€Šsrc/data/educationData.js

Enter your Projectsβ€Š-β€Šsrc/data/projectsData.js

Add your Skillsβ€Š-β€Šsrc/data/skillsData.js

Experienceβ€Š-β€Šsrc/data/experienceData.js

Achievementsβ€Š-β€Šsrc/data/achievementData.js

Servicesβ€Š-β€Šsrc/data/servicesData.js

Testimonialsβ€Š-β€Šsrc/data/testimonialsData.js

Your Blogs and Articlesβ€Š-β€Šsrc/data/blogData.js

Contact Detailsβ€Š-β€Šsrc/data/contactsData.js

Social Media Profilesβ€Š-β€Šsrc/data/contactsData.js

// EXAMPLE

export const educationData = [

{

id: 1,

institution: '-- INSTITUTION NAME --',

course: '-- COURSE NAME --',

startYear: '2017',

endYear: '2019'

},

//

]

Instructions and format for each section can be found inside the dataΒ files.

Setting Up Contacts formΒ πŸ“©

Follow these instructions to connect contacts form with Google Sheet

Hosting 🌐

Netlify

SiteDocsDemoNetlify3 ways to deploy React apps to NetlifyYoutube

Firebase

SiteDocsDemoFirebaseDeploy a React App with FirebaseYoutube

Heroku

SiteDocsDemoHerokuDeploying React App on Heroku from GitHubYoutube

Github Pages

SiteDocsDemoGitHub PagesDeploying React App on GitHub Pages from GitHubYoutube

SEO πŸ•·οΈ

Search engine optimization (SEO) is the process of improving the quality and quantity of website traffic to a website or a web page from searchΒ engines.

Add the below code snippet to public/index.html with your site info. This step is not mandatory

<meta name="description" content="--- SITE DESCRIPTION ---" />

<meta property="og:image" content="--- YOUR IMAGE ---">

<meta property="og:site_name" content="--- YOUR NAME ---"/>

<meta property="og:title" content="--- YOUR NAME ---"/>

<meta property="og:url" content="--- YOUR SITE URL ---"/>

<meta property="og:type" content="website"/>

<meta property="og:description" content="--- SITE DESCRIPTION ---"/>

<meta property="og:locale" content="--- ---">

<meta property="og:image" content="--- YOUR IMAGE ---"/>

<meta property="og:image:width" content="1200">

<meta property="og:image:height" content="630">

<meta itemprop="name" content="--- YOUR NAME ---"/>

<meta itemprop="url" content="--- YOUR SITE URL ---"/>

<meta itemprop="description" content="--- SITE DESCRIPTION ---"/>

<meta itemprop="thumbnailUrl" content=""/>

<link rel="image_src" href="--- YOUR IMAGE ---"/>

<meta itemprop="image" content="--- YOUR IMAGE ---"/>

<meta name="twitter:site" content="@--- YOUR TWITTER USERNAME ---">

<meta name="twitter:creator" content="@--- YOUR TWITTER USERNAME ---">

<meta name="twitter:url" content="--- YOUR SITE URL ---"/>

<meta name="twitter:title" content="--- YOUR NAME ---">

<meta name="twitter:description" content="--- SITE DESCRIPTION ---">

<meta name="twitter:image" content="--- YOUR IMAGE ---">

<meta name="twitter:card" content="summary"/>

Packages UsedΒ πŸ“¦

Client Side Packages@material-ui/core@material-ui/iconsaxiosreact-fast-marqueereact-helmetreact-iconsreact-revealreact-router-domreact-router-hash-linkreact-slickslick-carouselvalidator

APIs UsedΒ πŸ—ΊοΈ

SheetDB

Fonts and Images 🎭

  • Illustrations
  • Icons8
  • SVG Porn

Icons

  • Material Icons
  • React Icons

Fonts

  • Poppins
  • Montserrat
  • Raleway
  • Big Shoulders Text
  • Bestermind
  • Roboto

Upcoming Features 🚧

  • Light/Dark theme toggle
  • More illustrations to choose from
  • Achievements and Awards section
  • More fonts to choose from

Contributors πŸ‘¨β€πŸ’»

Ajith Kumar Murugan

Github Repo: https://github.com/ajitharunai/Personal-Blog-Page

courseshow tostudentcollege

About the Creator

Ajith Kumar

Founding Team @complyance.io | Engaging Minds 🧠 & Exploring Big Companies' Strategies | Finding ways to enhance life's journey and sharing tips for your success πŸ₯‡

Reader insights

Be the first to share your insights about this piece.

How does it work?

Add your insights

Comments

There are no comments for this story

Be the first to respond and start the conversation.

Sign in to comment

    Find us on social media

    Miscellaneous links

    • Explore
    • Contact
    • Privacy Policy
    • Terms of Use
    • Support

    Β© 2026 Creatd, Inc. All Rights Reserved.