Portfolio by chat

From scattered LinkedIn and an old site to a live portfolio on your own domain, without writing code. You brief, react, and approve.

  • 3–6 h over a few days
  • Grok Bot, Claude or ChatGPT
  • Free Vercel account
  • Optional domain
  • No coding
Five phases: Prepare, Design, Build, Ship, Keep it alive1Preparesources · brief2Designstructure · ref3Buildbuild · iterate4Shiphost · domain5Keep it aliveupdate by chat
The whole process in five phases.
0 of 13 steps done
Where are you starting from?
Product Design Lead, AI productsAlex RiveraI design AI products people actually trust and use.
Start here

What you’ll have at the end

A fast four-page portfolio: Home, Work, Playground, Contact. Light and dark mode, live on your own domain.

Time
3–6 h over a few days, mostly reviewing
You need
  • Claude or ChatGPT (chat app), or Claude Code / Codex
  • Your LinkedIn text, old site, READMEs and screenshots
  • A free host (Vercel, Netlify, CloudflareCloudflare tunnel: a temporary public https link to a site running on a computer. Pages, GitHub Pages) or your existing hosting; Node.js for the CLICommand-line tool: a program you run by typing commands in a terminal. path; a domain (optional)
Your first message
I'm building a personal portfolio site and I don't code. I'll paste my master brief below. Follow it in this whole chat. First, read the sources I've attached and list my roles (latest first, real years), my own projects (from their READMEs), anything that conflicts, and anything missing. Don't write any website copy yet.

[PASTE MASTER BRIEF]
Your first message
I'm starting my portfolio from scratch and I don't code. Interview me one question at a time: my roles, years, projects, proof (links, screenshots, things I can back up) and what I want to be known for. Wait for each answer before the next question. When we're done, draft a locked-facts note for me to confirm. Don't invent anything.

No screenshots yet? Say so, don’t let it invent visuals; use placeholders.

Opens your own ChatGPT or Claude with the prompt filled in. You may need to be signed in.

The same process with Claude or ChatGPT: chat app or coding agent (Claude Code / Codex).

Chat app

claude.ai · chatgpt.com

Use a Project. Previews via Artifacts / Canvas. Can’t run servers, deployDeploy: publish your files to the live web. or edit your disk: you copy files and run commands.

Coding agent

Claude Code · Codex

Reads and writes files in a folder on your computer and runs commands (preview server, Vercel CLI), usually after asking.

Beginners: start with the chat app you pay for; switch to an agent when copying files gets tedious (around step 7). Features change: check support.claude.com / docs.claude.com or help.openai.com / developers.openai.com.

Start here

The master brief

Fill this in first. Paste it into Project instructions, CLAUDE.md (Claude Code) or AGENTS.md (Codex). It stops the AI forgetting who you are or inventing things.

Master brief template
# MASTER BRIEF: Portfolio site for [YOUR NAME]

