← FOLIO FORGE

DEPLOYMENT GUIDE / V1

Ship your Folio Forge site

Export from the builder, push to GitHub, deploy to Cloudflare Pages, point your domain at it. Two paths — pick one.

— 01

Before you start

Five things to have in place. We'll create accounts as we go in the manual path.

  • A computer — Windows 10+ or macOS 12+. Linux works too; the commands are the same as Mac.
  • A web browser you're already signed into Google or whatever email account you'll register with.
  • ~30 minutes for the manual path. Most of that is waiting for installs and DNS.
  • A credit card for the domain — about $10 USD per year for a .com on Cloudflare Registrar (no markup).
  • An exported Astro project — the ZIP that Folio Forge produces when you click Export. We'll get to this in step 6 of the manual path.
If a step needs the terminal, we'll show the exact command for both Windows (PowerShell) and macOS (Terminal). Copy it, paste it, run it. If it fails, jump to Troubleshooting.

— 02 · PATH A

Manual — every step from start to finish

Sixteen steps. Once you've done it once, you understand exactly what's happening on every redeploy.

01

Install Node.js

Astro (which is what Folio Forge exports) needs Node.js 22 or newer. Pick your OS.

WINDOWS

Press Win + X, choose Terminal (or Windows PowerShell). Run:

winget install OpenJS.NodeJS.LTS

Close the terminal, reopen it, then verify:

node --version

MACOS

Open Terminal ( + Space, type Terminal). If you don't have Homebrew yet:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then:

brew install node@22 && brew link --overwrite node@22

Verify:

node --version

You should see v22.x.x or higher. If you see command not found, restart your terminal first.

02

Install Git

WINDOWS

winget install Git.Git

MACOS

brew install git

Verify in either OS:

git --version
03

Create a GitHub account

  1. Go to github.com/signup
  2. Pick a username — this becomes part of your repo URLs (github.com/your-name/repo)
  3. Verify your email address

Free tier is fine. You'll never need anything more.

04

Create a Cloudflare account

  1. Go to dash.cloudflare.com/sign-up
  2. Verify your email

Free tier covers static-site hosting (Cloudflare Pages) for portfolios at any reasonable traffic level.

05

Buy a domain on Cloudflare Registrar

Cloudflare sells domains at wholesale price — no markup, no upsells, no parked-page ads.

  1. In the Cloudflare dashboard, go to Domain Registration → Register Domains
  2. Search the domain you want
  3. Add to cart, complete payment

Done. Your domain is automatically on Cloudflare DNS — no nameserver setup needed. About $10 USD/year for a .com.

Already own a domain elsewhere? You can transfer it to Cloudflare Registrar later, or just point its nameservers at Cloudflare DNS for free. Both options are under Websites → Add a domain in the Cloudflare dashboard.
06

Export from Folio Forge

  1. Open Folio Forge
  2. Build your portfolio — pick a template, edit sections, set theme tokens, choose motion presets
  3. Click Export in the top-right of the builder
  4. Click Download Astro project — a .zip downloads

The ZIP contains a complete, runnable Astro 6 project. Nothing else is required to deploy it.

07

Extract the ZIP and open a terminal in that folder

Move the ZIP somewhere you keep code (e.g., Documents/Code/) and unzip. Result is a folder like my-portfolio/.

WINDOWS

Right-click the folder → Open in Terminal.

MACOS

Right-click the folder → New Terminal at Folder. (If that option is missing: System Settings → Keyboard → Keyboard Shortcuts → Services → Files and Folders → enable New Terminal at Folder.)

08

Install dependencies and preview locally

npm install

Wait for it to finish (~30 seconds). Then:

npm run dev

