Build your portfolio website, free.

No coding, no paid hosting. You fill in your details, Claude builds the site, GitHub puts it online at yourname.github.io. About 45 minutes.

What you'll end up with

Real screenshots of what Claude built from this prompt for Maria, a sample VA we made up. Yours uses your words, photo and colours.

Sample portfolio hero: headline, two buttons and a photo spot with initials
Your promise, front and centre
Sample portfolio services section as cards
Services written as outcomes
Sample portfolio case study: problem, what I did, the result
Work samples as mini case studies
Sample portfolio tools list and experience timeline
Tools and experience, easy to scan

Get these ready first

File names matter. Lowercase, no spaces, and the ending must match: profile.png won't show if the site looks for profile.jpg. On Windows, turn on "File name extensions" in File Explorer's View menu.

Nothing to put in it yet? Start here

Every part of your portfolio has a free tool behind it. Real content, not filler.

Fill in your details

Your prompt builds itself as you type and saves to your account. Only write what's true: Claude won't invent clients, numbers or reviews, and skips empty sections.

About you
Who you help and what you take off their plate.Stuck on one line? Use the Headline builder
How you got here, what you're good at, one human detail. Claude rewrites it.
Skills and tools
Separate with commas.See which tools clients in your niche ask for
Earn one this week: free certifications and courses
Experience and proof
Role, type of client | dates | what you did. Freelance and non-VA jobs count.Turn a non-VA job into VA experience
Title | the problem | what you did | the result | image file name.No clients yet? Finish one mock task and use it as a work sample. Screenshot the result as work-1.jpg.
Real ones only, with permission. Leave empty if you don't have any yet.Copy the "Asking for a testimonial" script
Availability and contact
Photos, video and style
#2F6FDB
Write and practise a 60-second intro
Your prompt

Open Claude ↗

Works in ChatGPT too (it builds the page in Canvas). Claude usually gives a better-looking result.

Paste it into Claude and send

Claude chat box with the pasted prompt shown as a PASTED card and the send button highlighted
  1. Paste with Ctrl+V (Cmd+V on Mac) into a new chat. A long prompt turns into a small PASTED card. That's normal, Claude still reads all of it.
  2. Send it with the arrow button. Claude takes a minute or two to write the whole site.

If Claude asks you a question first, just answer it. If the reply stops halfway or ends with something like "add the rest here", send: "The file is incomplete. Send the complete index.html again in one artifact, start to finish."

Check the preview, then copy the code

Claude with the finished website preview open on the right and the Copy button highlighted
  1. Copy copies the whole website's code in one go. Don't try to select it by hand.
  2. The preview is your actual site. Scroll through it, check every word, and fix anything before you copy. Missing photos show as initials for now; they appear once you upload them in step 6.
Want changes? Send one of these (one change at a time works best)

Create your website's home on GitHub

Signed in to GitHub, click the + at the top right, then New repository. (Or go straight to github.com/new.)

GitHub Create a new repository page with the name field, Add README toggle and Create repository button highlighted
  1. Repository name: type your GitHub username followed by .github.io, exactly. If your username is mariasantos-va, type mariasantos-va.github.io. All lowercase.
  2. Add README: switch it On. Leave visibility on Public (free websites need a public repository).
  3. Click Create repository.

Add your website file

GitHub repository page with the Add file menu open and Create new file highlighted
  1. On your new repository, click Add file.
  2. Choose Create new file.
GitHub new file editor with the file name index.html, the code area and the Commit changes button highlighted
  1. Name the file index.html. Exactly that, lowercase.
  2. Paste the code you copied from Claude into the big box (Ctrl+V). It's long; that's fine.
  3. Click Commit changes..., then the green Commit changes button in the box that pops up.

Upload your photos

GitHub Add file menu with Upload files highlighted
  1. Back on the repository page, click Add file.
  2. Choose Upload files.
GitHub upload page with the drag and drop area and Commit changes button highlighted
  1. Drag in profile.jpg and your work-1.jpg, work-2.jpg... files. Drop them straight in, not inside a folder.
  2. Click Commit changes.

Turn it on and go live

GitHub Pages settings with Settings, Pages, the branch settings and the Your site is live banner highlighted
  1. Click Settings at the top of your repository.
  2. Click Pages in the left menu.
  3. Under Build and deployment, make sure Source says Deploy from a branch and Branch says main and / (root). If you had to change anything, click Save.
  4. Wait 1 to 3 minutes and refresh. When you see "Your site is live at...", click Visit site. That address is your portfolio.

Put it everywhere

Where to share it

Your OnlineJobs and Upwork profiles, LinkedIn's Featured section, your email signature, and every proposal you send. Open it on your phone once before sharing.

Updating it later

Ask Claude for the change in the same chat, copy the new code, then on GitHub open index.html, click the pencil icon, select all, paste, and commit. New photos: upload with the same file name and it replaces the old one.

Keep it safe

This site is public. Never put your home address, ID numbers, rates you don't want to share, or a client's private details on it. Use real testimonials only, with the client's permission.

If something goes wrong

I see a 404 "There isn't a GitHub Pages site here"

Wait 3 to 5 minutes and refresh, the first build is slow. Then check: the repository is named exactly yourusername.github.io, it's Public, and the file is called index.html (lowercase) and sits at the top level, not inside a folder.

My photos don't show

The name has to match exactly, including the ending and capital letters: Profile.JPG is not profile.jpg. Upload the photo again with the right name, or ask Claude to use your file's actual name. Photos also need to be at the top level next to index.html.

The site looks half-finished or broken

The code got cut off when you copied it. In Claude, send: "The file is incomplete. Send the complete index.html again in one artifact." Then replace the file on GitHub with the new version.

Claude says I've hit my limit

The free plan has a message limit that resets after a few hours. Your chat is saved, come back to the same chat later and keep going.

I don't like my username in the address

You can rename your GitHub account in Settings, then rename the repository to match. Or buy your own domain (around $10 a year) and connect it under Settings → Pages → Custom domain.

No work samples yet?
Do a mock task first. It takes an afternoon and gives you real proof for your portfolio.
See the mock tasks