## WHO
- Public name (exactly as people know me): [e.g. Alex Rivera]
- One title: [e.g. Product Design Lead, AI products]
- One-sentence lede for the home page: [e.g. "I design AI products
  that people actually trust and use."]
- Location / availability (optional): [e.g. Based in Bengaluru, open to remote]
- Links: LinkedIn [URL] · GitHub [URL] · Email [ADDRESS] · Old portfolio [URL]
- Starting point: [existing material links / starting from scratch]
- Hosting: [Vercel / Netlify / Cloudflare Pages / GitHub Pages / my existing host]

## LOCKED FACTS (never change these without asking me)
Roles, latest first, with real years:
1. [Company], [Title], [YYYY–present]: [one line on what I did]
2. [Company], [Title], [YYYY–YYYY]: [one line]
3. [Company], [Title], [YYYY–YYYY]: [one line]
My own projects:
- [Project name]: [what it actually is, from its README], [link]
Education / other (optional): [...]

## DO NOT SAY
- No invented metrics, percentages, user numbers or awards.
- Don't say I "led", "founded" or "built" anything unless listed above.
  Use "worked on", "designed", "contributed to" where unsure.
- Don't name clients or confidential projects: [LIST]
- Don't use these words: [e.g. "passionate", "visionary", "rockstar"]

## PAGES
- Home: name, title, lede, short intro, preview of Work, links.
- Work: career chapters, latest first. Each chapter = company, role,
  years, 2–4 sentences, real screenshots. Not numbered.
- Playground: self-initiated projects as cards; whole card clickable.
- Contact: email, LinkedIn, GitHub, easy to find.

## STYLE
- Visual reference(s): [LIVE SITE LINK(S) / MOODBOARD SCREENSHOTS]
  Take inspiration from the layout, spacing, type and motion, never
  copy their text, logos, images or code.
- Fonts: [e.g. Google Fonts "Inter" for body, "[DISPLAY FONT]" for headings]
- Light and dark mode: follow system setting, offer a toggle, remember
  the choice.
- Tone of copy: plain, confident, specific. Short sentences.

## RULES FOR YOU (the AI)
- Plain static site: HTML, one shared CSS file, minimal vanilla JS.
  No frameworks, no build step.
- Folder: index.html, work.html, playground.html, contact.html,
  /css/style.css, /js/main.js, /images/
- If a fact is missing, ask me. Never guess or fill in.
- Make one change at a time when I give feedback, and tell me which
  files you changed.
- Images: use the files I provide; never stock photos or placeholders
  pretending to be real work.
Phase 1

Prepare

Sources, locked facts, master brief

Step 1 of 14

Step 1: Gather your source materialLet it interview you

The AI only knows what you give it.

Tip: Collect everything true about your work in one place first. In the real build, the AI described one of my own projects completely wrong until it was told to read the GitHub README.

No sources yet? Let it interview you, then confirm the facts it drafts.

ClaudeChatGPT
Collect
  • Your LinkedIn profile ("Save to PDF", or copy the Experience text: chat apps often can't open LinkedIn links).
  • Old portfolio URL and any case-study text you still like.
  • Company and product websites for each role.
  • GitHub README files for your own projects.
  • Real screenshots, ~2000px wide, clear names like acme-dashboard-2024.png.
  • A portrait photo you like.

claude.ai / ChatGPT: upload to the Project. Claude Code / Codex: put it all in sources/ in your site folder.

Prompt
I'm building a personal portfolio site. Before we design anything, read
all the source material I've attached: [LIST: LinkedIn PDF, old portfolio
URL, README for PROJECT NAME, screenshots].

Then give me back:
1. A list of my roles, latest first, with company, title and years
   exactly as they appear in the sources.
2. A one-line, factual description of each of my own projects, based only on
   its README.
3. Anything that conflicts between sources (e.g. different years).
4. Anything you'd need to know that isn't in the sources.

Do not write any website copy yet. Do not invent anything.
Message: interview me
I'm starting my portfolio from scratch and I don't code. Interview me one question at a time: my roles, years, projects, proof (links, screenshots, things I can back up) and what I want to be known for. Wait for each answer before the next question. When we're done, draft a locked-facts note for me to confirm. Don't invent anything.

No screenshots yet? Say so, don’t let it invent visuals; use placeholders.

Sample output
Good output: A tidy factual list you can check line by line, plus a few honest questions (“Your LinkedIn says 2021 but your old portfolio says 2020. Which is right?”).
Sample output
Good output: a draft of your facts to confirm or correct, with placeholders where you have no visuals yet.

Pitfall: Giving it a link it can't open, so it summarises from guesswork. If it sounds generic, paste the text in and say “use only this.”Vague answers get vague copy, and it may fill gaps with invented proof. Give specifics (real years, links), say “I don’t have that yet” when you don’t, and check the draft facts line by line.

Step 2 of 14

Step 2: Lock your positioning

What you say about yourself is harder to change than design.

Tip: Settle name, one title, a one-sentence lede, roles with real years, and a “do not say” list, then put it in the master brief.

ClaudeChatGPT
Prompt
Using only the facts from the sources, help me lock my positioning.
Give me:
- 3 options for a single title (e.g. "[Product Design Lead, AI products]").
- 5 options for a one-sentence home-page lede. Plain, specific, no hype,
  under 20 words.
- A short "do not say" list: claims that would overstate my role or that
  the sources don't support.

My constraints: I'm publicly known as [NAME]. I want to be seen as
[WHAT YOU WANT TO BE HIRED FOR]. Don't use the words [WORDS TO AVOID].

Pick, edit, paste the answers into the brief. Start every new chat with it (or rely on Project instructions / CLAUDE.md / AGENTS.md).

Sample output
Good output: Short, ordinary sentences you'd be comfortable saying out loud in an interview.

Pitfall: Letting the AI “punch up” your story with numbers (“increased engagement by 40%”). If you can't prove it, delete it.

Step 3 of 14

Step 3: Save the master brief

The single most useful thing here.

Tip: Paste it at the start of every session so the AI never forgets who you are or starts inventing things.

ClaudeChatGPTClaude CodeCodex
Where to keep it
  • claude.ai: a Project: brief in instructions, sources in knowledge.
  • ChatGPT: a Project: brief in instructions and files. No Projects? Short version in Custom instructions, full brief pasted per chat.
  • Claude Code: save as CLAUDE.md in your site folder (read automatically).
  • Codex: save as AGENTS.md in your site folder (read automatically).

The full template is in the master brief block above.

Sample output
Good output: Every new chat starts already knowing your locked facts and rules.

Pitfall: Long chats drift. When answers get vague, start a fresh chat with the brief.

Phase 2

Design

Structure and a visual reference

Step 4 of 14

Step 4: Pick the structure

Simple is easier to build, read and maintain.

Tip: Four pages is plenty. Avoid three equal case-study cards and numbering your jobs (“01, 02, 03” reads like a task list).

ClaudeChatGPT
Prompt
Propose a site map and the content outline for each page, using my
locked facts. Pages: Home, Work, Playground, Contact.

Rules:
- Work is organised as career chapters, latest first, not numbered.
- Don't use a grid of three identical case-study cards.
- For each section, tell me what images I need to supply.
- Keep it to plain text, no code yet.
Sample output
Good output: A page-by-page outline plus the images you need, e.g. “Work → [Company] chapter: 1 wide product screenshot, 1 detail shot.”

Pitfall: Adding pages “because portfolios have them” (About, Services, Blog). Each one is something to maintain.

Step 5 of 14

Step 5: Choose a visual reference

“Modern and clean” gets generic; pointing at real references gets a point of view.

Tip: Any reference works.

ClaudeChatGPT
Where to look

Framer, Webflow and other template galleries · Dribbble, Behance · Godly, Land-book, SiteInspire · portfolios of people you admire.

What to give it
  • A live website link (best): it can study the real layout and behaviour.
  • A moodboard: 3–5 screenshots (desktop + mobile), or an Are.na / Pinterest board exported as images.

A Figma link can work if the file is cleanly built (auto layout, named layers); otherwise export screenshots.

Prompt
Here is my visual reference: [LIVE SITE LINK(S) / MOODBOARD SCREENSHOTS]
(screenshots attached too, in case you can't open the links).

Describe its design system back to me before building anything:
layout grid, spacing, typography (sizes, weights, feel), colour use,
how images are shown, motion (hover and scroll effects), navigation,
and how it behaves on mobile.

If I've given you more than one reference, blend them into one
system and tell me what you took from each.

Take inspiration from the look and interaction only. Never copy any
of their text, logos, images or code.

Respect the source: take inspiration from the look and interaction, never copy text, logos, images or code. If you want an actual template, buy or remix it under its licence.

Sample output
Good output: A specific description you recognise (“large display headings, generous whitespace, subtle fade-up on scroll”). If not, correct it now.

Pitfall: It silently copies placeholder copy or brand names from a reference. Search the finished site for anything you didn't write.

Phase 3

Build

Site, preview, iterate, fact-check, SEOSearch engine optimisation: small tags that help Google show your site properly.

Step 6 of 14

Step 6: Build the static site

A static siteA site made of plain files (HTML, CSS, images): no server code or database.: one HTML file per page, one stylesheet, a small script for the theme toggle, an images/ folder.

Tip: No server code: free to host, fast, hard to break.

Claude CodeCodexClaudeChatGPT
Claude Code / Codex

Make a folder, start the agent in it, let it create files.

Terminal
mkdir my-portfolio && cd my-portfolio
# put CLAUDE.md or AGENTS.md (your master brief) here, plus sources/ and images/
claude      # for Claude Code
# or
codex       # for Codex CLI
claude.ai / ChatGPT

Ask for one file at a time. Copy each into a folder with exact file names. Ask for the folder layout first.

Prompt: first build
Using the master brief, build the site as plain static files:

index.html, work.html, playground.html, contact.html,
css/style.css (shared by all pages), js/main.js, images/ (I'll add files).

Requirements:
- Match the visual reference's layout, type and motion with my content.
- Fonts: [FONT NAMES] from Google Fonts.
- Light and dark mode: follow the system setting by default, include a
  small toggle in the nav, and remember the user's choice (localStorage).
  No flash of the wrong theme on load.
- Same header and footer on every page; nav highlights the current page.
- Responsive: looks good from 360px phone width up to large desktop.
- Use my image file names: [LIST, e.g. images/portrait.jpg,
  images/acme-dashboard-2024.png]. Add descriptive alt text.
- Respect "reduced motion" settings.
- No frameworks, no build tools, no external JS libraries.

Build Home first and show me. Then wait for my feedback before the
other pages.
Sample output
Good output: A clear folder of files with stated purposes, a home page that already feels like your reference, a working dark-mode toggle.

Pitfall: Asking for all four pages at once in a chat app: output gets cut off or inconsistent. Home first, approve, then “build Work using the same styles.”

Step 7 of 14

Step 7: Preview it locally

See the real site in a real browser, on laptop and phone.

Tip: Double-clicking index.html mostly works; a tiny local server is better.

ClaudeChatGPT
Terminal
python3 -m http.server 8000

Open http://localhost:8000. Stop with Ctrl+C. On your phone (same Wi-Fi): http://[THAT-ADDRESS]:8000, or Chrome device emulation. Real phones catch things emulators miss.

Prompt: Claude Code / Codex
Start a local preview server for this folder on port 8000 and tell me
the URL. Leave it running.
Sample output
Good output: Every page loads, nav works, images show, the theme toggle remembers your choice after a refresh.

Pitfall: Broken images from case mismatches (Portrait.JPG vs portrait.jpg). Keep file names lowercase with dashes.

Step 8 of 14

Step 8: Iterate with sharp feedback

Where the site gets good and most of your time goes.

Tip: Speak like a design director: say what's wrong, not how to code it.

ClaudeChatGPTClaude CodeCodex
  1. One change per message.
  2. Attach a screenshot and point at the problem.
  3. Describe the problem, not the fix. “Feels cramped” beats “add padding: 24px”.
Real feedback that worked
What was saidWhat it fixed
“This is too big and bleh.”An oversized, flat hero; the AI rebalanced type size and added contrast.
“The next card shows this anyway.”A duplicate hero image repeating a screenshot that appeared just below. Removed.
“Make the whole card clickable.”Only the title was a link; now the whole card is.
“This image sits under the wrong section.”A screenshot that belonged to one job was showing under another.
“This heading is inconsistent with the others.”One section heading had a different size/style.
“The dark block is white in dark mode.”A section with a hard-coded colour that ignored the theme.
“Make LinkedIn and GitHub easier to find.”Links moved into the header/footer as clear icons.
“Use my portrait as the logo.”A small round portrait replaced the text logo in the nav.
Prompt template
[Screenshot attached] On the [PAGE] page, [WHAT'S WRONG, in plain words].
I want it to [WHAT YOU WANT IT TO FEEL/DO].
Make only this change and tell me which file(s) you edited.

Chat app: ask for the full updated file, not a fragment. Claude Code / Codex: just refresh your browser.

Sample output
Good output: A small, targeted change; nothing else moved.

Pitfall: The “fix one thing, break another” loop. Say “undo that last change”, or keep backups. Claude Code / Codex can use git: “commit the current state with the message ‘home approved’.”

Step 9 of 14

Step 9: Fact-check every word

Fluent copy hides errors.

Tip: A wrong year or inflated title on your own portfolio is worse than none.

ClaudeChatGPT
Prompt
Fact-check all the text on every page against my LOCKED FACTS and the
source files. Produce a table:
page | exact sentence | issue (wrong year, wrong title, claim not in
sources, invented metric, overstated credit) | suggested fix

Don't change any files yet. I'll approve fixes.

Then check yourself: every year, title, company spelling, project description and link.

Sample output
Good output: A short table of real issues, e.g. “‘Led the redesign’: sources say ‘worked on the redesign’.”

Pitfall: Trusting the AI's fact-check entirely. It can confirm its own mistakes. Your eyes are the final check.

Step 10 of 14

Step 10: SEO basics

Small additions help search and link previews (LinkedIn, Slack, WhatsApp) show your name, title and image.

ClaudeChatGPT
  • Titles + meta descriptions: search results.
  • Open GraphTags that set the title, text and image shown when your link is shared. tags: share previews.
  • JSON-LDA hidden block of data that tells search engines who the site is about. Person: who the site is about.
  • sitemap.xmlA file listing your pages so search engines can find them. + robots.txt: help crawlers find pages.
Prompt
Add SEO basics to every page, using my final domain [https://YOURDOMAIN.com]:
- A unique <title> and meta description per page (under ~155 characters).
- Open Graph and Twitter card tags, using images/og-image.jpg
  (1200×630). Tell me what to put in that image.
- A canonical URL on each page.
- JSON-LD Person schema on the home page: name, jobTitle, url, sameAs
  (LinkedIn, GitHub), image.
- sitemap.xml listing all pages and a robots.txt that allows everything
  and points to the sitemap.
- A favicon from my portrait.
Use only facts from the brief.
Sample output
Good output: A list of changes per file, plus sitemap.xml and robots.txt at the root.

Pitfall: Expecting results from a preview link. Only your real domain counts, and indexing takes days to weeks. Optionally submit the sitemap in Google Search Console.

Phase 4

Ship

Preview link, Vercel, domain

Step 11 of 14

Step 11: Share a temporary preview (optional)

A quick tunnel gives your local preview a temporary public link.

Tip: Often simpler: skip to a preview deploy on your host.

CloudflareClaude CodeCodex
Terminal
cloudflared tunnel --url http://localhost:8000

Install cloudflared first (see Cloudflare's docs). It prints a random https://….trycloudflare.com link. Stop with Ctrl+C.

Prompt: coding agent
With the preview server running on port 8000, start a Cloudflare quick
tunnel so I can share a temporary HTTPS link. Tell me the URL, and how to
stop it.
Sample output
Good output: An https:// link that opens your site on someone else's phone.

Pitfall: Free quick tunnels are rate-limited and for testing only ; the link changes every time. · No custom name for quick tunnels. · Avoid plain http:// tunnel services. Use HTTPS, share only with people you trust, stop it when done.

Step 12 of 14

Step 12: Publish your site

Pick a free host for a static site; any of these works.

VercelClaude CodeCodex
Where will it live? All free for a static site
VercelFree Hobby plan (personal, non-commercial)
  1. Create a free account at vercel.com.
  2. Agent / terminal: npm i -g vercel, then vercel login and vercel deploy --prod in your site folder.
  3. No terminal: put the files in a GitHub repo, then in Vercel choose Add New → Project → Import. Each push redeploys.
NetlifyFree plan
  1. Create a free account at netlify.com.
  2. No terminal: drag your site folder onto app.netlify.com/drop.
  3. Agent / terminal: npx netlify-cli deploy --prod --dir . (it asks you to log in and pick a site the first time).
Cloudflare PagesFree plan
  1. Create a free Cloudflare account.
  2. No terminal: Workers & Pages → Create → Pages → Upload assets, then drop your folder.
  3. Agent / terminal: npx wrangler pages deploy . --project-name my-portfolio.
  4. Cloudflare’s menus change often; check its current Pages docs.
GitHub PagesFree for public repositories
  1. Create a public repository and upload your site files (Add file → Upload files).
  2. Settings → Pages → Source: Deploy from a branch → main, folder / (root).
  3. Wait a minute, then open the link GitHub shows.
I already have hostingcPanel, FTP or an existing provider
  1. Log in to your host’s control panel.
  2. Upload the contents of your site folder into the web root (often public_html) with File Manager or an FTP app like FileZilla. Replace the old site’s files.
  3. Turn on free SSL if it isn’t already (often AutoSSL or Let’s Encrypt in cPanel).

Plans and menus change. Check the host’s current docs before you start.

Prompt: publish
Help me publish this static site. My choice of host: [VERCEL / NETLIFY / CLOUDFLARE PAGES / GITHUB PAGES / MY EXISTING HOSTING (cPanel/FTP)].
Walk me through it one step at a time for that host, using its current official docs. If you can run commands, do the deploy yourself and ask me to handle any sign-in in my browser. Don't change any site files. Tell me the live URL when done.

Redeploy after each change the same way you first published.

Sample output
Good output: A working https link on your host that matches your local preview exactly.

Pitfall: Deploying the wrong folder (with your sources/ LinkedIn PDF inside). Publish only the site files; keep sources and brief files out.

Step 13 of 14

Step 13: Point your domain

Do this before you share publicly, so the first link people see is permanent.

Your registrar
  1. Add the domain in your host first (table below). It then shows the exact records.
  2. Choose where DNSThe internet’s address book: it points your domain at the host serving your site. lives. Easiest: keep your registrar’s DNS and add the records. Or move nameserversNameservers decide which company answers DNS for your domain. Moving them moves all your records, including email. to the host (Cloudflare Pages needs this for the apex). Moving nameservers moves all records, so copy your email (MXDNS records that deliver your email. Leave them alone./TXT) records first.
  3. Add the apex record (A or ALIASAn apex record some DNS providers offer that works like a CNAME for yourname.com.) and the www CNAMEDNS records that point your domain (A or ALIAS, for yourname.com) or www (CNAME) at your host.; remove old A/CNAME records for the old site.
  4. Wait for SSL. Minutes to a few hours; the host shows a check or “certificate issued”.
  5. Check it works: open https://yourdomain.com and https://www.yourdomain.com on your phone (off Wi-Fi), and confirm one redirects to the other.
HostWhere to add it, and the records
VercelProject → Settings → Domains → add yourdomain.com and www. Add exactly the A and CNAME values Vercel shows, or switch to Vercel’s nameservers.
NetlifyDomain management → Add a domain. Apex: an ALIAS/ANAME/flattened CNAME to apex-loadbalancer.netlify.com, or an A record to 75.2.60.5 (keep only one apex A record). www: CNAME to your-site.netlify.app. Or use Netlify DNS nameservers.
Cloudflare PagesPages project → Custom domains → add it there first. www: CNAME to your-site.pages.dev at your current DNS. The apex (yourdomain.com) only works if the domain uses Cloudflare’s nameservers.
GitHub PagesSettings → Pages → Custom domain. Apex: four A records to 185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153 (or an ALIAS to username.github.io). www: CNAME to username.github.io. Then tick Enforce HTTPS.
I already have hostingYour domain probably already points here. If not, use the nameservers or A record your host gives you.
Prompt
My site is live on [HOST] at [LIVE URL]. I want it on [YOURDOMAIN.com] and www. My registrar is [REGISTRAR] and my current DNS records are: [PASTE OR SCREENSHOT].
Using [HOST]'s current docs, tell me exactly what to add in [HOST] and which DNS records to add, change or delete, one step at a time. Tell me whether to keep my registrar's DNS or move nameservers, and warn me before anything that would break my email.
Sample output
Good output: A short list of precise edits for your host, with a warning not to touch MX (email) records.

Pitfall: Deleting MX or TXT records, or moving nameservers without copying them, and breaking your email.

Phase 5

Keep it alive

Update by message

Step 14 of 14

Step 14: Keep updating by chat

Your site is just a folder of files.

Tip: Updates are a sentence away. Then preview, fact-check, redeploy.

ClaudeChatGPTClaude CodeCodex
Prompt: add a project
Add a new Playground project: [NAME], [ONE-LINE DESCRIPTION FROM README],
link [URL], image images/[FILE].png. Match the existing cards.
Then update sitemap.xml if needed.
Prompt: swap an image
Swap the image in the [COMPANY] chapter for images/[NEW-FILE].png and
update its alt text.

Or rebuild in Framer. Buy or remix the template and edit visually. Framer offers an official way to connect external agents like Claude Code and Codex (setup has been via npx @framer/agent setup). See Framer's guide. Check current docs; this is new.

Sample output
Good output: A small, matching change you can preview before redeploying.

Pitfall: Skipping the fact-check on “small” updates. New copy needs the same check.

Troubleshooting

The AI keeps getting facts wrong or “forgetting”

Start a new chat with the master brief at the top, or check Project instructions / CLAUDE.md / AGENTS.md. Long chats drift.

It invents metrics or job titles

Point to the “DO NOT SAY” rule and ask it to list every claim not found in the sources.

The chat app’s code is cut off

Ask for one file at a time: “Give me the complete css/style.css only.”

Images don’t show

Check file names and folders match exactly, lowercase, no spaces.

Fonts look wrong

Check the Google Fonts link is in the <head> of every page; preview via a local server rather than double-clicking.

Dark mode has white or unreadable blocks

Screenshot it: “This section ignores dark mode; make all colours use the theme variables.”

Page “flashes” light before going dark

“Set the theme before the page paints, with a small inline script in the head.”

Site looks fine locally, broken on Vercel

Usually a capitalisation mismatch or a missing file. Ask the agent to check every referenced file exists with exact case.

vercel command not found

Install Node.js, then npm i -g vercel. Restart the terminal.

Domain not working after hours

Compare registrar records with Vercel’s exactly; remove conflicting old A/CNAME records; wait a bit longer.

Changes don’t appear live

You didn’t redeploy, or the browser cached it: hard-refresh (Cmd/Ctrl+Shift+R).

Everything broke after a change

“Undo the last change,” or restore your backup / git commit.

Checklist

Steps
Before building
Building
Before launch
Launch

You don’t need to learn to code to have a great portfolio. You need true source material, a locked story, a reference you love, and the patience to give short, honest feedback.