NPM
Install devfolio-page globally using npm or your preferred package manager.
npm install -g devfolio-pageOr use npx to run without installing:
npx devfolio-page initeverything you need to build your portfolio
Install devfolio-page globally using npm or your preferred package manager.
npm install -g devfolio-pageOr use npx to run without installing:
npx devfolio-page initnpm install -g devfolio-pageRequires Node.js and npm. Don't have them? Install Node.js first.
devfolio-page initAnswer a few questions to create portfolio.yaml with your basic info
cd my-portfolioOpen the folder in your editor (VS Code, Cursor, etc.) and add projects, experience, writing to portfolio.yaml. See portfolio structure for examples.
devfolio-page renderGenerates your site with all pages (home, projects, experiments, writing) in the site/ folder.
devfolio-page devOpens at localhost:3000 with live reload. Edit portfolio.yaml and save to see updates instantly.
Ready to deploy? Upload the site/ folder to Vercel, Netlify, or GitHub Pages.
Create a new portfolio folder
devfolio-page initInteractive prompts will ask for:
Start development server with auto-rebuild
devfolio-page dev [file] [options]| Option | Description |
|---|---|
| [file] | YAML file (default: portfolio.yaml) |
| --port, -p <port> | Dev server port (default: 3000) |
| --theme, -t <name> | Theme to use (default: srcl) |
Features:
Validate a portfolio YAML file
devfolio-page validate <file>Checks for:
Generate static HTML from portfolio
devfolio-page render [file] [options]| Option | Description |
|---|---|
| [file] | YAML file (default: portfolio.yaml) |
| --theme, -t <name> | Theme to use (default: srcl) |
| --output, -o <dir> | Output directory (default: ./site) |
Basic information about you.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | Your full name |
| title | string | yes | Your role or title |
| location | string | yes | City, Country |
| timezone | string | no | Timezone (e.g., UTC-5) |
How people can reach you.
| Field | Type | Required | Description |
|---|---|---|---|
| string | yes | Email address | |
| website | URL | no | Personal website |
| github | string | no | GitHub username |
| string | no | LinkedIn username | |
| string | no | Twitter/X handle |
A short description of yourself. Supports multiline with | syntax.
bio: |
Line one of your bio.
Line two continues here.Extended about section that generates a dedicated /about page.
| Field | Type | Required | Description |
|---|---|---|---|
| short | string | no | Brief intro for homepage |
| long | string | no | Longer bio with markdown support |
about:
short: Brief intro for homepage
long: |
Longer bio with markdown support.
Multiple paragraphs work great here.Array of work experiences.
| Field | Type | Required | Description |
|---|---|---|---|
| company | string | yes | Company name |
| role | string | yes | Your role/title |
| date.start | YYYY-MM | yes | Start date |
| date.end | YYYY-MM | "present" | yes | End date or "present" |
| description | string | no | Role description |
| highlights | string[] | no | Key achievements |
Array of notable projects.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | Project name |
| description | string | no | Short description |
| url | URL | no | Project URL |
| tags | string[] | no | Technologies used |
| featured | boolean | no | Highlight this project |
Key-value pairs of skill categories.
skills:
Languages: [TypeScript, Go, Python]
Frameworks: [React, Next.js, Express]
Tools: [Docker, Kubernetes, AWS]Array of educational background.
| Field | Type | Required | Description |
|---|---|---|---|
| institution | string | yes | School/University name |
| degree | string | yes | Degree or certificate |
| date.start | YYYY-MM | no | Start date |
| date.end | YYYY-MM | no | End date |
| description | string | no | Additional info |
Array of articles, blog posts, or publications.
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | yes | Article title |
| url | URL | yes | Link to article |
| date | YYYY-MM-DD | no | Publication date |
| publication | string | no | Where published |
| featured | boolean | no | Highlight this article |
Top-level projects field for multi-page portfolios with dedicated case study pages.
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | URL slug (e.g., /projects/my-project.html) |
| title | string | yes | Project title |
| subtitle | string | no | Brief tagline |
| featured | boolean | no | Show on homepage |
| thumbnail | path | no | Thumbnail image |
| hero | path | no | Hero image for project page |
| meta.year | string|number | no | Year completed |
| meta.role | string | no | Your role |
| meta.timeline | string | no | Project duration |
| meta.tech | string[] | no | Technologies used |
| meta.links.github | URL | no | GitHub repository |
| meta.links.demo | URL | no | Demo link |
| meta.links.live | URL | no | Live site |
| sections | array | no | Content sections |
Section types: overview, image, gallery, metrics, outcomes, process, code, demo, interactive
projects:
- id: my-project
title: My Project
featured: true
meta:
year: 2024
role: Lead Developer
tech: [React, Node.js]
sections:
- type: overview
content: |
Project description here.
- type: metrics
data:
- label: Users
value: "10,000+"Side projects and explorations.
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | yes | Experiment title |
| description | string | no | Brief description |
| image | path | no | Preview image |
| github | URL | no | Repository link |
| demo | URL | no | Demo link |
| tags | string[] | no | Technologies used |
experiments:
- title: Creative Coding
description: Generative art experiments
github: https://github.com/...
tags: [p5.js, WebGL]Customize titles and descriptions for each page.
| Field | Type | Required | Description |
|---|---|---|---|
| projects.title | string | no | Projects page heading |
| projects.description | string | no | Projects page subheading |
| about.title | string | no | About page heading |
| about.description | string | no | About page subheading |
| experiments.title | string | no | Experiments page heading |
| experiments.description | string | no | Experiments page subheading |
| writing.title | string | no | Writing page heading |
| writing.description | string | no | Writing page subheading |
pages:
projects:
title: My Work
description: A curated selection of projects.
about:
title: About Me
description: Designer and developer.Terminal aesthetic. Monospace fonts, dark theme, orange accents. Inspired by sacred.computer.
theme: srclClean and contemporary. Sans-serif typography, subtle shadows, professional feel.
theme: modernScholarly aesthetic. Serif typography, warm browns, vintage academic feel.
theme: dark-academiaConfigure theme behavior in your portfolio.yaml:
| Setting | Type | Default | Description |
|---|---|---|---|
| color_scheme | "dark" | "light" | dark | Default color scheme |
| show_grid | boolean | false | Show baseline grid overlay |
| enable_hotkeys | boolean | true | Enable keyboard shortcuts |
| animate | "none" | "subtle" | "full" | subtle | Animation level |
Deploy instantly with the Vercel CLI:
# Install Vercel CLI
npm install -g vercel
# Deploy
cd site
vercelOr connect your GitHub repo for automatic deployments.