GuideBuilt from the workflow behind this siteAbout 63 min read
Build Your PM Portfolio. No Coding Required.
A practical, step-by-step guide to building your personal portfolio with AI, GitHub, and Vercel — without needing to be a developer.
You don’t need to buy a domain: the core workflow ends with a free vercel.app address. Some AI coding tools need a paid plan; others have free tiers with usage limits. A custom domain is optional and renews yearly.
Written by Aditya Gangwani, based on how this site was built with Google Antigravity, Claude, GitHub and Vercel.
By the end you will have
- A portfolio site built with an AI coding tool from your real content
- Its code stored safely in a GitHub repository
- A live public URL on Vercel that updates when you push changes
- Optionally, your own custom domain
6 min read
Chapter 1: Understand what you are building
See what a PM portfolio is for, how it differs from a resume, a LinkedIn profile, and a case study, and choose the sections that fit your experience and goals.
Before you open an AI tool, it helps to be clear about what you are making and who it is for. A portfolio website is not a longer resume. It is a small, focused site that shows how you think about products, what you have worked on, and how someone can reach you.
By the end of this chapter you will have a rough list of sections, which is the starting point for Chapter 2.
Why a portfolio matters for product managers
Product management is hard to judge from a job title. Two people with the same title can have done very different work, and a resume rarely has room to explain the reasoning behind a decision. A portfolio gives you that room.
- It shows how you think, not just where you worked. A short case study can walk a reader through a problem, the options you weighed, and why you chose one. That is the core of PM work, and it is what interviewers try to uncover anyway.
- It gives people one link. Recruiters and hiring managers can see your background, projects, resume, and contact details in one place instead of piecing them together from several sites.
- It demonstrates initiative and taste. Choosing what to include, writing it clearly, and publishing it is itself a small product. A tidy, well-structured site signals that you care about the details users notice.
A portfolio will not replace your resume or your network, and it does not guarantee interviews. It is a supporting asset: something you can share with confidence when someone asks what you have done.
What a PM portfolio should communicate
Whatever sections you choose, a reader should come away with clear answers to four questions:
- Which problems did you choose to work on, and why? Show that you can spot a problem worth solving and explain who had it.
- How do you make decisions? Describe the trade-offs, the evidence you used, and what you decided not to do.
- What happened, and what did you learn? Share real outcomes, including the ones that did not go to plan. Honest reflection is more convincing than a perfect record.
- How do you work with people? PMs work through engineers, designers, and stakeholders. Mention how you collaborated, aligned people, or handled disagreement.
Use a real portfolio as inspiration, not a template
This guide is based on the workflow behind adityagangwani.me, the site you are reading it on. It is fine to look at that site, or any portfolio you admire, to understand how it is structured. Notice the order of the sections, what question each one answers, and how much text sits on each page.
Do not copy the wording, the visual design, or any claims. Your portfolio only works if it describes your own experience in your own voice. A useful exercise is to write down, for each section of a site you like, one sentence on what it is trying to tell the reader. Then ask whether you need that section at all.
Portfolio, resume, LinkedIn profile, or case study?
These four formats overlap, so it is easy to end up with a website that simply repeats your resume. The table shows what each one is best at.
| Format | What it is | Best for | Who controls it |
|---|---|---|---|
| Portfolio website | Your own site with your positioning, selected work, and contact details. One long page or a few short ones. | Showing how you think through projects and giving people a single link to share. | You control the structure, design, and content. |
| Resume | A concise document listing roles, education, and achievements. Usually one or two pages, often a PDF. | Job applications and applicant tracking systems. | You control the content; employers often expect a conventional layout. |
| LinkedIn profile | A profile on a professional social network, with fixed sections defined by the platform. | Being found by recruiters, networking, and showing endorsements and activity. | You control what you write; the platform controls the format and features. |
| Product case study | A detailed story of one project: the problem, your role, decisions, and outcome. One page per project. | Proving depth of thinking on a specific piece of work. | You control it. It usually lives inside your portfolio. |
In practice, your portfolio links to the other three: it hosts your case studies, offers your resume as a download, and links to your LinkedIn profile.
Sections a finished portfolio can contain
Here are the sections most PM portfolios draw from. You do not need all of them. Read the “include it if” line for each and keep the ones that fit.
- Hero and positioning statement
The first thing visitors see: your name and one or two sentences on what you do and what you are looking for. Include it if: always. This is the one section every portfolio needs.
- About me
A short, human introduction: your path into product, what you care about, and what drives you. Include it if: your background or motivation helps explain your work, such as a career switch.
- Experience
Roles, internships, or significant responsibilities, with a line or two on what you owned. Include it if: you have relevant roles to show. Students can fold this into projects instead.
- Projects and case studies
Two to four pieces of work explained in depth. Include it if: you have at least one project you can describe honestly. For most PMs this is the most important section.
- Product thinking and decision-making
Product teardowns, frameworks you use, or short write-ups of trade-offs. Include it if: you want to show judgement beyond your past projects, or you have limited work experience to point to.
- Skills and toolkit
Methods and tools you use, such as user research, SQL, analytics, or prototyping tools. Include it if: the roles you want ask for specific skills. Keep it to what you can discuss in an interview.
- Education and certifications
Degrees, courses, and certifications. Include it if: you are early in your career or the credential is relevant to the roles you want.
- Writing and other work
Blog posts, talks, newsletters, or community work. Include it if: you have pieces you are proud of and that show how you think.
- Contact and social links
An email address or contact form, plus links to LinkedIn, GitHub, or other profiles, and your resume. Include it if: always. Make it easy to find from every page.
Choose sections based on your goals
The right set of sections depends on what you want the site to do. A few common starting points:
- Applying for your first PM role: hero, about, projects and case studies, product thinking, education, contact.
- Experienced PM changing companies: hero, experience, two or three strong case studies, skills, contact.
- Switching into product from another field: hero, about (explain the switch), projects, transferable experience, contact.
Fewer, stronger sections beat a long page of thin ones. You can always add more later, because updating it is a commit and a push once it is set up.
Note
Students: you do not need to invent work experience
If you have not had a PM job yet, that is normal. Class projects, product teardowns, side projects, volunteering, hackathons, and student society work all count when you present them honestly. Say what the project was, what you personally did, and what you learned.
Do not label a class project as a job, or present a concept as a shipped product. Reviewers can usually tell, and honest framing is more persuasive than an inflated one.
With a rough list of sections in mind, the next step is to gather the actual content and assets that will fill them.
5 min read
Chapter 2: Prepare your content and assets
Gather your positioning, projects, links, and images before you open an AI tool. A discovery prompt then turns them into a sitemap and content outline without invented claims.
AI tools are good at turning material into a website. They are not good at knowing your career. If you start with a vague request, you get a generic site full of guesses. If you start with real content, you get a site that sounds like you.
This chapter is about collecting that content before you build anything. Plan for an hour or two, spread over a couple of sittings. It is the part of the process that most affects how good your portfolio is.
What to collect
Create a folder on your computer called something like portfolio-content and a single text document inside it for your notes. Work through the list below. Rough notes are fine; you will refine them with the discovery prompt later in this chapter.
Your name and headline
Write your name as you want it shown, and a one-line headline, for example “Product manager focused on B2B onboarding” or “Computer science student moving into product management”. Draft two or three versions; you can choose later.
A short introduction
Three to five sentences about who you are, what kind of product work interests you, and what you are looking for next. Write it the way you would introduce yourself at a meetup.
Education and experience
List degrees, courses, roles, and internships with dates. For each role, note one to three things you owned or changed. Your resume is a good starting point, but add the context it leaves out.
Projects
For two to four projects, note:
- the problem and who had it
- your role, and what you personally did
- the key decisions and trade-offs
- your approach: research, prioritisation, experiments, delivery
- the outcome and what you learned
Skills and tools
Methods you use (user interviews, roadmapping, A/B testing) and tools you know (analytics, design, or project tools, SQL). Keep it to things you could talk about in an interview.
Links
Collect the exact URLs for your LinkedIn profile, GitHub (if you have one), any writing or talks, and other profiles you want to show. Open each one to check it works and is up to date.
Profile photo and optional visuals
A clear, recent photo, plus any images that help explain a project, such as a diagram, a sketch, or a screenshot you are allowed to share.
How to write credible case studies
A case study is a short story about one project that shows your thinking. You do not need a fancy format. This simple structure works for most projects:
- Context: the product, the team, and the situation, in two or three sentences.
- Problem: what was wrong or missing, and for whom.
- Your role: what you were responsible for, and who you worked with.
- Options and decision: what you considered, what you chose, and why.
- What shipped: what was actually built or changed.
- Outcome: what happened as a result.
- What you learned: what you would keep or do differently.
Use real outcomes. If you have numbers you are allowed to share, use them exactly. If you can only share an approximate figure, say that it is approximate and where it comes from (for example, “roughly a third fewer support tickets in the quarter after launch, based on the support team’s weekly reports”). If you have no number, use a qualitative result (“the sales team stopped asking for manual exports”).
Watch out
Never invent metrics or share confidential information
Made-up numbers are easy to spot in an interview, where you will be asked how you measured them. Only include results you can explain.
For work done at a company, assume details are confidential unless you know otherwise. Anonymise or aggregate where you can (“a fintech client” instead of the company name, “across several markets” instead of per-country figures), leave out internal project names, revenue, and unreleased features, and ask your manager or employer if you are unsure. When in doubt, describe the problem and your reasoning, and leave the sensitive detail out.
Prepare your files
- Resume: export it as a PDF with a clear filename, such as
firstname-lastname-resume.pdf, so it looks tidy when someone downloads it. Remove your home address and anything else you would not want published on the open web. - Profile photo: use a square, high-resolution image with good light and a plain background. A square image is easiest to crop into a circle or card.
- Images and screenshots: only use images you own or have permission to use. Product screenshots from a past employer may be confidential; check before publishing, or create a simple diagram instead.
Put all of these files in your portfolio-content folder so they are easy to find later.
Turn your notes into a plan with a discovery prompt
Your notes are now the raw material. The next step is to shape them into a plan: what you will say, in what order, and how the site should feel. An AI chat assistant can help by interviewing you, the way a good career coach would.
Copy the prompt below into a new chat. The AI will ask you questions a few at a time. Answer them using your notes, and paste in sections of your notes when that is quicker. The prompt tells the AI not to invent anything and not to write code yet, so the result is a plan built only from your real information.
Prompt
Portfolio discovery
Have an AI interview you and turn your answers into a positioning statement, sitemap, content outline, asset checklist, and design direction.
You are a portfolio strategist helping me plan a personal portfolio website for a product management career. Your job right now is discovery: interview me, then turn my answers into a clear plan. Do not write any website code yet. HOW TO INTERVIEW ME 1. Ask your questions in small batches of 3 to 5, and wait for my answers before moving on. 2. Cover these topics, in roughly this order: - My background: education, roles, and how I got into product - My goals: what I want this website to help me achieve - My target roles and audience: who will read the site - My projects: for each one, the problem, my role, key decisions, approach, and outcome - My strengths and skills, and the tools I use - My links and assets: resume, LinkedIn, GitHub, photo, other work - My preferred visual style, including 2 or 3 websites I like and why 3. If an answer is vague, ask a short follow-up question instead of guessing. RULES 1. Do not invent experience, achievements, metrics, employers, job titles, dates, or outcomes. Use only what I tell you. 2. If something is missing, ask me. If I cannot answer, write "[needs input]" in that place. 3. If I give a number, keep it exactly as I gave it. If I describe a result without a number, keep it qualitative. 4. Flag anything that sounds confidential (internal names, revenue, unreleased features) so I can anonymise it. 5. Do not generate website code or a full site design until discovery is finished and I confirm the plan. WHEN DISCOVERY IS DONE, give me: 1. Positioning statement: 2 or 3 options of one or two sentences each. 2. Proposed sitemap: the sections or pages, in order, with one line on what each one is for. 3. Content outline per section, using only facts I provided. 4. Asset checklist: what I already have and what is still missing. 5. Design direction: tone, typography, colour, and layout, with reference sites. Format everything as one Markdown document I can save as portfolio-brief.md. Start by briefly explaining how this will work, then ask your first batch of questions.
When the AI delivers its plan, read it carefully before you accept it.
- Check every fact. Correct anything that is wrong or that the AI added on its own.
- Fill in each “[needs input]” gap, or remove that part of the outline.
- Pick one positioning statement, or combine the options into one you like.
Then save the final version as a document called portfolio-brief.md in your portfolio-content folder. The .md ending means Markdown, a plain text format that uses simple symbols such as # for headings. Any text editor can open it. You will paste this brief into your AI coding tool in Chapter 3.
Tip
You do not need a coding tool yet
This prompt works in any chat AI, including the free plan of Claude (opens in a new tab). Discovery is just a conversation, so you can do it before you install anything.
8 min read
Chapter 3: Choose your AI coding tool
Compare coding agents such as Google Antigravity and Claude Code with chat-only assistants, then build your site with a master prompt and specific, step-by-step feedback.
You now have a portfolio brief. You do not need to know how to code to turn it into a website, but you do need to give clear instructions, review what the tool produces, and ask for specific changes.
The workflow below works with Google Antigravity, Claude Code, or another tool you prefer. No single tool is required.
What AI coding tools do
An AI coding tool is an assistant that writes and edits code from instructions in plain English. You describe what you want, the tool writes the files, and you review the result. For a portfolio, that means the pages, the styling, and the small bits of behaviour such as a mobile menu.
The tool is fast, but it is not the author of your portfolio. It cannot know your career, and it can make mistakes. Your job is to supply accurate content, judge the result, and steer it.
Coding agent or chat interface?
AI tools come in two broad shapes. A coding agent works directly in a folder on your computer (or in a project the tool hosts for you): it creates and edits files, runs commands, and can often start a preview. A chat interface only replies with text, so you copy code into files yourself.
| Aspect | Coding agent | Chat interface |
|---|---|---|
| Where it works | Inside your project folder, with access to its files. | In a chat window, separate from your files. |
| How code reaches your project | The agent creates and edits files for you. | You copy each file from the chat and save it yourself. |
| Previewing the site | Can usually run commands to start a local preview. | You set up and run the preview yourself. |
| Best for | Building and changing a multi-file website. | Planning, writing content, and asking questions. |
| Watch out for | Review changes before you accept them; it can edit many files at once. | Easy to lose track of which file is the latest version. |
For building the site, use a coding agent. A chat interface is still useful for planning, which is why the discovery prompt in Chapter 2 works in any chat AI.
Tools you can use
Plans and features change often, so treat the details below as a summary at the time of writing and check each tool’s official page before you sign up. Some tools offer a free tier with usage limits; others need a paid plan.
Google Antigravity
Google Antigravity (opens in a new tab) describes itself as an agentic development platform. It is available as an app, a command-line tool, and an IDE (a code editor), on macOS, Windows, and Linux. The Antigravity IDE (opens in a new tab) can work across the editor, the terminal, and a browser, which suits a build-and-preview workflow.
At the time of writing, the pricing page (opens in a new tab) lists a plan for individuals at no charge with basic weekly rate limits, meaning you can only use it so much each week. Google AI Pro and Ultra plans raise those limits. See the plans documentation (opens in a new tab) for current details, and the getting started guide (opens in a new tab) to install it.
This site was built mainly with Antigravity, with occasional help from Claude.
Claude Code
Claude Code (opens in a new tab) is Anthropic’s AI coding assistant. You can use it in a terminal, through extensions for editors such as VS Code and JetBrains IDEs, in a desktop app, or on the web.
It requires a paid Claude plan (Pro, Max, Team, or Enterprise) or a Console account, which is Anthropic’s API platform. The free claude.ai plan does not include Claude Code, though you can still use free Claude chat for planning. Follow the setup guide (opens in a new tab) to install it and the quickstart (opens in a new tab) for your first session.
Other tools
Many other tools can build a portfolio, including Cursor (opens in a new tab), GitHub Copilot (opens in a new tab), Replit (opens in a new tab), Bolt (opens in a new tab), Lovable (opens in a new tab), and v0 by Vercel (opens in a new tab). They differ in how they work and what they cost, so check each tool’s current plans and limits.
Note
Browser-based builders work a little differently
Tools such as Replit, Bolt, Lovable, and v0 run in your browser and may host the site for you, with their own publishing or export options. That can be convenient. This guide assumes you end up with your site’s code in a folder you can put on GitHub, so if you use one of these tools, look for its option to export the code or connect it to GitHub before you continue to Chapter 4.
The build loop
Whichever tool you choose, the work follows the same loop. Expect to go around steps 4 to 6 many times.
Create or open a project folder
Create a new, empty folder for the website, such as
my-portfolio, and open it in your tool. Each tool’s getting-started guide shows how. Keep this separate from yourportfolio-contentnotes folder, because everything in the project folder may end up on GitHub.Provide your content and requirements
Paste the master prompt below, with your portfolio brief in the space provided. If you want the agent to use your photo or resume, copy those files into the project folder and tell it their file names.
Ask the tool to build
The prompt asks the agent to share its plan first. Read it, ask questions if anything is unclear, then confirm. Many agents ask for approval before running commands or editing files; read each request before you approve it.
Review the preview
Ask the agent to start a local preview, often called a development server: a version of the site that runs only on your computer at an address such as
http://localhost:3000. Open it in your browser, read every section, and click every link. Then make the browser window narrow, or use your browser’s device mode in its developer tools, to check how it looks at phone width.Give specific feedback
Write down what is wrong, where, and what you expect instead. Send one or two issues at a time. The next section shows what specific feedback looks like.
Fix and test again
After each change, reload the preview and check the part you asked about, plus anything nearby that might have been affected. Repeat until you are happy, then move on to publishing.
The master prompt
This prompt gives the agent everything it needs for a strong first version. Replace each part in square brackets with your own information before you send it. It works whether the folder is empty or already contains a project.
One of its rules keeps secrets out of your code, such as an API key (a password-like code that lets a program use a paid or private service). A typical portfolio does not need one.
Prompt
Build my PM portfolio
Give a coding agent your real content, design priorities, and rules so the first version is accurate, accessible, and ready to deploy.
Act as a senior frontend developer and product designer. Build my professional product management portfolio website in this project folder. ABOUT ME Use only the information below. It is my portfolio brief. [paste the full contents of your portfolio-brief.md here] SECTIONS TO INCLUDE [list the sections you chose, for example: hero, about, projects and case studies, experience, skills, contact] DESIGN 1. Create a polished, professional design that is fully responsive on phones, tablets, and desktops. 2. Prioritise typography, spacing, visual hierarchy, usability, and readability over decoration. 3. Follow the design direction in my brief. Keep animation subtle and purposeful. CONTENT RULES 1. Use my real information only. No fake statistics, invented projects, testimonials, employers, or outcomes. 2. Use my real links: [your email], [your LinkedIn URL], [your resume file or URL], [any other links]. 3. The finished site must not contain placeholder links or placeholder text. If something is missing, list it and ask me. 4. Every link, button, and interaction must work. TECHNICAL RULES 1. If this folder already contains a project, use its existing stack. Otherwise choose a simple, beginner-friendly stack that is easy to deploy (for example plain HTML, CSS, and JavaScript, or Next.js) and explain your choice in two or three sentences. 2. The site must be deployable to Vercel from a GitHub repository. 3. Do not add unnecessary dependencies or heavy animation libraries. 4. Build for accessibility: semantic HTML, alt text for images, keyboard navigation, visible focus states, and good colour contrast. 5. Add a page title and meta description. 6. Add a .gitignore that excludes dependency folders, build output, and environment files. 7. Never put passwords, API keys, or other secrets in the code. PROCESS 1. Before writing code, summarise your plan (stack, file structure, sections) and wait for me to confirm. 2. Ask me before any big decision, such as adding a dependency, changing the stack, or removing content. 3. When you finish, explain in beginner-friendly steps how to run and preview the site on my computer. 4. List every file you created or changed, with one line on what each one does.
Iterate with specific feedback
The first version will rarely be right. The quality of your feedback decides how quickly it improves. “Make it better” forces the tool to guess, and it may change things you liked. Specific feedback says where the problem is, what you see, and what you want instead.
| Vague | Specific |
|---|---|
| “Make it better.” | “On mobile at 375px, the project cards overflow horizontally. Stack them in one column and reduce the heading size.” |
| “The colours are off.” | “The grey body text on the light background is hard to read. Darken it to meet WCAG AA contrast and keep the accent colour as it is.” (WCAG AA is the widely used accessibility standard for text contrast.) |
| “Fix the projects section.” | “In Projects, the second card’s ‘Read case study’ link goes nowhere. Link it to the case study page for [project name].” |
| “Add some animation.” | “Add a subtle fade-in to the project cards as they scroll into view, and turn it off for visitors who prefer reduced motion.” |
A few habits make this loop safer:
- Make small changes, one issue at a time. If something breaks, you will know which change caused it.
- Review what changed. Most coding agents show a diff, a view of exactly which lines were added or removed. Skim it, and check the preview, before accepting.
- Keep a copy before large changes. Before a big redesign, save a copy of the project folder, or once you have set up GitHub, make a commit. Chapter 4 explains commits.
Prompts for common next steps
Use these once the first version exists. Each one asks the agent to diagnose before changing anything, keep changes small, leave your existing content alone, and report what it changed.
Prompt
Refine the visual design
Improve typography, spacing, and hierarchy without changing your content.
Review the visual design of my portfolio before changing anything. Focus on typography (sizes, line length, line height), spacing and alignment, visual hierarchy, colour and contrast, and consistency between sections. What I have noticed: [describe what feels off, for example "the hero text feels cramped and the project cards look unrelated to the rest of the page"] RULES 1. First list the five most important issues, ordered by impact, with the change you would make for each. Wait for my approval. 2. Do not change any text, links, or section order. 3. Do not add dependencies or heavy animation. 4. Keep changes small and consistent with the existing style. 5. Afterwards, list the files you changed and what I should check in the preview.
Prompt
Fix mobile responsiveness
Find and fix layout problems on phones and tablets.
Check my portfolio for mobile and tablet problems at widths of 375px, 414px, and 768px. Look for: horizontal scrolling, text or images that overflow, text that is too small to read, buttons or links that are too small to tap, and navigation that does not work on small screens. Issues I have already seen: [describe them, including the page, section, and screen width] RULES 1. Diagnose first. List each issue with the section and width where it happens, and the likely cause. 2. Fix with the smallest possible changes. Do not change the desktop layout unless it is needed for the fix. 3. Do not remove any content to make things fit. 4. Afterwards, list the files you changed and the widths I should re-check.
Prompt
Present a project as a case study
Turn your notes on one project into a clear, honest case study page or section.
Help me present one project as a case study on my portfolio. PROJECT NOTES [paste your notes for this project] STRUCTURE Context, Problem, My role, Options and decision, What shipped, Outcome, What I learned. RULES 1. Use only facts from my notes. Where something is missing, write "[needs input]" and ask me. 2. Do not invent metrics, quotes, or results. Keep qualitative results qualitative. 3. Flag anything that sounds confidential, such as internal names, revenue, or unreleased features. 4. Keep each part short and easy to scan, with clear headings. 5. Show me the written text for approval before you change any code. 6. Then build it using the site's existing design and components, make sure it reads well on mobile, and list the files you changed.
Prompt
Check accessibility and SEO
Audit headings, alt text, keyboard use, contrast, and page metadata before fixing anything.
Audit my portfolio for accessibility and basic SEO. Report first; do not change anything yet. CHECK 1. One main heading (h1) per page and a logical heading order. 2. Alt text on meaningful images; decorative images hidden from screen readers. 3. Descriptive link text (no "click here"). 4. Every interactive element works with the keyboard and has a visible focus state. 5. Text colour contrast meets WCAG AA. 6. Form fields have labels. 7. Each page has a unique title and meta description, Open Graph tags for link previews, a favicon, and a language attribute. RULES 1. List findings with severity (high, medium, low) and the file where each one is. 2. Wait for my confirmation before fixing. 3. Propose any new alt text, titles, or descriptions for my approval. Do not change other content or the visual design. 4. Do not add dependencies. List the files you changed when you are done.
Prompt
Fix a bug without breaking anything else
Diagnose a problem and apply the smallest safe fix.
Something on my portfolio is broken. Help me fix it without breaking anything else. WHAT I SEE [describe the problem: which page or section, what you expected, what happens instead, and the steps to make it happen] ERROR MESSAGE (if any) [paste the exact error text] RULES 1. Diagnose first. Investigate and explain the most likely cause before changing any code. 2. Propose the smallest safe fix and wait for my approval. 3. Do not rewrite, refactor, or reformat unrelated code. Do not remove features or content. 4. If you are not sure of the cause, say so and suggest how we can find out. 5. After the fix, explain how I can confirm it works, and check that the rest of the site still works. 6. List every file you changed.
If something breaks after you deploy, Chapter 9 has a fuller diagnostic prompt.
Prompt
Final quality check
Run a last pass over content, links, layout, and build before you publish.
Do a final quality check of my portfolio before I publish it. Report only; do not fix anything until I confirm. CHECK 1. All internal links and section anchors work. 2. List every external link so I can open and confirm each one. 3. No placeholder text, sample content, "#" links, or leftover notes. 4. No invented metrics, projects, or claims compared with my brief. 5. My resume opens and my contact details are correct. 6. Layout works at 375px, 768px, and 1280px wide, and the site is usable with a keyboard. 7. No errors in the browser console. 8. The production build succeeds, if this project has a build command. Run it and show me the result. 9. No passwords, API keys, or other secrets in the code, and .gitignore covers dependencies, build output, and environment files. Report the result as a checklist marked pass or fail. For each failure, propose the smallest fix.
Tip
Done when it is accurate, not when it is perfect
Once the content is correct, the layout works on mobile and desktop, and the final quality check passes, you are ready to publish. You can keep improving the design after the site is live.
8 min read
Chapter 4: Put your project on GitHub
Learn what a repository is, create one, and push your project to it, while keeping passwords, API keys, and private data out of your code.
Your AI tool has built a portfolio that runs on your computer. Before anyone else can see it, the code needs a home online that a hosting service can read. That home is GitHub. This chapter explains the handful of terms you need, then gives you three main ways to get your project there, plus a browser-upload fallback. Pick one; you do not need them all.
If your project is already on GitHub (some AI tools create the repository for you), check the secrets section below and then move on to Chapter 5.
GitHub in plain English
Git is a tool that records the history of a folder of files. GitHub is a website that stores that history online, so it is backed up, shareable, and readable by services like Vercel. You will meet these words throughout the rest of the guide:
- Repository
A project folder plus its full history of changes. People shorten it to “repo”. Your portfolio will live in one repository.
- Commit
A saved snapshot of your files with a short message describing what changed, such as “Add projects section”. You can always look back at, or return to, an earlier commit. About commits (opens in a new tab)
- Push
Sending the commits you made on your computer up to GitHub. Until you push, they exist only locally.
- Branch (main)
A separate line of work inside a repository. Your project starts with one branch, usually called
main. For a personal portfolio you can do all your work onmain.- .gitignore
A small text file listing files and folders Git should never record, such as downloaded packages (
node_modules), build output, and files holding secrets (.env). Ignoring files (opens in a new tab)- Source code vs website
The code in GitHub is the recipe. Vercel takes that recipe, cooks it (runs the build), and serves the finished dish at a web address. Changing the recipe on GitHub is how you change the live site.
Why version control matters
- You can undo a bad AI edit. AI tools sometimes change more than you asked. If you commit each working version, you can return to it quickly instead of trying to describe what used to be there.
- You get a history. Every commit shows what changed and when, which makes it much easier to work out when something broke.
- Vercel deploys from it. In the next chapter, Vercel watches your repository and rebuilds the site every time you push.
Create an account and a repository
Create a free GitHub account
Sign up with an email address you will keep long term, and pick a username you are happy to show employers: it appears in your repository’s web address. Creating an account on GitHub (opens in a new tab)
Create a new repository
Choose yourself as the owner, give it a short name such as
portfolio, and choose public or private (see below). Creating a new repository (opens in a new tab)If you will push an existing project from your computer (path A or C below), leave the options to add a README, .gitignore, or license unticked. An empty repository avoids a conflict on your first push. GitHub Desktop (path B) creates the repository for you, so you can skip this step if you use it.
Public or private? If you are unsure, private is the safer default.
- Public: anyone on the internet can read the repository, including every file and every past commit (see GitHub’s guide: About repositories (opens in a new tab)).
- Private: only you and people you invite can see it.
Either works with Vercel’s free Hobby plan when the repository belongs to your personal account; on Hobby, Vercel cannot deploy a private repository owned by a GitHub organization (see the Vercel Git docs (opens in a new tab)).
Get your code into the repository
Choose the path that matches how comfortable you feel. If you built the site with an AI coding agent, path A is usually the easiest. If you would rather click buttons, use path B.
Path A: let your AI coding agent do it
Many coding agents can run Git commands for you, inside your project folder. That is convenient, but you should still understand what is happening. Ask the agent to explain each command before it runs, and to stop before it pushes, so you can check nothing private is about to go online.
Prompt
Publish my project to GitHub safely
Have your AI coding agent check for secrets, commit your project, and push it to GitHub with your approval at each risky step.
Publish my project to GitHub safely. About me - My GitHub username: [your GitHub username] - Repository name I want: [repository name, for example my-portfolio] - Visibility: [public or private] Do these steps in order 1. Before you run any git command, explain in one plain sentence what it does. 2. Check the .gitignore file. It must exclude: node_modules, build output folders (such as .next, dist, build, out), every environment file (.env, .env.local, .env.*), and operating-system files (.DS_Store, Thumbs.db). Create or update it if needed and show me the change. 3. Scan the project for secrets: API keys, passwords, access tokens, private keys, and personal details such as a phone number or home address. List anything you find with the file name. Do not print full secret values. If you find something, stop and ask me what to do. 4. If this folder is not a git repository yet, initialise one and name the branch main. 5. Make a first commit with a clear message. 6. If I need to create the empty repository on github.com first, tell me exactly what to do. 7. Show me the exact commands you will use to connect to GitHub and push. Wait for my approval before pushing anything. 8. If GitHub asks me to sign in, tell me what to expect. Never ask me to paste a password or token into this chat. 9. After the push, give me the repository URL and a short list of what was uploaded. Rules - Do not delete, move, or rewrite my project files, apart from .gitignore. - Do not force-push. - If a command fails, show me the error and explain it before trying a fix.
Path B: GitHub Desktop
GitHub Desktop is GitHub’s free app for Windows and macOS that does the same job with buttons instead of commands. You add your project folder to the app, make a first commit, then choose Publish repository. The publish dialog has a Keep this code private checkbox; leave it ticked for a private repository. Labels may differ slightly between versions. Adding an existing project to GitHub using GitHub Desktop (opens in a new tab)
Path C: the command line
A terminal is a window where you type commands instead of clicking. Most code editors have one built in (look for a Terminal menu). Open it so that it is pointing at your project folder, the one that contains your site’s files. This path needs Git installed on your computer; if the first command below prints an error instead of a version number, use path A or B instead. Run these one at a time, in order.
Run in: Terminal opened in your project folder
git --versionChecks that Git is installed.
Run in: Terminal opened in your project folder
git initTurns your project folder into a Git repository. You only do this once per project.
Run in: Terminal opened in your project folder
git add .Selects every file in the folder for the next commit, except anything listed in .gitignore. Check that file exists and covers node_modules and .env files before you run this.
Run in: Terminal opened in your project folder
git config --global user.name "Your Name"Tells Git who you are. You only do this once per computer. Replace Your Name with your own name; it is attached to every commit you make and is visible to anyone who can see the repository (everyone, if it is public). Official guide: Setting your username in Git (opens in a new tab).
Run in: Terminal opened in your project folder
git config --global user.email "you@example.com"Sets the email attached to your commits, which is also visible in a public repository. To keep your personal address private, use the private noreply email shown in the email settings of your GitHub account.
Run in: Terminal opened in your project folder
git commit -m "Initial portfolio"Saves the selected files as your first snapshot, with the message “Initial portfolio”.
Run in: Terminal opened in your project folder
git branch -M mainNames your branch “main”, which is what GitHub and Vercel expect by default.
Run in: Terminal opened in your project folder
git remote add origin https://github.com/YOUR-USERNAME/YOUR-REPO.gitTells Git where your GitHub repository lives. Replace YOUR-USERNAME and YOUR-REPO with your own; GitHub shows the full address on the page of your new, empty repository.
Run in: Terminal opened in your project folder
git push -u origin mainUploads your commits to GitHub. The -u part remembers the destination, so next time you can just type git push.
Note
Signing in when you push
The first time you push, you will probably be asked to prove who you are. Depending on your computer, GitHub may open a browser window for you to sign in, or a credential manager may handle it. Follow the official GitHub or operating-system prompt. Never paste your GitHub password or any access token into an AI chat.
If the terminal asks for a username and password instead, your GitHub account password will not work there: GitHub no longer accepts account passwords for Git. Use path B (GitHub Desktop) instead, or create a personal access token (a long, password-like code you generate in your GitHub settings) with permission to write to this repository, and paste it at the password prompt in the terminal, never into an AI chat. Official guide: About remote repositories (opens in a new tab).
Last resort: upload files in the browser
On your repository’s page on GitHub you can choose Add file → Upload files, drag files in, and commit them. Browser uploads are limited to 25 MiB per file and up to 100 files at a time, and you will have to repeat the upload by hand every time you change something. Never upload the node_modules or .next folders (they are generated and huge) or any .env file (it may contain secrets). Official guide: Adding a file to a repository (opens in a new tab).
Update your site later
Once your site is on Vercel (Chapter 5), updating it is a loop: edit your files, commit, push. Vercel notices the push and redeploys automatically. Your AI agent or GitHub Desktop can do the commit and push for you; on the command line it looks like this:
Run in: Terminal opened in your project folder
git statusLists the files you have changed since the last commit. Read it: if you see a file you did not expect, especially a .env file, stop and find out why.
Run in: Terminal opened in your project folder
git add .Selects all changed files for the commit.
Run in: Terminal opened in your project folder
git commit -m "Update projects section"Saves the snapshot. Write a message that says what changed, so your history stays readable.
Run in: Terminal opened in your project folder
git pushSends the new commit to GitHub.
Keep secrets out of your repository
A secret is anything that grants access or that you would not print on a public poster: an API key (a password-like code that lets a program use a paid or private service), passwords, access tokens, and private details such as your phone number or home address. The good news: a typical portfolio needs no secrets at all. If you add a contact form through a third-party service, it may give you a key that is designed to be public; follow that service’s own documentation on where to put it.
Watch out
Anything you commit to a public repository is public
That includes old commits, not just the current files. To stay safe:
- Never commit API keys, passwords, tokens, or
.envfiles. - Keep
.envfiles listed in.gitignore, and store any real secret as an environment variable in Vercel instead (covered in Chapter 5). - If a secret does get pushed, revoke or rotate it first (make the old key useless at the service that issued it), then remove it from the repository. Removing sensitive data from a repository (opens in a new tab)
With your code on GitHub and nothing private in it, you are ready to put it on the internet in Chapter 5.
5 min read
Chapter 5: Deploy your site with Vercel
Import your GitHub repository into Vercel, publish it to a free vercel.app address, and let every future push update the live site automatically.
Vercel is a hosting platform: it reads your code from GitHub, runs the build that turns it into a website, and serves that website at a public address. You do not need to buy anything for this chapter. At the end you will have a live site on a free vercel.app address that you can share today. This site is hosted the same way, from a GitHub repository deployed on Vercel.
What the free Hobby plan covers
Vercel’s free plan is called Hobby. It is meant for personal, non-commercial projects, and a personal portfolio is a typical example (see Vercel Hobby plan (opens in a new tab)). Keep these points in mind:
- Non-commercial means non-commercial. Vercel’s fair use guidelines count things like taking payments, being paid to build or host the site, running ads, or affiliate-focused sites as commercial use, which needs a paid plan. Fair use guidelines (opens in a new tab)
- There are usage limits. A small personal portfolio is unlikely to reach them, but if you hit a Hobby limit you usually have to wait for it to reset or upgrade.
- Plans change. Limits and terms can change over time, so check the plan page before relying on any specific number.
Check your project is ready
Before you deploy, two things should be true: your code is on GitHub (Chapter 4), and the site works when you preview it on your computer. Most failed first deployments come from small problems that also exist locally, such as a misspelled file name or a missing package. Ask your AI tool to look for them first.
Prompt
Check my project is ready for Vercel
Get a prioritised list of deployment problems and the right build settings, without your AI tool changing anything yet.
Check whether my project is ready to deploy on Vercel. Act as a careful deployment reviewer. Inspect this project and report what is missing. Do not change any files yet. Check these things 1. Framework and build: which framework this is, the build command, and the output directory Vercel should use. If it is plain HTML, CSS, and JavaScript with no build step, say so. 2. package.json (if there is one): the scripts (dev, build, start) and any dependency that is missing. 3. Node.js version: whether the project needs a specific version, and where that is declared. 4. File names: imports, image paths, or links whose upper/lower case does not match the real file name. These can work on my computer but fail on Vercel. 5. Broken links and missing files: images, fonts, my resume PDF, internal pages. 6. .gitignore: it should exclude node_modules, build output, and every .env file. 7. Environment variables: every one the code reads, whether each is really needed, and whether any secret is written directly in the code. 8. Hard-coded localhost addresses or other development-only URLs. 9. Basics: page titles, meta description, favicon, and social preview image. 10. If you can, run the production build locally and tell me the actual result. How to report - A numbered list of findings, each marked High (blocks deployment), Medium (something visibly broken), or Low (polish). - For each finding: the file, what is wrong, and the fix you recommend. - The exact settings I should choose in Vercel: Framework Preset, Root Directory, build command, output directory. Rules - Make no destructive changes: do not delete files, remove content, or rewrite git history. - Ask me before editing anything, and show me the planned change first.
Deploy in nine steps
Vercel’s dashboard changes from time to time, so the labels below are accurate at the time of writing but may differ slightly on your screen. The official guide for this flow is Deploying Git repositories with Vercel (opens in a new tab).
Create a Vercel account
Go to vercel.com and sign up for the Hobby plan. Signing up with your GitHub account is the easiest option, because it links the two services from the start.
Connect GitHub and grant access to your repository
Vercel reads your code through its GitHub app, and GitHub asks you which repositories it may access: all of them, or only the ones you select. Choosing only your portfolio repository is fine.
If your repository does not show up later, change this on GitHub: Settings → Applications → Installed GitHub Apps, then Configure next to Vercel, and add the repository under Repository access. Reviewing and modifying installed GitHub Apps (opens in a new tab)
Import your repository
On your Vercel dashboard, choose Add New… → Project (it may appear as New Project). Find your portfolio repository in the list and select Import.
Check the framework preset and build settings
Vercel usually detects your framework, such as Next.js or Vite, and fills in the build settings for you. In most cases you can leave them alone. Configuring a build (opens in a new tab)
- Plain HTML site (just
.html,.css, and.jsfiles): choose Other as the Framework Preset and leave the build command empty. - Site inside a subfolder of the repository: set Root Directory to that folder.
- Unsure? Use the settings your readiness prompt recommended.
- Plain HTML site (just
Add environment variables, only if you need them
An environment variable is a named setting, such as a key for a contact-form service, that is stored in Vercel instead of in your code. Most portfolios need none, so skip this unless your AI tool or a service’s documentation told you to add one. Environment variables (opens in a new tab)
Deploy
Select Deploy. Vercel copies your code, runs the build, and shows its progress. A small portfolio usually finishes quickly, but there is no fixed time.
Open and test your live URL
When the build succeeds, your project’s dashboard shows its address, something like
your-project.vercel.app. Open it and test it as a stranger would:- Visit every page and click every link in the navigation.
- Open your resume link and your email, LinkedIn, and GitHub links.
- Check the site on your phone, not only on your laptop.
- Look for missing images, which often point to a file-name problem.
Let future pushes deploy automatically
From now on you do not need to touch Vercel to update the site. Every push to your
mainbranch creates a new production deployment, which is what visitors see. Pushes to any other branch create preview deployments with their own URLs, so you can check a change before it goes live. Vercel for GitHub (opens in a new tab)If a deployment fails, read the build log
Open your project in Vercel, go to Deployments, select the failed deployment, and expand the Building logs. Scroll to the first error message (often shown in red); later errors are frequently side effects of the first one. Troubleshooting a build (opens in a new tab)
Then run the build on your computer, or ask your AI tool to, so you can fix it before pushing again. Paste the error into the debugging prompt in Chapter 9 rather than asking your tool to “fix the deploy”. Vercel logs (opens in a new tab)
Watch out
Your Vercel URLs are public
Every deployment URL Vercel generates, including preview URLs, can be opened by anyone who has the link (see Generated URLs (opens in a new tab)). Do not deploy anything you would not want a stranger to read, and never put secrets in your code: use environment variables for anything sensitive.
Your portfolio is now live. The vercel.app address keeps working without you buying anything. If you would like an address of your own, such as yourname.com, Chapter 6 helps you decide whether it is worth it.
4 min read
Chapter 6: Free subdomain or custom domain?
Understand hosting, registrars, DNS, and subdomains, then decide whether the free Vercel address is enough or a custom domain is worth its yearly cost.
At the end of Chapter 5 your portfolio already has a public web address. You do not need to buy anything to finish this guide.
Five terms worth knowing
A quick picture first: your domain is the address people type, DNS is the directory that says which building that address belongs to, and your hosting is the building where the site actually lives. Three different jobs, often done by three different companies.
- Hosting provider
The company whose computers store your site and send it to visitors. In this guide that is Vercel. It builds your project from GitHub and serves the result.
- Domain registrar
The company you buy and renew a domain name from, such as Name.com, Namecheap, Hostinger, or GoDaddy. Buying a domain gives you the right to use the name; it does not put a website on it.
- DNS hosting
The service that answers the question “where does this name point?” whenever someone visits your domain. By default it is usually your registrar, but it can be a separate company such as Cloudflare, or Vercel itself. Whoever does this job is where you make DNS changes.
- Domain name
The main name you own, such as
example.com. It is also called the root or apex domain.- Subdomain
A name added in front of a domain, such as
www.example.comorportfolio.example.com. Your free Vercel address, something likeyour-project.vercel.app, is also a subdomain: one that belongs to Vercel’s domain rather than yours.
Option A: keep the free Vercel address
When Vercel deploys your project, it gives the site an address that looks something like your-project.vercel.app. You can find the exact one on your project’s dashboard. It costs nothing extra, works over HTTPS (the padlock in the address bar: an encrypted connection) straight away, and you can share it the moment your first deployment finishes.
The first part of the address comes from your project name. If you would like a cleaner address, you can rename the project in Vercel’s project settings. New deployments then use the new name — push a change or redeploy, then check the address on your dashboard. Old vercel.app links may stop working after a rename, so do this before you share the address. Official guide: Vercel: Changing your project name (opens in a new tab).
The trade-offs:
- Vercel’s brand is in your URL. For a student or early-career portfolio this is common and perfectly acceptable, but it reads less like a personal brand.
- The address is tied to Vercel. If you later move your site to another host, this URL stops pointing to it, and any links you shared on your resume or LinkedIn break.
Option B: use a custom domain
A custom domain is a name you buy yourself, such as yourname.com. This site uses one: it is hosted on Vercel, but visitors only ever see my own domain.
What it gives you:
- Professional branding. A short address with your name is easy to remember and looks deliberate on a resume.
- Portability. The domain belongs to you, not your host. If you ever switch hosting providers, you update your DNS records and every link you have shared keeps working.
- Email options. You can later set up an address at your own domain through an email provider, which is usually a separate service with its own setup.
What it costs you:
- Money, every year. A domain is a separate purchase that you renew yearly. Prices vary by registrar and by ending (
.com,.me,.dev, and so on), and the renewal price is often higher than the first-year price. Check the renewal price, not just the first-year offer. - A little setup. You need to add DNS records at whichever company hosts your DNS, which may not be the company you bought the domain from. Chapter 7 walks you through it.
Note
Two things people often get wrong
- Buying a domain does not deploy anything. A newly bought domain often shows the registrar’s parking page until you point it at Vercel.
- Connecting a domain does not require rebuilding your site. Your code, your GitHub repository, and your Vercel project stay exactly as they are. You only add the domain in Vercel and create a few DNS records.
Side by side
| Question | Free Vercel address | Custom domain |
|---|---|---|
| Extra cost | None | Yearly purchase and renewal; prices vary |
| Time to go live | As soon as your deployment finishes | After DNS records are added and verified |
| What visitors see | your-project.vercel.app | yourname.com |
| HTTPS | Included | Included; Vercel issues a certificate once DNS is verified |
| If you change hosts | The address changes and old links break | Update DNS records; links keep working |
| Setup skills | None beyond Chapter 5 | Copying a few DNS records (Chapters 7 and 8) |
Tip
A custom domain is optional
Your portfolio is fully public and shareable on the free address. If you are not sure, launch on the vercel.app address now and add a custom domain later; you can add one to an existing Vercel project whenever you are ready. If you are skipping the domain for now, jump to Chapter 9 or straight to the launch checklist.
10 min read
Chapter 7: Connect a custom domain to Vercel
Add your domain in Vercel, copy the exact DNS records it shows you, verify the connection, and wait for HTTPS before you share the new address.
This is the most technical chapter in the guide, but you will not write any code. You will copy a few values from Vercel into a form at your domain company, then wait for the two to recognise each other. Take it slowly, read each step before you click, and keep both browser tabs open side by side. Official guide: Vercel: Set up a custom domain (opens in a new tab).
If you decided in Chapter 6 to stay on the free vercel.app address, you can skip this chapter and Chapter 8 entirely.
Before you start
Check these three things first. Each one prevents a common dead end.
- Your site is already live on its
vercel.appaddress. Open it and make sure it works. A custom domain only gives a working site a new name; it cannot fix a broken deployment. - You can log in to the account where your DNS is managed. That is usually where you bought the domain, but not always. If a friend, an agency, or a former employer set the domain up, get access before you begin.
- You know who manages your DNS. Look up your domain’s nameservers (defined below). Your registrar’s dashboard usually lists them on the domain’s overview page. You can also enter your domain in the Google Admin Toolbox Dig tool (opens in a new tab) and choose the
NSrecord type. The nameserver names usually contain the name of the company that answers for your domain, and that company’s dashboard is where you will make every change in this chapter.
DNS in plain terms
DNS (the Domain Name System) is the internet’s directory. Each entry in it is a DNS record: a short line that says “for this name, here is the answer”. You only need to recognise five kinds.
- A record
Points a name to an IP address (a number that identifies a server). Vercel asks for an A record on your root domain, such as
example.com.- CNAME record
Points a name to another name instead of a number. Vercel uses a CNAME for subdomains such as
www.example.com. The other name then decides where traffic goes, so Vercel can change its servers without you editing anything.- Nameservers
Decide which company answers DNS questions for your whole domain. Changing nameservers moves every record at once, including the ones that run your email. This chapter does not ask you to change them (see the nameserver warning).
- TXT record
Holds a piece of text. Services use TXT records to check that you own a domain, and email services use them to prove your messages are genuine. Vercel only asks for one in specific cases, explained below.
- TTL
Short for “time to live”: how long, usually in seconds, other computers may remember an answer before asking again. It is one reason changes take time to show up everywhere. The provider’s default is fine.
What to type in the Host or Name box
Every DNS record has a field for which name it applies to. Vercel calls it Name; your provider may call it Host, Name, or something similar. This field causes more mistakes than any other, so check it against this table.
| You want to connect | Usually enter | Watch for |
|---|---|---|
The root domain, example.com | @ | Some providers want the box left blank instead (Name.com does this). A few ask for the full domain; their help page will say so. |
www.example.com | www | Type only www. The provider adds the rest of the domain for you. |
Another subdomain, such as portfolio.example.com | The label only, such as portfolio | Same rule: just the part before your domain. |
Many providers add your domain to whatever you type. If you enter www.example.com in the Host box, you may accidentally create www.example.com.example.com. Only type the full domain if your provider’s instructions ask for it.
Watch out
Back up your DNS records before you change anything
Take a screenshot of your current records, or use your provider’s export option if it has one. Do not delete records you do not recognise. MX and TXT records often run your email (Google Workspace, Microsoft 365, Zoho, and others) and prove domain ownership to other services. Only change the records for the root domain (@) and www that conflict with what Vercel asks for.
Connect your domain, step by step
Dashboards change, so labels may differ slightly from what you see. The paths below were checked against Vercel’s documentation at the time of writing.
Make sure the site is deployed and working
Open your project’s
vercel.appaddress in a browser and click through a few pages. If anything is broken, fix it first with the help of Chapter 5.Open your project in Vercel
Log in to Vercel and click the project that holds your portfolio.
Go to Settings, then Domains
In the project, open Settings and choose Domains in the sidebar. This page lists every address your project answers to, including the
vercel.appone. Vercel: Adding a domain (opens in a new tab)Add your domain
Click Add Domain and type your root domain, for example
example.com, withouthttps://or a trailing slash.Vercel will usually offer to add
www.example.comas well, and may ask which one should redirect to the other. Vercel recommends usingwwwas the main address with the root domain redirecting to it; using the root domain as the main address also works. Either choice is fine for a portfolio, and you can change it later in step 11. Vercel: Deploying and redirecting (opens in a new tab)Read the exact DNS records Vercel shows you
Each domain now has its own card on the Domains page, which this guide calls the domain card. Until DNS is set up, the card shows Invalid Configuration. That is expected at this point. Expand the domain to see the records Vercel wants: typically an A record for the root domain and a CNAME for
www, each with a Type, a Name, and a Value.Copy the values exactly as your dashboard shows them. They are specific to your project. For example, you might see an A record whose value is an IP address and a CNAME whose value ends in a
vercel-dnsdomain. Older tutorials list one universal value for everyone; it may not match yours, so do not copy values from a blog post or from this page. (See Vercel’s guide: A records and CAA (opens in a new tab).)If Vercel also offers a nameservers method, use the records instead (see the nameserver warning).
Open the DNS settings where your DNS is managed
In a second tab, log in to the company you identified in Before you start and open the DNS page for your domain. Chapter 8 shows where this lives at Name.com, Namecheap, Hostinger, Cloudflare, and GoDaddy.
Create or update the records, then save
For each record Vercel listed:
- Choose the same Type (A or CNAME).
- Enter the Host / Name using the table above.
- Paste the Value exactly, with no extra spaces.
- Leave TTL at the provider’s default.
If any A, AAAA, or CNAME record already exists for that name, edit or delete it so only Vercel’s record remains. Conflicting records for the same name can send some visitors to the wrong place and stop Vercel from verifying. Then save; some providers need a separate confirm or “save all” click. Vercel: Managing DNS records (opens in a new tab)
Return to Vercel and check the status
Go back to Settings → Domains and refresh the page. When Vercel can see your new records, the status changes from Invalid Configuration to a valid state. If it does not change right away, that is normal; move to the next step.
Wait for DNS to update and HTTPS to be issued
DNS answers are cached around the world, so changes take time to spread. This is called propagation. Changes to individual records often show up within minutes to a few hours, though some providers say to allow up to 24 hours. Nameserver changes can take up to 24–48 hours.
Once your records verify, Vercel issues an SSL certificate automatically. That is what makes the padlock and
https://work. This often takes a few minutes but can take longer. While you wait, avoid repeatedly editing the records: each new change needs time to spread again.Test every version of the address
Open each of these in a browser and confirm they all reach your portfolio over HTTPS:
http://example.comandhttps://example.comhttp://www.example.comandhttps://www.example.com
Also try a private browsing window and your phone on mobile data instead of Wi-Fi. Your home network may still remember an old answer for a while, so a second network gives you a fairer test. You can check what the wider internet sees with the Google Admin Toolbox Dig tool (opens in a new tab).
Choose your main address and redirects
Decide which address is the “real” one, so search engines and visitors always land on the same version. In Settings → Domains, click Edit on the domain you want to redirect and pick the main address in the Redirect to dropdown. Then use that main address on your resume, LinkedIn, and anywhere else you share your portfolio. Vercel: Redirecting domains (opens in a new tab)
Watch out
Do not change nameservers unless you mean to move all of your DNS
Switching nameservers to Vercel (or anyone else) hands over your entire DNS zone. Any record that is not recreated at the new provider stops working, which often means email silently stops arriving. If you do choose that route, first copy every existing record, especially MX and TXT records, into the new provider, and expect the switch to take up to 24–48 hours. For a portfolio, adding the A and CNAME records above is usually all you need.
If the domain will not verify
Invalid Configuration on the domain card means one of three things: Vercel cannot see the DNS records it expects yet, it needs a TXT record to confirm you own the domain, or it could not issue the HTTPS certificate. Give a fresh change some time first, then work through this table. Vercel: Troubleshooting domains (opens in a new tab)
| Symptom | Likely cause | Safe next step |
|---|---|---|
| Still Invalid Configuration after a few hours | A typo in the value, the wrong record type (for example a CNAME where Vercel asked for an A record), or the records were added at a company that does not manage your DNS. | Compare each record character by character with Vercel’s domain card. Check your nameservers again to confirm you edited DNS in the right place. |
The record exists, but as | You typed the full domain in the Host box and the provider added the domain again. | Edit the record so the Host is just |
| Records look right but the old page or a parking page still appears | Conflicting records on the same name: an old A or CNAME record, a URL redirect or forwarding rule, or a registrar parking record. | Remove or edit only the conflicting records for |
| Works for some people but not others | An AAAA record (an IPv6 address record) on the same name still points somewhere else. Vercel does not support IPv6 yet, so it conflicts. | Remove AAAA records on the root domain and www that point to your old host. |
| Vercel says the domain is already in use | The domain was added to a different Vercel project, or to another Vercel account or team. | If it is your own project, remove the domain there first. If it is someone else’s account, add the TXT record Vercel shows you to prove ownership. That verifies your use of the domain; it does not move the domain into your account. |
| DNS is valid but HTTPS never works | A CAA record (which lists the companies allowed to issue certificates for your domain) does not include the one Vercel uses. | If you have CAA records, add one that allows |
Still stuck? Chapter 9 covers more symptoms, including a site that works on one address but not the other.
8 min read
Chapter 8: DNS steps for your domain provider
Find the DNS settings at Name.com, Namecheap, Hostinger, or another provider, and enter the records Vercel gives you in the right fields without breaking email or other services.
Keep your Vercel domain card from Chapter 7 open in another tab so you can copy the exact values from it.
Note
Edit DNS where your nameservers point
Make your changes at the company that hosts your active DNS zone, which is whichever company your nameservers point to. That may not be where you bought the domain. If you registered at Namecheap but your nameservers point to Cloudflare, records you add at Namecheap are ignored. Chapter 7 explains how to check your nameservers.
The navigation paths below come from each provider’s own help articles at the time of writing. Providers redesign their dashboards from time to time, so if a label on your screen differs, follow the linked help article. There are no screenshots here on purpose: a screenshot of an old layout is more confusing than a short written path.
Matching Vercel’s fields to your provider
Vercel describes each record with a Type, a Name, and a Value. Providers use different words for the same three boxes.
| Provider | Type field | Name field | Value field | Root domain goes in as |
|---|---|---|---|---|
| Vercel (what you copy) | Type | Name | Value | @ |
| Name.com | Type | Host | Answer | Leave Host blank |
| Namecheap | Type | Host | Value | @ |
| Hostinger | Type | Name | Points to | @ |
| Cloudflare | Type | Name | Content (the form may say IPv4 address or Target) | @ |
| GoDaddy | Type | Name | Value | @ |
For www, every provider above takes just www in the name field. If your screen uses different words, match the boxes by role: record type, then the name it applies to, then where it points.
Name.com
These steps only take effect if your domain uses Name.com’s nameservers, which is the default for domains registered there. Name.com: Using default nameservers (opens in a new tab)
Open your DNS records
Log in, click MY DOMAINS at the top right, click your domain, then choose Manage DNS Records. Existing records are listed on this page, and you can edit or delete them from the same list.
Remove URL forwarding on the root domain, if there is any
URL forwarding creates its own A records, which clash with the one Vercel needs. Check Domain Actions → URL Forwarding; if your root domain forwards somewhere, remove that forward before adding Vercel’s record. Not every domain has forwarding set up, so check rather than assume. Name.com: URL forwarding (opens in a new tab)
Add the A record for the root domain
Set Type to
A, leave Host blank (Name.com does not use@), paste Vercel’s value into Answer, keep the default TTL, and click Add Record. If an older A record with a blank Host points somewhere else, edit or delete that one so only Vercel’s remains. Name.com: Adding an A record (opens in a new tab)Add the CNAME record for www
Set Type to
CNAME, Host towww, and paste Vercel’s target into Answer, then click Add Record. Never leave Host blank on a CNAME: Name.com warns that it can overwrite other records, including the MX records your email depends on. Name.com: Adding a CNAME record (opens in a new tab)Return to Vercel and verify
Refresh Settings → Domains in Vercel. Name.com’s articles say a change should take effect within 24 hours.
Namecheap
Namecheap only lets you edit host records when the domain uses one of its own DNS services, such as Namecheap BasicDNS. Check under Domain List → Manage → Nameservers. If it says Custom DNS, edit your records at the provider those nameservers belong to instead. Namecheap: Why can’t I modify host records? (opens in a new tab)
Open Advanced DNS
Sign in, open Domain List, click Manage next to your domain, then open the Advanced DNS tab. Your records are in the Host Records section, where existing records are listed. To change one, edit the existing row (change its Host or Value in place) and save it with the green check mark. Namecheap: Setting up host records (opens in a new tab)
Remove the parking records
New Namecheap domains usually come with two default records that point to a parking page: a URL Redirect Record on
@, and a CNAME onwwwpointing toparkingpage.namecheap.com. Namecheap says to remove these when you add your own. Also remove any other redirect, A, or CNAME records on@orwww. Leave email records alone. Namecheap: Connecting a domain to hosting (opens in a new tab)Add the A record for the root domain
Click Add New Record, choose A Record, set Host to
@, paste Vercel’s value into Value, leave TTL on Automatic, and click the green check mark to save it. If an A record on@is already there, edit that row instead of adding a second one. Namecheap: Setting up an A record (opens in a new tab)Add the CNAME record for www
Click Add New Record again, choose CNAME Record, set Host to
www(Namecheap adds your domain automatically), paste Vercel’s target into Value, and save with the green check mark. If you see a Save All Changes button, click it too. Namecheap: Creating a CNAME record (opens in a new tab)Return to Vercel and verify
Namecheap says new records usually take about 30 minutes to work, while nameserver changes can take up to 24–48 hours. Refresh Settings → Domains in Vercel after that.
Hostinger
Changes in Hostinger’s DNS editor only take effect if your domain uses Hostinger’s nameservers. If it points somewhere else, manage DNS at that provider. Hostinger: Pointing a domain to Hostinger (opens in a new tab)
Open the DNS records for your domain
In hPanel, Hostinger’s dashboard, choose Domains in the left sidebar, select your domain, and open DNS / Nameservers, which has a DNS records tab. If you also have a Hostinger hosting plan, you may reach the same records through Websites → your site → Advanced → DNS Zone Editor. Hostinger’s own articles word these paths slightly differently. Hostinger: Managing DNS records (opens in a new tab) Hostinger: Using the DNS Zone Editor (opens in a new tab)
Deal with the default records
A default Hostinger zone includes an A record for
@, plus MX and TXT records for email. Delete or replace the@A record and any AAAA records on@that point elsewhere. Keep the MX and TXT records.Add the A record for the root domain
Set Type to
A, Name to@, paste Vercel’s value into Points to, keep the default TTL, and click Add Record. Hostinger: Managing A records (opens in a new tab)Add or update the CNAME record for www
Set Type to
CNAME, Name towww(the subdomain only), and paste Vercel’s target into the target or Points to field, then click Add Record. If any A, AAAA, or CNAME record already exists for that name, edit or delete it so only Vercel’s record remains. Hostinger: Managing CNAME records (opens in a new tab)Return to Vercel and verify
Hostinger asks you to allow up to 24 hours for changes to spread. Refresh Settings → Domains in Vercel to check.
Watch out
Hostinger CDN and the reset button
If Hostinger’s CDN (a speed feature that serves your site through Hostinger’s own network) is turned on for the domain, changing the www CNAME may not work as expected; turn the CDN off first. Also avoid the Reset DNS Records button unless you mean it: it restores Hostinger’s defaults, which undoes the records you just added for Vercel.
Other registrars and DNS providers
Cloudflare
Many people keep their domain at one registrar and use Cloudflare for DNS. In the Cloudflare dashboard, select your domain, go to DNS → Records, click Add record, choose the type, fill in the fields (use @ for the root), and save. Cloudflare: Create DNS records (opens in a new tab)
Cloudflare also has a proxy status on each record: Proxied (orange cloud) sends traffic through Cloudflare first, while DNS only (grey cloud) points visitors straight at Vercel. Vercel recommends connecting directly, so set the records you add for Vercel to DNS only. If you choose to proxy anyway, set Cloudflare’s SSL mode to Full (strict); the Flexible mode can cause redirect loops. Cloudflare: Proxy status (opens in a new tab) Vercel: Using a proxy in front of Vercel (opens in a new tab)
GoDaddy
Open your Domain Portfolio, select the domain to reach its settings, and open DNS. If there is already an A record on @ (sometimes shown as “Parked”) or a CNAME on www, edit it with Vercel’s values instead of adding a second one; otherwise click Add New Record. Fill in Type, Name (@ for the root), Value, and TTL, then save. This only works while the domain uses GoDaddy’s nameservers. GoDaddy says most changes take effect within an hour but can take up to 48 hours. GoDaddy: Manage DNS records (opens in a new tab) GoDaddy: Add an A record (opens in a new tab) GoDaddy: Add a CNAME record (opens in a new tab)
Any other provider
The same workflow applies almost everywhere, whatever the buttons are called:
- Look up your nameservers to confirm which company hosts your DNS, and log in there.
- Find the page called something like DNS, DNS records, Zone editor, or Manage DNS for your domain.
- Screenshot or export the existing records before you touch anything.
- Edit the records for the root domain and
wwwto match Vercel’s Type, Name, and Value. Remove only the A, AAAA, CNAME, forwarding, or parking records on those two names that conflict. - Save, including any separate confirm step.
- Return to Vercel’s Settings → Domains and refresh until the domain verifies.
To see what the internet currently returns for your domain, enter it in the Google Admin Toolbox Dig tool (opens in a new tab) and choose A or CNAME. When the answer matches what Vercel asked for, verification usually follows. If your provider’s help center does not explain where its DNS settings are, search it for “add A record” or “add CNAME record”.
6 min read
Chapter 9: Troubleshoot common problems
Match a symptom to its likely cause and a safe next step, from failed builds and 404 pages to DNS conflicts, and use a debugging prompt that fixes the smallest thing first.
Something will go wrong at some point. That is normal, and it is rarely a disaster if your work is committed to GitHub. The most common mistake is not the original problem but the reaction to it: asking an AI tool to “fix it” over and over until five unrelated things have changed and nobody knows which one mattered.
Diagnose before you change anything
- Read the evidence. For a failed deployment, open the build log in Vercel (Chapter 5, step 9). For a page that looks or behaves wrong, open your browser’s developer tools and check the console, the panel where the browser lists errors.
- Check the real configuration. Look at what is actually set in Vercel and at your DNS provider, not what you remember setting.
- Change one thing at a time. Then test again. If the change did not help, undo it before trying the next idea.
- Keep a commit you can return to. Commit every version that works, so there is always a safe point to roll back to.
Symptoms, causes, and next steps
Find the row that matches what you see. The likely causes are listed most common first; the next step is the least risky thing to try.
| Symptom | Likely cause | Safe next step |
|---|---|---|
| The AI-built site looks generic | The prompt was vague, the tool had no real content to work with, or the feedback was “make it better”. | Give it your real content and two or three sites you like, with what you like about each. Ask for one specific change at a time, such as “increase the spacing between project cards”. The refinement prompts in Chapter 3 help. |
| The site broke after an AI edit | The edit changed more than you asked, removed something another part of the site depended on, or introduced an error. | Stop asking for more fixes. Roll back to your last working commit (see below), then re-apply the change with the debugging prompt and a narrower request. |
| The layout is poor on mobile | Fixed widths, large images or tables wider than the screen, or text sized only for desktop. Often it was simply never tested at phone width. | Open the site on your phone, or use your browser’s device toolbar, and note exactly which section breaks and how. Give that description to your AI tool with the mobile prompt from Chapter 3. |
| Vercel cannot see or access your GitHub repository |
| On GitHub, go to Settings → Applications → Installed GitHub Apps → Configure (Vercel) and add the repository under Repository access (see GitHub’s guide (opens in a new tab)). For an organization repo, move it to your personal account or check Vercel’s Git docs (opens in a new tab). |
| The build or deployment fails | A code error, a missing package, a file name whose upper/lower case differs from the import (fine on your computer, broken on Vercel’s build machines), or wrong build settings or Root Directory. | Open Deployments → the failed deployment → Building logs and copy the first error. Run the build locally, then use the debugging prompt below. Official guide: Troubleshooting a build (opens in a new tab). |
| An environment variable is missing or empty | It exists in your local | Add it in your Vercel project’s environment variable settings with exactly the same name, then redeploy (for example by pushing a new commit). Never fix this by pasting the secret into your code. Official guide: Environment variables (opens in a new tab). |
| A page shows “404 Not Found” |
| Compare the address in the browser with the actual file or route name, letter by letter. If every page 404s, check the build settings in Vercel against your readiness prompt’s recommendation. |
| Domain verification fails in Vercel | A mistyped value, records added at a company that does not manage your DNS, or a change that has not propagated yet. | Compare each record with Vercel’s domain card, then work through the custom domain troubleshooting table in Chapter 7. |
| DNS records conflict | Older A, AAAA, or CNAME records on the same name, such as a parking page, URL forwarding, or a previous host. | Remove or edit only the conflicting records for |
| The site works on example.com but not www.example.com (or the reverse) | Only one version was added to the project in Vercel, the DNS record for the other is missing, or no redirect was set between them. | Add both versions in Vercel’s Settings → Domains, create the record Vercel shows for each, and set one to redirect to the other, as in Chapter 7. Official guide: Redirecting domains (opens in a new tab). |
| HTTPS is not active yet (security warning) | DNS has not verified yet, a CAA record blocks Vercel’s certificate provider, or a proxy such as Cloudflare’s orange-cloud mode is in the way. | Confirm the domain is verified in Vercel and give it time. For CAA and proxy fixes, see the Chapter 7 table and the Cloudflare notes in Chapter 8. |
| Your changes do not appear on the live site |
| Check GitHub for your latest commit on |
Roll back to a working version
If the site worked before a change and does not now, going back is often faster than fixing forward. The safe way is a revert: a new commit that undoes an earlier one, without deleting any history.
- With your AI tool: ask it to show you the recent commits, explain which one introduced the problem, and revert that commit with
git revert. Tell it not to use commands that delete history. - With GitHub Desktop: find the commit in the app’s history and choose the option to revert it (labels may differ by version), then push.
- On the command line: the two commands below undo your most recent commit.
Run in: Terminal opened in your project folder
git revert --no-edit HEADCreates a new commit that reverses the most recent one. HEAD means “the latest commit”, and --no-edit keeps the default message instead of opening an editor.
Run in: Terminal opened in your project folder
git pushSends the revert to GitHub. Vercel then builds and deploys the restored version.
Vercel also keeps a list of your past deployments under Deployments, so you can see which commit was the last one that worked before you choose what to revert.
Watch out
Avoid commands that rewrite history
If an AI tool suggests git reset --hard or a force push (git push --force), ask it to explain why first. These can permanently discard work. A revert is almost always the safer choice for a personal site.
Debugging prompt
Use this whenever something is broken and you are about to ask your AI tool for help. Fill in every line you can; the exact error text and what changed recently matter most.
Prompt
Diagnose and fix one problem safely
Make your AI tool explain the cause with evidence and propose the smallest fix before it edits anything.
Help me fix a problem with my portfolio site. Diagnose before you change anything. The problem - What I see: [describe the symptom] - What I expected: [what should happen instead] - Steps to reproduce: [what I open or click, on which device and browser] - Where it happens: [local preview, Vercel preview URL, live vercel.app URL, or custom domain] - Exact error text: [paste the error message, the relevant part of the Vercel build log, or the browser console message] - What changed recently: [the last edit, AI prompt, setting, or DNS change before it broke] How to work 1. Read the relevant files, logs, and configuration first. Do not edit anything yet. 2. Explain the most likely cause in plain language, with the evidence: the file, line, or log message that points to it. If you are not sure, list the other possible causes too. 3. Propose the smallest safe fix. Say what it changes and what else it could affect. 4. Wait for my OK before editing. 5. Preserve existing functionality, content, and design. Do not refactor, rename, upgrade, or "clean up" anything unrelated. 6. After the fix, show me the diff. 7. Verify it: run the build (and tests, if the project has any) and report the actual result. Then tell me exactly what to check in the browser, at desktop and phone width. 8. If you do not have enough information, ask me for it (for example the full Vercel build log) instead of guessing.
3 min read
Chapter 10: Final launch checklist
Check your content, design, accessibility, links, and domain one last time, then share a portfolio you can stand behind.
Before you add the link to your resume or post it on LinkedIn, go through this list once on the live site. Tick each item as you confirm it. Nothing is saved, so if you reload the page the list starts fresh, which is handy when you run through it again after a big update.
If an item fails, fix it with your AI coding tool (the prompts in Chapter 3 help), push the change, and check again on the deployed site. Chapter 9 covers the most common problems.
0 of 16 checked
What you have accomplished
If you followed this guide from the start, you now have:
- A portfolio built from your real experience and projects, with an AI coding tool doing the coding.
- Your code stored on GitHub, with a history of every change you have made.
- A live site on Vercel that updates automatically each time you push a change.
- Optionally, your own custom domain with HTTPS.
- A repeatable workflow: describe a change, review it, push it, and check the live site.
That last point matters most. The portfolio is never really finished, and you now know how to keep improving it without starting over.
Keep it alive
- Update it after each project. Add the case study while the details, decisions, and outcomes are still fresh.
- Review your links every few months. Once a quarter, click through your contact, resume, and project links to catch anything that has moved or expired.
- Renew your domain if you bought one. Turn on auto-renew at your registrar, or set a reminder before the renewal date. An expired domain takes your portfolio offline.
See a finished example
My own portfolio at adityagangwani.me is a finished example of this workflow. You do not need to visit it to follow the guide, but if you would like to see where the steps can lead, have a look around.