Build a Portfolio Website with AI as a Non-Developer
A complete beginner's guide to creating a professional portfolio website by chatting with Claude AI, even with zero coding experience, and deploying it for free using GitHub Pages or Vercel. Job seekers, freelancers, and designers can all follow along.
Problem
Required Tools
An AI you use in your web browser, just like chatting. Say "build me a portfolio site" and it generates HTML/CSS code and lets you check the result with Artifacts (preview). The free plan is sufficient.
A service from GitHub that also hosts websites for free from your code repository. A URL like "yourusername.github.io" is automatically created.
An alternative to GitHub Pages with faster speeds and convenient custom domain connection. Also a free hosting service.
A tool for saving the code Claude creates. Windows Notepad is sufficient, and installing VS Code (free) makes it more convenient.
Solution Steps
Step 1: Prepare Your Portfolio Content
Before asking Claude for code, first organize the content that will go into your portfolio. Jot down the following in a notepad or Notion. 10-15 minutes is enough. [4 things to organize (required)] 1. Basic info: Name, title/role, one-line bio 2. Projects/Work: 3-6 featured works (title, one-line description, technologies used) 3. Skills/Competencies: List of your skills and abilities 4. Contact info: Email, LinkedIn, GitHub, etc. [Optional sections (nice to have)] - Detailed About Me - Career/education timeline - Blog/writing collection links - Testimonials/reviews [You can also ask Claude for planning help] If you are not sure what to include, ask Claude "I am a ~, what content should I put in my portfolio?" You will know it worked when: -> Your name, title, bio, 3+ projects, skills, and contact info are organized in notes If you do not have project images yet: -> Do not worry. Ask Claude to "use placeholder images." -> You can replace them with real images later.
# === Portfolio planning notes example ===
# (Replace the content below with your own and organize in a notepad)
# Basic Info
# Name: Jisoo Kim
# Title: UI/UX Designer
# One-line bio: I create user-centered, intuitive designs
# Detailed bio: I have 3 years of experience designing UI/UX for various apps
# and web services. I handle everything from user research to prototyping.
# Project List
# 1. Mobile Banking App Redesign
# - Description: Redesigned the complex UI of an existing banking app based on user testing
# - Technologies: Figma, User Research, Prototype
#
# 2. Travel Platform Web Design
# - Description: A single platform for booking trips and managing itineraries
# - Technologies: Responsive Design, Figma, Adobe XD
#
# 3. Brand Identity Design
# - Description: Designed logo, color system, and brand guidelines for a startup
# - Technologies: Illustrator, Photoshop, Branding
# Skills
# Figma, Sketch, Adobe XD, Photoshop, Illustrator
# Contact
# Email: jisoo@email.com
# LinkedIn: linkedin.com/in/jisoo
# Behance: behance.net/jisooStep 2: Ask Claude to Generate Portfolio Code
Send your prepared content to Claude to generate the portfolio code. [Key point: Request "a single index.html file"] Like a landing page, making the portfolio as a single page is the simplest approach. Ask "Put CSS and JavaScript all inside the HTML as one index.html file." Then you just save one file and can open it directly in your browser. [What to include in your prompt] - Your name, title, and bio - Project list and descriptions - Desired design style (minimal, modern, colorful, etc.) - Whether to include dark mode - "Responsive design" (works on both mobile and desktop) Copy and paste the prompt below into claude.ai. Just replace it with your own information. You will know it worked when: -> Claude generates a long HTML code -> The portfolio appears in the Artifacts (preview) If the result is not to your liking: -> In the same conversation, continue with modification requests like "change the colors to ~" or "make the project cards bigger."
# === Paste into claude.ai - Code generation prompt ===
"Create a portfolio website as a single HTML file with the following requirements.
Include all CSS and JavaScript inside the HTML file.
## Basic Info
- Name: Jisoo Kim
- Title: UI/UX Designer
- Bio: I create user-centered, intuitive designs.
I have 3 years of experience designing UI/UX for various apps and web services.
## Section Structure
1. Hero: Name, title, bio, CTA buttons (View Projects, Contact Me)
2. About: Detailed self-introduction (profile photo on the left + text on the right)
3. Projects: 3 cards
- Mobile Banking App Redesign (Figma, User Research)
- Travel Platform Web Design (Responsive, Figma)
- Brand Identity Design (Illustrator, Branding)
4. Skills: Display as tags (Figma, Sketch, Adobe XD, Photoshop, Illustrator)
5. Contact: Email, LinkedIn links + simple contact form
## Design Requirements
- Minimal and modern design
- Main color: #2563eb (blue)
- Dark mode / light mode toggle button (top right)
- Smooth scroll + fade-in animations
- Responsive for mobile/tablet/desktop
- Hover effect on project cards
- Written in English
- Use placeholders for images (with comments for easy replacement later)
Show me the Artifact preview as well."
# ^ Replace the name, title, projects, skills, and colors with your own.Step 3: Refine Design and Fill In Project Content
Check the basic portfolio Claude generated, and refine the design and content. [Saving and checking the code] 1. Click the "Copy" button on the code Claude showed (or select all and Ctrl+C) 2. Open Notepad and paste (Ctrl+V) 3. "Save As" -> filename: index.html -> Save 4. Double-click index.html and your portfolio opens in the browser! If Notepad will not save as .html: -> Change "File type" to "All Files (*.*)" before saving. [Requesting design changes - continue in the same conversation] Request specific changes as shown below: [Adding project images] If you have project screenshots: 1. Create an images folder in the same directory as index.html. 2. Put your project images in the images folder. 3. Ask Claude "Change project 1's image to images/project1.png." If you do not have images yet: -> Ask Claude "Find appropriate placeholder image URLs from Unsplash and use them." Image size tips: -> 1200px wide or smaller, under 500KB is ideal -> Use liminfo's image compression/resize tools [Checking on mobile] 1. With index.html open in Chrome, press F12 2. Click the smartphone icon in the top left 3. Select "iPhone SE" etc. to check mobile layouts 4. If anything looks broken, ask Claude "This is broken on mobile. Please fix it."
# === Design modification prompt examples for Claude ===
# (Continue in the same conversation)
# [Change colors]
"Change the main color to green (#10b981).
Make it look good in dark mode too."
# [Modify hero section]
"Add a gradient animation to the hero section background.
A slow transition from blue to purple."
# [Modify project cards]
"Make the project cards bigger.
Widen the image area and show more description text."
# [Modify skills section]
"Display skills as progress bars (proficiency bars) instead of tags.
Figma 90%, Photoshop 80%, etc."
# [Add profile photo area]
"Add a round profile photo area to the About section.
Use a placeholder for now, so I can replace it later."
# [Modify contact section]
"Remove the email input form from the contact section,
and instead cleanly display 3 icon links: email, LinkedIn, GitHub."
# [Add navigation]
"Add a fixed navigation bar at the top.
With Home, About, Projects, Skills, Contact menu items,
and clicking each one smoothly scrolls to that section."Step 4: Check Dark Mode and Final Review
Verify that the portfolio's dark mode works properly and do a final check before deployment. [Checking dark mode] 1. Click the dark mode toggle button (sun/moon icon) in the top right. 2. Check that background, text, cards, and button colors all change appropriately. 3. If text is invisible in dark mode or cards blend into the background: -> Ask Claude "The project cards are indistinguishable from the background in dark mode. Please fix it." If there is no dark mode toggle: -> Ask Claude "Add a dark mode / light mode toggle button in the top right." [SEO and social media sharing setup] Configure your portfolio so it displays a nice preview when shared on social media. Ask Claude: "Add SEO meta tags and Open Graph tags to this portfolio. - title: Jisoo Kim | UI/UX Designer Portfolio - description: The portfolio of Jisoo Kim, creating user-centered, intuitive designs. - og:image: (will replace with actual image later)" [Final review checklist] Check each item below: - [ ] No broken layouts in both light mode and dark mode - [ ] Layout is correct on mobile (375px) - [ ] All links (email, LinkedIn, etc.) work properly - [ ] Project images display correctly - [ ] Scroll animations work smoothly - [ ] No typos
# === Final review prompt for Claude ===
"Do a final review of this portfolio code:
1. Check that all elements are visible in dark mode
2. Responsive: Support 375px (mobile), 768px (tablet), 1280px (desktop)
3. Add SEO meta tags and Open Graph tags
4. Add a favicon
5. Smooth fade-in animations on scroll
6. Proper href links on all a tags
7. Add alt text to images (accessibility)
Fix everything that needs fixing and show me the final code."
# === If dark mode is not working ===
"Add a dark mode toggle button:
- Fixed in the top right corner
- Clicking toggles between light and dark
- Use the system setting (OS dark mode) as default
- Remember the chosen theme so it persists on next visit"
# === Checking share preview ===
# When you share the URL on social media, the title, description,
# and image appear as a preview.
# OG tags must be properly configured for this to work.Step 5: Deploy for Free with GitHub Pages or Vercel
Publish your completed portfolio to the internet. Both methods are free and can be deployed within 5 minutes. [Method 1: GitHub Pages (recommended - simplest)] 1. Sign up at github.com (or log in if you already have an account) 2. Click "+" in the top right -> "New repository" 3. Enter "yourusername.github.io" for Repository name (yourusername = your GitHub username) Example: jisoo123.github.io 4. Click "Create repository" 5. Click the "uploading an existing file" link 6. Drag and drop your index.html file (and images folder if you have one) 7. Click "Commit changes" 8. In 5 minutes, check your portfolio at https://yourusername.github.io! You will know it worked when: -> Entering https://yourusername.github.io in your browser shows your portfolio If you get a 404 error: -> Check that Settings > Pages has Source set to the "main" branch. -> Make sure the repository name is exactly "yourusername.github.io" (case-sensitive). [Method 2: Vercel (convenient for custom domain)] 1. Go to vercel.com and log in with your GitHub account 2. "Add New Project" -> Select your GitHub repository 3. Click "Deploy" -> Deployment complete in 1-2 minutes! 4. A unique URL (projectname.vercel.app) is generated. [Updating after making changes] 1. Ask Claude for changes -> Get new code 2. Click index.html in the GitHub repository -> Pencil icon (Edit) -> Paste new code 3. Click "Commit changes" 4. GitHub Pages: Auto-reflects in 2-5 minutes Vercel: Auto-reflects in 1-2 minutes [Connecting a custom domain (optional)] If you want to connect a domain like "jisoo.com": - Purchase from namecheap.com or godaddy.com ($10-15/year) - GitHub Pages: Enter in Settings > Pages > Custom domain - Vercel: Enter in Settings > Domains - HTTPS is automatically configured!
# === Deployment without terminal (recommended for non-developers) ===
#
# [GitHub Pages]
# 1. Go to github.com -> Log in
# 2. Click + button -> New repository
# 3. Name: yourusername.github.io -> Create
# 4. Click "uploading an existing file"
# 5. Drag and drop index.html + images folder
# 6. Click "Commit changes"
# 7. In 5 minutes, check at https://yourusername.github.io!
#
# [Vercel]
# 1. After creating the GitHub repository above
# 2. Go to vercel.com -> Log in with GitHub
# 3. New Project -> Select repository -> Deploy
# 4. Done! A URL is generated.
#
# === When making changes ===
# 1. Ask Claude for changes -> Copy new code
# 2. Click index.html in the GitHub repository
# 3. Click the pencil icon (Edit)
# 4. Select all existing code (Ctrl+A) -> Paste new code (Ctrl+V)
# 5. Click "Commit changes"
# 6. Auto-reflects in a few minutes!
# === Repository name important note ===
# For GitHub Pages, the repository name must be exactly:
# yourusername.github.io (yourusername = your GitHub username)
# Using a different name requires additional configuration.
# Case must match exactly!Step 6: Operations and Expansion Tips
Once your portfolio is deployed, refer to these tips for more professional management. [Update regularly] Your portfolio is a living document. Add new projects whenever you complete them. - Add new projects: Ask Claude "Add one more project card. The content is..." - Update skills: "Add TypeScript to the skills list" - Change bio: "Change the bio text to ~" [Add portfolio URL to your resume] Put the deployed URL on your resume, LinkedIn, and business cards. A custom domain (jisoo.com) looks even more professional. [Visitor analytics (Google Analytics)] See who visits your portfolio and when. Ask Claude "Add Google Analytics code. The ID is G-XXXXXXXXXX." [Page speed optimization] - Always compress images! (1200px wide or less, under 500KB) - Use liminfo's image compression/resize tools - WebP format is the lightest [Accessibility] - Add alt text to all images (ask Claude) - Verify that keyboard tab navigation works - Check that color contrast is sufficient (including dark mode)
# === Frequently used expansion prompts ===
# [Add a project]
"Add one more card to the projects section:
- Title: Healthcare App Dashboard
- Description: Designed a dashboard UI for visualizing user health data
- Technologies: Figma, Data Visualization, Responsive
- Image: Use a placeholder"
# [Add blog links]
"Add a 'Writing' section below the projects section.
- 3 blog post links
- In title, date, one-line description format"
# [Add testimonials section]
"Add a 'Testimonials' section below the projects section.
- 2 cards: Name, title, one-line testimonial, profile avatar
- Display in a slider/carousel format"
# [Add animation]
"Add a typing animation to the hero section.
'UI/UX Designer | Product Designer | Freelancer'
should type out one character at a time and cycle through."
# [Multi-language support]
"Create a French version too. Save as fr.html.
Add a language toggle button in the hero section."
# [Performance optimization]
"Load images with lazy loading.
Also optimize scroll animations with Intersection Observer."Core Code
Ask Claude to build your portfolio based on this structure. It uses CSS variables for dark mode, Grid auto-fill for responsive project cards, and is contained in a single HTML file ready for deployment anywhere.
<!-- Portfolio core structure - Ask Claude to build on this structure -->
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jisoo Kim | UI/UX Designer Portfolio</title>
<meta name="description" content="The portfolio of Jisoo Kim, creating user-centered, intuitive designs">
<meta property="og:title" content="Jisoo Kim | UI/UX Designer">
<meta property="og:description" content="I create user-centered, intuitive designs">
<style>
/* CSS variables for light/dark mode management */
:root {
--bg: #ffffff; --bg2: #f8fafc; --text: #1e293b;
--text2: #64748b; --accent: #2563eb; --card: #fff;
}
[data-theme="dark"] {
--bg: #0f172a; --bg2: #1e293b; --text: #f1f5f9;
--text2: #94a3b8; --accent: #3b82f6; --card: #1e293b;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Inter', sans-serif; background: var(--bg); color: var(--text); }
/* Hero: Full screen, gradient background */
.hero {
min-height: 100vh; display: flex; align-items: center; justify-content: center;
background: linear-gradient(135deg, var(--accent), #7c3aed);
color: #fff; text-align: center; padding: 2rem;
}
.hero h1 { font-size: clamp(2rem, 5vw, 3.5rem); margin-bottom: 1rem; }
/* Project cards: responsive grid */
.projects { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 2rem; }
.card {
background: var(--card); border-radius: 16px; overflow: hidden;
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
transition: transform 0.3s; /* Slight lift on hover */
}
.card:hover { transform: translateY(-8px); }
.card img { width: 100%; height: 200px; object-fit: cover; }
.card-body { padding: 1.5rem; }
/* Responsive: single column on mobile */
.container { max-width: 1100px; margin: 0 auto; padding: 4rem 1.5rem; }
@media (max-width: 768px) { .projects { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<!-- Dark mode toggle -->
<button onclick="toggleTheme()" style="position:fixed;top:1.5rem;right:1.5rem;z-index:1000">
Toggle Theme
</button>
<!-- Hero -->
<section class="hero">
<div>
<h1>Hi, I'm Jisoo Kim</h1>
<p>I create user-centered, intuitive designs</p>
</div>
</section>
<!-- Projects -->
<section id="projects" class="container">
<h2>Projects</h2>
<div class="projects">
<div class="card">
<img src="images/project1.png" alt="Mobile Banking App Redesign">
<div class="card-body">
<h3>Mobile Banking App Redesign</h3>
<p>User testing-based UI redesign</p>
</div>
</div>
<!-- Repeat cards -->
</div>
</section>
<script>
function toggleTheme() {
const html = document.documentElement;
const next = html.dataset.theme === 'dark' ? 'light' : 'dark';
html.dataset.theme = next;
localStorage.setItem('theme', next);
}
// Apply system preference or saved value
const saved = localStorage.getItem('theme');
if (saved) document.documentElement.dataset.theme = saved;
else if (matchMedia('(prefers-color-scheme:dark)').matches)
document.documentElement.dataset.theme = 'dark';
</script>
</body>
</html>Common Mistakes
Only asking Claude "make me a portfolio"
Provide your name, title, project details, desired design style, and colors specifically. The more detailed your prompt, the higher quality the result. For example: "minimal blue theme, dark mode support, 3 project cards."
Setting the GitHub Pages repository name incorrectly, preventing deployment
For a user site, the repository must be named exactly "yourusername.github.io." The username must match your exact GitHub username, and case must match exactly. Using a different name requires additional configuration in Settings > Pages.
Linking images via external URLs, causing broken links
Save project images directly in an images/ directory in the same folder and link using relative paths (src="images/project1.png"). External URLs can break at any time. Optimize images to 1200px wide or less and under 500KB for faster loading.
Only checking the desktop design without testing on mobile
Many recruiters and clients check portfolios on mobile. Before deploying, always check mobile preview using Chrome: press F12 and click the smartphone icon. Pay special attention to 375px (iPhone SE) width to ensure nothing breaks.
Separating CSS and JavaScript into different files, causing path errors
For beginners, it is safest to include all CSS (<style>) and JavaScript (<script>) in a single index.html file. Splitting files makes path configuration errors more likely. Try separating files only after your site is working reliably.