How to Make a Free Portfolio Website on GitHub Pages (2026): Step-by-Step with HTML Template

Free Portfolio on GitHub Pages

Last updated: 12 November 2026

Short answer: create a public repository named exactly username.github.io (your GitHub username), add an index.html file, then go to Settings → Pages and deploy from the main branch. Your portfolio goes live at https://username.github.io, usually within a few minutes, for free. Copy the HTML template below to get started.
🪄 Not a coder? You don't need GitHub to get a portfolio. Send your resume to Day on WhatsApp and use it as an AI portfolio maker on WhatsApp: Day turns it into a website-style portfolio you can share with recruiters. Want to polish the resume first? Try the free Resume Checker.
In this guide
  • What GitHub Pages is and what it costs
  • 7 steps from zero to a live portfolio
  • A full minimal HTML template to copy
  • Jekyll themes: the no-code-ish option
  • Custom domain basics (DNS records table)
  • Troubleshooting: 8 common problems and fixes
  • Bonus: a GitHub profile README that sends visitors to your portfolio
GitHub Pages: the key facts
  • Free with a GitHub account for public repositories; private-repo Pages need a paid plan.
  • Each account gets one user site at username.github.io, plus project sites at username.github.io/repo-name.
  • Published sites can be up to 1 GB, with a soft bandwidth limit of 100 GB per month.
  • HTTPS is available for github.io sites and for custom domains once DNS is set up.
  • For an apex custom domain, GitHub's A records point to 185.199.108.153, .109.153, .110.153 and .111.153.

Sources: GitHub Docs: About GitHub Pages, Usage limits, Managing a custom domain (checked November 2026).

Rather skip the code?

Send your resume to Day, Weekday's free AI agent on WhatsApp. It turns it into a cleaner, website-style portfolio you can show recruiters, finds jobs that fit, and applies only when you say yes.

Say hi to Day on WhatsAppHow Day works →

What is GitHub Pages, and why use it for a portfolio?

GitHub Pages is a free hosting service from GitHub. It takes the files in a repository (HTML, CSS, JavaScript, images) and serves them as a website. There's no server to manage and no monthly bill.

For developers it's the obvious choice: the same place that holds your code also hosts your portfolio, and recruiters can jump from a project card straight to the repository. For non-developers it still works well, because you can edit files right in the browser.

Site typeRepository nameURLUse it for
User siteusername.github.iohttps://username.github.ioYour main portfolio (one per account)
Project siteany name, e.g. weather-apphttps://username.github.io/weather-appA live demo for each project
Custom domaineither of the abovehttps://yourname.inA professional, memorable address

Step-by-step: your portfolio live in 7 steps

Step 1: Create or tidy your GitHub account

Sign up at github.com if you haven't. Your username becomes part of your URL, so pick something professional, close to your real name (for example riya-sharma, not coolcoder99). You can rename later, but old links will break.

Step 2: Create the repository

Click New repository. Name it exactly username.github.io, replacing username with your GitHub username, all lowercase. Set it to Public and tick Add a README. Click Create repository.

Step 3: Add index.html

In the repo, click Add file → Create new file. Name it index.html, paste the template from the next section, edit your details and click Commit changes. The file must be in the root of the repo, not inside a folder.

Step 4: Turn on GitHub Pages

Go to Settings → Pages. Under Build and deployment, choose Deploy from a branch, pick main and the / (root) folder, then save. For a username.github.io repo this is often already set.

Step 5: Check the live site

Wait a few minutes, then open https://username.github.io. If you see a 404, check the Actions tab for a running or failed build, and see the troubleshooting table below.

Step 6: Add your resume and images

Upload resume.pdf and an images folder through Add file → Upload files. Keep file names lowercase with no spaces (expense-tracker.png), because links are case-sensitive.

Step 7: Share it everywhere

Add the link to your resume header, LinkedIn Featured section, GitHub bio and email signature. Our guide on sharing your LinkedIn profile link shows where links get the most clicks.

A full minimal HTML portfolio template

This is a complete, single-file portfolio. It's mobile-friendly, loads fast and has no dependencies. Replace everything in the cards with your own projects and numbers.

