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.
— 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.
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.
Install Git
WINDOWS
winget install Git.Git MACOS
brew install git Verify in either OS:
git --version Create a GitHub account
- Go to github.com/signup
- Pick a username — this becomes part of your repo URLs (
github.com/your-name/repo) - Verify your email address
Free tier is fine. You'll never need anything more.
Create a Cloudflare account
- Go to dash.cloudflare.com/sign-up
- Verify your email
Free tier covers static-site hosting (Cloudflare Pages) for portfolios at any reasonable traffic level.
Buy a domain on Cloudflare Registrar
Cloudflare sells domains at wholesale price — no markup, no upsells, no parked-page ads.
- In the Cloudflare dashboard, go to Domain Registration → Register Domains
- Search the domain you want
- Add to cart, complete payment
Done. Your domain is automatically on Cloudflare DNS — no nameserver setup needed. About $10 USD/year for a .com.
Export from Folio Forge
- Open Folio Forge
- Build your portfolio — pick a template, edit sections, set theme tokens, choose motion presets
- Click Export in the top-right of the builder
- Click Download Astro project — a
.zipdownloads
The ZIP contains a complete, runnable Astro 6 project. Nothing else is required to deploy it.
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.)
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.
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]" Create a new repo on GitHub
- Go to github.com/new
- Repository name:
my-portfolio(or whatever you want) - Visibility: Public or Private — both are free
- Important: Don't check any of Add a README / .gitignore / license. Your local repo already has files; pre-filling these creates a merge mess.
- Click Create repository
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).
Connect Cloudflare Pages to your GitHub repo
- In the Cloudflare dashboard sidebar, click Workers & Pages
- Click Create → Pages → Connect to Git
- Authorize Cloudflare to access GitHub (a popup walks you through this)
- Select your
my-portfoliorepo
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.
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.
Point your domain at the project
- In your Cloudflare Pages project, click Custom domains
- Click Set up a custom domain
- Type the domain you bought in step 5 (e.g.,
yourdomain.com) - 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.
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.
Install Node.js and Git
Same as steps 1-2 of the manual path. Jump back up if you skipped them.
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.
gh) and Wrangler (the Cloudflare CLI). Claude can use them to create the GitHub repo and Cloudflare Pages project without you touching either dashboard.
Open Folio Forge, export, unzip, cd in
Same as steps 6-7 of the manual path. End up at:
cd ~/Documents/Code/my-portfolio Start Claude Code in the project folder
claude Claude reads the project, then waits for you.
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.
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
reposcope. 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.comvalues. - 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:
- In your Cloudflare Pages project: Settings → GitHub account → Configure
- Either grant access to all repos or add
my-portfolioto the allowlist - Save, return to the Pages flow, the repo is now visible