Canonical runbook for operating forgemesh.io and the ForgeMesh repo safely.
This repo has two distinct responsibilities:
- Root package (
forgemesh)
- npm namespace holder and umbrella package
- public README, architecture diagram, npm metadata
- no runtime app logic at repo root
- Website (
site/)
- public marketing site for
https://forgemesh.io - Next.js 16 App Router app
- deployed on the VPS and kept online with
pm2
- VPS repo:
/home/ubuntu/dev/forgemesh - Website app:
/home/ubuntu/dev/forgemesh/site - Public domain:
https://forgemesh.io - Process manager:
~/.npm-global/bin/pm2 - Live process name:
forgemesh-web - PM2 working directory:
/home/ubuntu/dev/forgemesh/site - PM2 start command:
npm run start -- -p 3406 - Runtime port:
3406 - Logs:
/home/ubuntu/.pm2/logs/forgemesh-web-out.log/home/ubuntu/.pm2/logs/forgemesh-web-error.log
- Next.js
16.2.6 - React
19.2.4 - Tailwind CSS v4
- Framer Motion
- Static homepage build served by
next start
- Website source of truth is the tracked code in
site/ - The live public site must match a fresh
npm run buildfromsite/ - Do not trust old
.nextoutput by itself - Do not trust browser-cached UI if it disagrees with source
- The hero/source-of-truth currently uses
forgemesh init --agent coinopai-mcp
A stale build artifact previously showed forgemesh init --agent payment-router even though the tracked source in components/Hero.tsx used coinopai-mcp.
What that means operationally:
- if source and live site disagree, rebuild first
- if your browser disagrees with the rebuilt public site, hard refresh or use a private window
- do not edit
.nextartifacts directly
Repo root:
README.md— umbrella package public docsCLAUDE.md— project-local agent guidance (repo-local instructions; currently ignored by git)OPERATIONS.md— this runbookarchitecture.svg— ecosystem diagrampackage.json— npm metadata forforgemesh
Website:
site/app/page.tsx— homepage compositionsite/app/layout.tsx— metadata and shellsite/components/Hero.tsx— hero terminal copy and headlinesite/components/Projects.tsx— active systems showcasesite/components/*.tsx— remaining sectionssite/package.json— app scripts and dependenciessite/next.config.ts— Next.js runtime/build configsite/README.md— site-focused dev/deploy notes
From the VPS:
cd ~/dev/forgemeshFor website edits:
cd ~/dev/forgemesh/siteRecommended flow:
- Edit tracked source files only
- Check git status before building
- Build from
site/ - Restart
forgemesh-web - Verify public site content
- Commit the repo state
- Push when ready
cd ~/dev/forgemesh/site
npm run build
~/.npm-global/bin/pm2 restart forgemesh-webThen verify:
curl -sL https://forgemesh.io | grep -o "forgemesh init --agent [^<]*\|Infrastructure for Autonomous Execution" | head
~/.npm-global/bin/pm2 describe forgemesh-webAfter any deploy, verify all of these:
- Build completes with no fatal errors
pm2showsforgemesh-webasonline- Public site returns
200 - Public HTML reflects the intended hero/product copy
- No generic
create-next-appstarter copy remains
Useful commands:
~/.npm-global/bin/pm2 list
~/.npm-global/bin/pm2 describe forgemesh-web
~/.npm-global/bin/pm2 logs forgemesh-web --lines 80 --nostream
curl -sI https://forgemesh.io | sed -n '1,20p'
curl -sL https://forgemesh.io | grep -o "forgemesh init --agent [^<]*\|coinopai-mcp\|payment-router\|create-next-app" | head -n 20- Keep the whole website app tracked under
site/ - Do not leave production edits as untracked VPS-only files
- Commit source before treating a deploy as durable
.next/andnode_modules/stay untracked- If the site changed, commit from repo root so the website and umbrella package history stay together
Typical commands:
cd ~/dev/forgemesh
git status --short
git add site OPERATIONS.md
git commit -m "docs: update forgemesh operations runbook"
git push origin mainIf a bad deploy goes live:
cd ~/dev/forgemesh
git log --oneline --decorate -n 10
git checkout <good-commit> -- site OPERATIONS.md CLAUDE.md
cd ~/dev/forgemesh/site
npm run build
~/.npm-global/bin/pm2 restart forgemesh-webThen verify the public site again before making further edits.
forgemesh-webis a plainpm2app, not Docker, not Vercel, not Cloudflare Pages- public traffic reaches Cloudflare, which proxies to the VPS-backed site
- do not use
pm2 restart ... --update-envunless you explicitly intend to change runtime env - do not hand-edit PM2 pid/log files
- do not edit
.nextfiles as a substitute for changing source
- rebuild from
site/ - restart
forgemesh-web - verify with
curl - then hard refresh browser or use incognito
- inspect
components/Hero.tsxandcomponents/Projects.tsx - rebuild
- verify public HTML via
curl - compare source to live output
site/next.config.tssetsoutputFileTracingRoot: process.cwd()to keep runtime root explicit- if warning returns, check for new lockfiles above
site/
- remove them from tracked source
- rebuild and restart
- commit the cleanup so it cannot drift back in
- ForgeMesh package and positioning changes can create content drift with the CoinOpAI public site
- If featured offerings or x402-related positioning change here, review the CoinOpAI site for matching updates
- In practice: after updating
site/components/Projects.tsx, hero copy, or ecosystem/package framing, check whethercoinopai.comorx402.coinopai.comshould be updated too - Treat this as a content-alignment check, not a blocker for every copy tweak
The matching cross-environment handoff for this setup lives in:
~/cc-share/handoff_docs/HANDOFF-2026-05-21-forgemesh-ops.md
The shared-state summary also belongs in:
~/cc-share/STATE.md
Use those files for continuity across Mac, VPS, Codex, Claude Code, GPT, and other agents.