Get started

Everything you need to make this yours.

From your first install to a form that captures real leads. Whether you're prompting an AI coding agent or doing it by hand, this is the whole path.

01

Install

Two paths in. Most people only need the one-line install — no Docker, no manual setup.

Clones the repo, creates a virtualenv, installs dependencies, and starts the server in the background — no Docker required. Safe to run again later to check status, view logs, or switch themes.

terminal
curl -fsSL https://gitlab.com/eim_opensource/gravity/-/raw/master/scripts/install.sh | bash
install.sh --statusis it running?
install.sh --logstail the server log
install.sh --theme=clarityswitch themes and restart
install.sh --stopstop the server
What you need installed
gitrequired either way
Python 3.10+for the one-line install (no Docker)
Docker + Docker Composefor the Docker path instead
Node.jsoptional — only for Vercel or Cloudflare deploys
gcloud CLIoptional — only for Google Cloud Run deploys
An Adhara accountoptional — only if you want the real CMS backend instead of local JSON
02

Prompt an AI coding agent

Point one at the folder the install created. It reads the theme system and file layout on its own.

Desktop apps

Claude Desktop or the ChatGPT desktop app (Codex). No terminal — point it at ~/projects/opensource/gravity (or wherever you installed it) through a filesystem extension or local environment, and it edits files there directly, asking you to approve each change.

Claude Code or Codex CLI

Open a terminal in the repo and start claude or codex. Same idea, but it can also run commands, install packages, and carry a multi-step task through to a working, tested result — not just edit files.

Good first prompts

  • “Change the accent color and fonts in public/themes/clarity/main.css
  • “Replace the homepage hero copy with my own business’s”
  • “Explain how a request to /about turns into rendered HTML, file by file”

Full walkthrough, plus a guided site-type interview →

03

Edit the homepage

Three ways in, from “just ask an AI” to point-and-click, no code at all.

Prompt it

The homepage lives at views/clarity/index.j2, styled entirely from public/themes/clarity/main.css. Tell an agent what to change in plain language and it edits both.

prompt
Update the homepage hero headline, subtitle, and eyebrow badge to describe my business, then reorder the sections below it to put the feature grid first.
Click to edit it

The built-in Visual Editor lets you click text on the live page and type, add or reorder whole sections, and upload images — no code. Set GRAVITY_DEV_ADMIN=1 in .env locally (or sign in as a real admin once Adhara is connected), then open /admin/editor.

Tweak the look live

Colors, shadows, opacity, and the gradient headline text can be dragged and dropped without touching CSS — changes preview instantly, then Publish to make them permanent. Set GRAVITY_DEV_THEME_TWEAKS=1 alongside admin access, and look for the palette icon in the corner of any page.

04

Build a new form

Every form on a Gravity site talks to the same one endpoint. Copy a working example and change what it asks.

/forms has live, working examples of single-step and multi-step forms — open it, view source, and copy the markup you need. Every one of them submits the same way:

  1. The form's JavaScript collects field values into a responses object.
  2. It POSTs JSON to /api/forms/submit: {form_slug, responses}.
  3. submit_form() in app/services/adhara.py relays it to Adhara.

The form_slug has to exist in your Adhara workspace first — create it and its fields from the Adhara dashboard, or ask an agent with the AdharaFormsManage skill to set it up from the CLI.

prompt
Add a /contact page with a form (name, email, message) styled like the ones on /forms, that posts to /api/forms/submit with form_slug "contact". Show a success state when it submits.

No Adhara account yet? The request still posts — submit_form() just returns an error until a matching form_slug exists. Fine for building the page now and wiring it up later.

05

Build a landing page

Not a special mode — a page like any other, just built for one job instead of ten.

A landing page is a route, a controller, and a template, exactly like every other page on the site — it just leaves out the full site nav and everything else that isn't the one thing you want a visitor to do. A good one usually has:

  • One headline making a single, specific promise, not a general pitch
  • A hero with one call to action, not three competing ones
  • Three or four proof points: benefits, results, or a short testimonial
  • A lead-capture form, built the same way as any other form
  • No main nav pulling attention away from that one action
prompt
Add a new /webinar landing page: a route, a controller, and a template extending this theme's base.j2. A full-bleed hero with one headline and one CTA button, three benefit bullets below it, and a lead-capture form (name + email) posting to /api/forms/submit with form_slug "webinar-signup". Don't add it to the main nav.
06

Deploy to the web

One command, once you're ready. Pick a platform — all three work from the same repo.

Google Cloud Run

The most production-tested path. Requires the gcloud CLI and Docker.

terminal
make deploy-gcp
Vercel

No Docker — runs as a Python serverless function. Requires Node.js.

terminal
make deploy-vercel
Cloudflare

Same Dockerfile, proxied by a small Worker. Requires Docker and Node.js.

terminal
make deploy-cloudflare

Full deploy guide, with all the details →

See everything else it does.