Open the URL it prints (usually http://localhost:4321/) in your browser. You should see your portfolio. Press Ctrl + C in the terminal when you're done previewing.

09

Initialize git in your project

git init -b main
git add .
git commit -m "Initial commit"

If git asks you to set your name/email first, run this once with your real values:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"
10

Create a new repo on GitHub

  1. Go to github.com/new
  2. Repository name: my-portfolio (or whatever you want)
  3. Visibility: Public or Private — both are free
  4. Important: Don't check any of Add a README / .gitignore / license. Your local repo already has files; pre-filling these creates a merge mess.
  5. Click Create repository
11

Push your local repo to GitHub

GitHub shows a snippet on your new empty repo's page. Use the "…or push an existing repository from the command line" block. It looks like this — replace YOUR_USERNAME:

git remote add origin https://github.com/YOUR_USERNAME/my-portfolio.git
git push -u origin main

You'll be prompted to log in. On Windows, the Git Credential Manager opens a browser flow. On Mac, you'll likely use a Personal Access Token as the password (your GitHub password no longer works for git over HTTPS).

12

Connect Cloudflare Pages to your GitHub repo

  1. In the Cloudflare dashboard sidebar, click Workers & Pages
  2. Click CreatePagesConnect to Git
  3. Authorize Cloudflare to access GitHub (a popup walks you through this)
  4. Select your my-portfolio repo
13

Configure the build

Cloudflare auto-detects Astro. Confirm these values:

  • Framework preset: Astro
  • Build command: npm run build
  • Build output directory: dist
  • Root directory: / (default — leave alone)

Under Environment variables (advanced)Add variable:

  • Name: NODE_VERSION
  • Value: 22

Click Save and Deploy.

14

Watch the first deployment

Cloudflare runs npm install && npm run build on its own runner. About 60-90 seconds. When it's done, your project gets a URL like:

my-portfolio-abc.pages.dev

Click it. Your portfolio is live on the internet, just not on your domain yet.

15

Point your domain at the project

  1. In your Cloudflare Pages project, click Custom domains
  2. Click Set up a custom domain
  3. Type the domain you bought in step 5 (e.g., yourdomain.com)
  4. Cloudflare detects that the domain is on Cloudflare DNS and creates the CNAME record automatically. You'll see Active within ~1-5 minutes.

If you also want www.yourdomain.com to work, repeat with www as a separate custom domain.

16

Done.

Visit https://yourdomain.com — your portfolio is live. From now on, any push to main on the GitHub repo triggers a fresh Cloudflare Pages build automatically.

To make changes: re-export from Folio Forge → unzip into your project folder → git add . && git commit -m "update" && git push.

— 03 · PATH B

Claude Code — same outcome, fewer steps

Claude Code is Anthropic's terminal agent. It runs commands on your behalf with your permission. Same Cloudflare Pages deployment, but Claude handles the git/CLI plumbing.

01

Install Node.js and Git

Same as steps 1-2 of the manual path. Jump back up if you skipped them.

02

Install Claude Code

npm install -g @anthropic-ai/claude-code

Then sign in (browser flow):

claude

Follow the prompts. You'll need an Anthropic account; the free tier is enough for a deploy.

Optional but recommended — also install GitHub CLI (gh) and Wrangler (the Cloudflare CLI). Claude can use them to create the GitHub repo and Cloudflare Pages project without you touching either dashboard.
03

Open Folio Forge, export, unzip, cd in

Same as steps 6-7 of the manual path. End up at:

cd ~/Documents/Code/my-portfolio
04

Start Claude Code in the project folder

claude

Claude reads the project, then waits for you.

05

Tell Claude what you want

Paste exactly this (replace yourdomain.com with your real domain):

Deploy this Astro project to Cloudflare Pages on the domain yourdomain.com.

Verify the build works first (npm install, npm run build). Then:
- Initialize git if not already
- Create a new GitHub repo named "my-portfolio" (use gh CLI if available)
- Push the project
- Create a Cloudflare Pages project connected to that repo (use wrangler if available)
- Configure NODE_VERSION=22 as an environment variable
- Add yourdomain.com as a custom domain
- Verify the site is live and report back the URL

Pause and ask me before any destructive action.

Hit Enter. Claude does the rest, asking for permission before each non-reversible step.

06

Done.

You'll have the same live site as Path A, on the same custom domain. Future updates: re-export from Folio Forge, copy into your project folder, then "Claude, redeploy."

— 04

Troubleshooting

The five things that go wrong most often, and exactly how to fix each one.

npm: command not found after installing Node.js

The terminal cached its PATH from before Node was installed. Close every open terminal window, open a fresh one, try again. If it still fails, restart your computer once.

Permission denied (publickey) or fatal: Authentication failed on git push

GitHub no longer accepts your password over HTTPS. Two clean options:

  • Install GitHub CLI and run gh auth login. Easiest — handles credentials automatically.
  • Generate a Personal Access Token (classic) with repo scope. Use the token as your password when git prompts.

Cloudflare Pages build fails with "Cannot find module 'astro'" or similar

Most often a Node version mismatch. In your Pages project: Settings → Environment variables → Production → add NODE_VERSION with value 22. Trigger a fresh deployment from the Deployments tab.

Custom domain stuck on "Verifying nameservers"

DNS is propagating. Give it 10 minutes. If after 30 minutes it still says verifying:

  • Check that your domain's nameservers point to Cloudflare. Domain Registration → Manage DNS for that domain — nameservers should be the two *.ns.cloudflare.com values.
  • If you bought through Cloudflare Registrar, this is automatic. If you transferred from another registrar, the nameserver change can take up to 24 hours.

"Repository not found" when connecting Cloudflare to GitHub

You probably granted Cloudflare access to some repos, not the one we just created. Fix:

  1. In your Cloudflare Pages project: Settings → GitHub account → Configure
  2. Either grant access to all repos or add my-portfolio to the allowlist
  3. Save, return to the Pages flow, the repo is now visible
Still stuck? Open the Folio Forge case study and click GitHub at the top of the page — you can file an issue there with the exact error message and OS, and I'll help.