Quick Start
Clone, install, configure, and run Gravity Node locally in under five minutes.
Prerequisites
Node.js 18.20+ and npm. That’s it — unlike the Python original, there’s no separate Python/pip toolchain to install.
Starting from a completely bare machine? Install Your Tools covers Git, the GitHub CLI, Node.js, a text editor, and an AI coding agent with one idempotent command per OS.
Clone, install, configure, run
# 1. Clone and install
git clone https://gitlab.com/eim_opensource/gravity-node.git
cd gravity-node
npm install
# 2. Configure
cp .env.example .env
# generate a SECRET_KEY:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# paste the result into SECRET_KEY= in .env
# 3. Run it
npm run dev
Open http://localhost:3001. That’s a fully working site — home, about, features, blog,
events, forms, links, podcast page (unconfigured), shop, gallery, and a customer portal —
all reading from data/content/, no external services required.
Prefer an AI coding agent to do this for you?
Open /get-started in the running app (or read it as plain source at
src/pages/get-started.astro) — it’s a copy-pasteable prompt for Claude Code, Claude
Desktop, or Codex that clones the repo, installs it, runs it locally, and — once you
confirm it looks right — deploys it to Vercel and hands you back a live URL.
Unlock the admin dashboard and editors
Local admin auth normally requires a real Adhara-backed session (not yet implemented — see FAQ & Roadmap). For local development, set the dev bypass:
# in .env
GRAVITY_DEV_ADMIN=1
Restart the dev server, then:
- Visit
/admin— the dashboard, with a live “Feature backends” panel showing which features are local vs. Adhara right now. - Look for the ✏️ floating button in the bottom-right corner of the home, about, or features pages — that’s the inline click-to-edit editor.
- Visit
/admin/editor/build/homefor the full drag-and-drop builder canvas (built on GrapesJS).
Never set GRAVITY_DEV_ADMIN=1 in production — it bypasses login entirely.
Seed sample content
npm run content -- import docs/gravity/examples/content.sample.json
npm run blog -- import docs/gravity/examples/blog.sample.json
npm run events -- import docs/gravity/examples/events.sample.json
npm run links -- import docs/gravity/examples/links.sample.json
npm run shop -- import docs/gravity/examples/shop.sample.json
npm run courses -- import docs/gravity/examples/portal/courses/building-with-ai.json
Or, if you’re running the Docker path: make editor builds the container, seeds all of the
above, and starts with the admin/portal dev bypass on — see the printed URLs when it’s done.
Your first edit
- Open
/admin(with the dev bypass on). - Click Inline edit on the Home page, or Open in Builder.
- Change some text, save/publish.
- Refresh the live page — the change is there. It’s now sitting in
data/content/pages/home.json(or whereverGRAVITY_STORE_BACKENDpoints), not in a database.
That’s the whole content loop: every editor — inline, builder canvas, or the npm run content CLI — reads and writes the exact same Section[] data through
src/content/content.ts. See The Content Model for how that works
under the hood, and why it matters if you’re extending the template rather than just using
it.
What’s next
- The Content Model — how the block/schema system works, and the one rule that keeps both visual editors working.
- Adhara Integration — connect a real CMS backend, feature by feature.
- Deploying — ship it to Vercel, Cloudflare, Google Cloud Run, or Netlify.