index.html: copy, paste, edit

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Your Name | Frontend Developer</title>
  <meta name="description" content="Frontend developer in Pune. React, TypeScript, accessibility.">
  <style>
    body { font-family: system-ui, sans-serif; max-width: 760px; margin: 0 auto; padding: 24px 16px; line-height: 1.6; color: #1a1a1a; }
    h1 { margin-bottom: 4px; }
    .tag { color: #555; margin-top: 0; }
    .card { border: 1px solid #e5e5e5; border-radius: 12px; padding: 16px; margin: 16px 0; }
    a { color: #0b6e4f; }
    .btn { display: inline-block; background: #111; color: #fff; padding: 10px 16px; border-radius: 999px; text-decoration: none; }
  </style>
</head>
<body>
  <header>
    <h1>Your Name</h1>
    <p class="tag">Frontend developer (React, TypeScript). Open to SDE-1 roles in Pune, Bengaluru or remote.</p>
    <a class="btn" href="resume.pdf">Download resume</a>
  </header>

  <section>
    <h2>Projects</h2>
    <div class="card">
      <h3>Expense tracker: 1,200 monthly users</h3>
      <p>Built with React and Firebase. Cut load time from 4.1s to 1.3s by lazy-loading charts.</p>
      <a href="https://example.com">Live</a> · <a href="https://github.com/username/expense-tracker">Code</a>
    </div>
    <div class="card">
      <h3>College fest site: 3,000 registrations</h3>
      <p>Static site with a Google Sheets form backend. Team of 3; I led the frontend.</p>
      <a href="https://github.com/username/fest-site">Code</a>
    </div>
  </section>

  <section>
    <h2>Skills</h2>
    <p>JavaScript, TypeScript, React, HTML, CSS, Git, REST APIs, Jest</p>
  </section>

  <section>
    <h2>Contact</h2>
    <p>Email: you@example.com · <a href="https://www.linkedin.com/in/your-handle">LinkedIn</a> · <a href="https://github.com/username">GitHub</a></p>
  </section>
</body>
</html>
Change thisTo thisTip
Your NameYour full nameSame as on your resume
Tag lineRole + stack + where you want to workUnder 25 words
Project h3Project name + one number"Expense tracker: 1,200 monthly users"
Project textWhat you built and the result2 sentences max
LinksYour live demo and repoTest each one after publishing
ColoursChange #0b6e4f and #111Keep strong contrast for readability

For what to put in those project cards, see the developer portfolio guide, and for layout ideas browse our 30 portfolio website examples.

Themes: the low-code option with Jekyll

GitHub Pages has built-in support for Jekyll, a static site generator. Instead of writing HTML, you write Markdown files and pick a theme that handles the design.

  • Supported themes: GitHub Pages supports a set of themes out of the box, including the default Jekyll theme, minima. Add a file named _config.yml with the line theme: minima.
  • Remote themes: many open-source Jekyll themes on GitHub can be used with the remote_theme setting. Read each theme's README for setup.
  • Fork a template: some developers publish portfolio templates you can fork. Check the licence and credit the author if asked.
  • Plain HTML: if you just want one page, skip Jekyll and use the template above. It's simpler and easier to debug.
OptionEffortBest forWatch-out
Plain HTML (template above)LowOne-page portfoliosYou edit HTML directly
Jekyll supported themeLow–mediumBlog + portfolioLimited design control
Remote or forked themeMediumPolished multi-page sitesCheck licence and updates
Static site generator + ActionsHighDevelopers who want full controlMore to maintain

Custom domain basics

A custom domain (like riyasharma.in) looks more professional, but it's optional. Domain prices vary by registrar and extension, and renewal is often higher than the first year, so check current rates before buying.

  1. Buy a domain from any registrar.
  2. In your repo, go to Settings → Pages → Custom domain, enter the domain and save. GitHub adds a CNAME file to the repo.
  3. At your registrar, add the DNS records below.
  4. Wait for DNS to update (it can take from minutes up to a day or two), then tick Enforce HTTPS.
Record typeHost / nameValueUsed for
A@185.199.108.153Apex domain (yourname.in)
A@185.199.109.153Apex domain
A@185.199.110.153Apex domain
A@185.199.111.153Apex domain
CNAMEwwwusername.github.iowww.yourname.in

Always confirm the current values in GitHub's documentation at docs.github.com before editing DNS. GitHub also recommends verifying your domain in account settings to prevent takeovers.

Troubleshooting: 8 common problems

ProblemLikely causeFix
404 on username.github.ioRepo name doesn't match your username exactlyRename the repo to username.github.io
404 after adding filesindex.html is inside a folderMove it to the repo root
Changes not showingBuild still running or browser cacheCheck the Actions tab; hard refresh
Images brokenWrong path or case (Photo.PNG vs photo.png)Match file names exactly; use lowercase
CSS not loadingAbsolute path like /css/style.css on a project siteUse relative paths: css/style.css
Pages option missingPrivate repo on a free planMake the repo public
"Not secure" on custom domainHTTPS not enforced yetWait for the certificate, then tick Enforce HTTPS
Jekyll build failedError in _config.yml or a Markdown fileOpen the failed run in Actions and read the error line

Bonus: a GitHub profile README that points to your portfolio

Recruiters who find your GitHub see your profile page first. Create a public repository with the same name as your username (for example riya-sharma/riya-sharma) and add a README.md. Whatever you write there shows at the top of your profile.

README.md for your profile repo

# Hi, I'm Your Name

Frontend developer (React, TypeScript) in Pune. Open to SDE-1 roles.

- Portfolio: https://username.github.io
- Currently building: an offline-first notes app
- Ask me about: performance, accessibility, CSS layout

## Featured projects
- Expense tracker: React + Firebase, 1,200 monthly users
- College fest site: 3,000 registrations, static + Sheets backend

## Contact
you@example.com · LinkedIn: /in/your-handle
  • Pin your 4–6 best repositories on your profile, with clear descriptions.
  • Give every pinned repo a README with a screenshot, setup steps and a live link.
  • Keep commit messages readable; recruiters do sometimes look.

Worked example: one weekend, start to finish

TimeTaskOutput
Saturday, 1 hourCreate account, repo, paste templateLive page at username.github.io
Saturday, 2 hoursWrite 3 project cards with numbersReal content, not placeholders
Sunday, 1 hourAdd resume.pdf, images, profile READMEComplete portfolio
Sunday, 30 minutesTest on phone, fix links, share on LinkedInReady for applications

About 4.5 hours in total. If that's more time than you have this week, turn your resume into a portfolio with Day instead, and come back to GitHub Pages later.

FAQs

Is GitHub Pages really free?

Yes, for public repositories on a free GitHub account. You only pay if you want Pages on private repos (paid plans) or a custom domain (paid to your registrar).

What should I name my GitHub Pages repository?

For your main portfolio, name it exactly username.github.io, using your GitHub username in lowercase.

How long does GitHub Pages take to go live?

Usually a few minutes after you enable Pages or push a change. Check the Actions tab if it takes longer.

Do I need to know coding to use GitHub Pages?

Basic HTML helps, but you can copy the template in this guide and edit text in the browser. Jekyll themes let you write in Markdown instead.

Can I use a custom domain with GitHub Pages?

Yes. Add the domain in Settings → Pages, set the A or CNAME records at your registrar, then enforce HTTPS.

Why is my GitHub Pages site showing 404?

Most often the repo name doesn't match your username, index.html isn't in the root, or the build hasn't finished.

Can I host a React app on GitHub Pages?

Yes, as a static build. Build the app and publish the output folder, often using GitHub Actions. Client-side routing may need extra setup.

Is a GitHub profile README the same as a portfolio?

No. The README is a short intro on your GitHub profile; your portfolio is a full site. Use the README to link to it.

Is a GitHub portfolio useful for non-developers?

It works for anyone, but non-developers may find Canva, Notion or Carrd quicker. Day on WhatsApp can also turn a resume into a website-style portfolio.

Latest Articles

Browse Articles
Use AI to find jobs and apply

Stop manually filling job applications. Use AI to auto-apply to jobs

Browse jobs now