Ship beautiful
websites.
In Python.
Gravity is the front-end framework — FastAPI routing, Uvicorn workers, Docker deployment, JWT auth, and a CSS design token system, ready the day you clone it. No Node.js. No build step. No framework churn.
It's not a backend. Local JSON gets a real site online today; connect Adhara, EIM's managed platform, when you want a real CMS and email marketing — or build your own backend on the security and structure already here.
make deploy PLATFORM=gcp or PLATFORM=cloudflare)Paste this into Claude Code
or Codex. That's it.
One prompt clones the repo into ~/projects/opensource/gravity,
installs dependencies, and starts the server — no terminal experience required.
Prefer to type the commands yourself? Shell commands are one tab over.
Set up Gravity for me. Clone https://gitlab.com/eim_opensource/gravity-python.git, run its installer with `curl -fsSL https://gitlab.com/eim_opensource/gravity-python/-/raw/master/scripts/install.sh | bash`, and start the local server. If git, Python 3.10+, or anything else is missing, tell me exactly what to install first, then pick back up where you left off. Once it's running, tell me the exact localhost URL to open.
Works in Claude Code (terminal) or the Claude Desktop app — either one can run commands on your machine once you approve them.
Set up Gravity for me. Clone https://gitlab.com/eim_opensource/gravity-python.git, run its installer with `curl -fsSL https://gitlab.com/eim_opensource/gravity-python/-/raw/master/scripts/install.sh | bash`, and start the local server. If git, Python 3.10+, or anything else is missing, tell me exactly what to install first, then pick back up where you left off. Once it's running, tell me the exact localhost URL to open.
Works in Codex CLI (terminal) or the Codex desktop app the same way.
For anyone who'd rather run it themselves — no agent required.
curl -fsSL \ https://gitlab.com/eim_opensource/gravity-python/-/raw/master/scripts/install.sh \ | bash
--dockerswitch to a Docker-based run--theme=photochange the active theme--updatepull the latest and restart--stopstop the running serverIf that command up above looks like gibberish, that's completely normal — nobody's born knowing it. A few short, patient walkthroughs cover everything you need before you start building.
"The best framework isn't the most powerful one. It's the one you can still understand six months later."
Paste this to deploy it
to the cloud.
One prompt handles login, project setup, and the deploy itself — no clicking through a cloud console by hand. Pick a platform.
Deploy this Gravity site to Vercel. Install the Vercel CLI if needed (`npm install -g vercel`, or use `npx vercel` instead) — then from the repo root run `make deploy PLATFORM=vercel`. It links the project (opening a browser to log me in to Vercel the first time), auto-generates a SECRET_KEY, and auto-provisions Vercel Blob for persistent storage since Vercel's filesystem is read-only in production — no prompts to answer. If it does stop and ask you something, answer it and keep going. If anything's missing, tell me exactly what to install first, then pick back up where you left off. Once it finishes, tell me the live https://…vercel.app URL it prints.
Deploy this Gravity site to Cloudflare. Install Wrangler if needed (`npm install -g wrangler`, or use `npx wrangler` instead) and make sure Docker is running locally, since Wrangler builds the container image before pushing it. From the repo root run `make deploy PLATFORM=cloudflare` — it logs me in to Cloudflare automatically (opens a browser) if needed, auto-generates a SECRET_KEY, and auto-provisions Cloudflare R2 for persistent storage. If R2 asks for API credentials it can't mint itself, it'll tell you exactly what's missing and where to create them (Cloudflare dashboard → R2 → Manage API Tokens) — otherwise there's nothing to answer. If anything's missing, tell me exactly what to install first, then pick back up where you left off. Once it finishes, tell me the live URL it prints.
Deploy this Gravity site to Google Cloud Run. Install the gcloud CLI if needed (https://cloud.google.com/sdk/docs/install) and make sure Docker is running locally. Run `gcloud auth login` first — it opens a browser for me to authenticate — then `gcloud config set project YOUR_PROJECT_ID` if a default project isn't already set. From the repo root run `make deploy PLATFORM=gcp` — it enables the Cloud Run and Artifact Registry APIs, auto-generates a SECRET_KEY, auto-provisions Google Cloud Storage for persistent content, then builds, pushes, and deploys, all without prompts. If anything's missing, tell me exactly what to install first, then pick back up where you left off. Once it finishes, tell me the live https://*.run.app URL it prints.
Login happens in your regular browser — the CLI just waits for you to finish, then keeps going on its own. SECRET_KEY and storage are set up automatically, so there's nothing else to answer. Works the same in Claude Code or Codex.
Clone.
Configure.
Run.
Three steps, running on your machine in minutes. No tutorial hell, no 14-package install, no Webpack config at 2am.
Explore all featuresClone and you're running
The repo includes a working FastAPI app, Docker-compose, admin interface, blog, events, contacts, a full customer portal, and the full CSS design system. It renders on day one.
Configure in one file
Set GRAVITY_TEMPLATE to choose your theme.
Set ADHARA_API_KEY for CMS content.
Every runtime value lives in .env — no secrets baked into code.
Running locally
make dev builds the Docker image and starts the app on :8000.
Your site is live on your machine — no cloud account, no deploy, nothing else to configure yet.
Ship it.
One command.
Everything above runs entirely on your machine. When you're ready to put it online, one command handles the rest.
Full deploy guide →make deploy
Ships to Vercel by default — no Docker, no config. Add
PLATFORM=gcp or
PLATFORM=cloudflare
for a Docker-based deploy with autoscaling to zero.
Local by default.
A real backend when you're ready.
Gravity is the front end — it doesn't store real data, send email, or run a CRM. Every site still works out of the box with zero setup: blog, events, and even a full customer portal, all stored as local JSON. No database, no signup.
Ready for something real? Build your own backend on the routing, auth, and security already here — full control, full responsibility. Or connect Adhara, EIM's managed platform, and let it handle the hard stuff: a real CRM, commerce, and email marketing, unlocked with the paid Adhara SDK.
That local JSON works great to start, but it's not built to last — no real querying, no protection when two writes collide, and nothing keeping it around once you deploy somewhere stateless. Here's what actually goes into replacing it yourself →
# auto-detected — no code changes
ADHARA_API_KEY=adhara_pk_...
ADHARA_WORKSPACE=your-workspace-slug
ADHARA_WORKSPACE_ID=xxxxxxxx-...
Easy to deploy. Built to be reliable. Secure from the ground up.
Gravity makes deployment easy, and just as important, reliable. Security isn't bolted on afterward. It's built into the foundation, from auth and routing to how a site actually ships to production.
That's the difference between a foundation real projects have already run through and code an AI improvised from a blank prompt five minutes ago.
- ✕ Every project starts from zero: auth, routing, and deployment rebuilt from scratch, every time
- ✕ Security is whatever pattern the model happened to pick today, untested by anyone else
- ✕ Every deploy is a fresh gamble, with no track record under real traffic or real load
- ✕ Code an AI improvised from a blank prompt, with no one else having run it before
- ✓ Clone it, configure one file, ship it. Deployment that's actually easy
- ✓ One hardened codebase, reliable because real sites already run on it
- ✓ Security built into the foundation, from auth to deployment, not bolted on after
- ✓ Engineered and exercised by real use, not improvised by an AI five minutes ago
A shared, scrutinized codebase catches what one-off AI output never gets the chance to. What you deploy has already been run by other real sites, not generated fresh and untested.
Point an AI coding tool at Gravity and its effort goes toward your actual solution, not regenerating a login form or a deploy script it's already written a thousand times before.
MIT licensed, so there's no lock-in. Use it however you want. Every contribution back makes the next project faster, instead of every team starting over from zero, alone.
Months of foundational work, from auth and theming to deployment and CMS wiring, compressed into minutes.
One file.
Your entire
look and feel.
Every color, font, radius, shadow, and spacing value lives in :root {}
inside a single CSS file. Change a token — the entire site reacts instantly.
No pre-processor, no build step, no cache to bust.
- ✓ Colors, backgrounds, borders — all tokens
- ✓ Typography: display + body + mono fonts
- ✓ Spacing, radii, shadows, transitions
-
✓
Swap
GRAVITY_TEMPLATE→ entirely new site design
/* Change this block. The entire site reacts. */ :root { /* Palette */ --color-bg: #0C1220; /* deep navy */ --color-surface: #111827; --color-accent: #B8860B; /* gold */ /* Typography */ --font-display: 'Playfair Display', serif; --font-body: 'Inter', system-ui, sans-serif; --font-mono: 'JetBrains Mono', monospace; } /* Swap this env var → entirely new design */ GRAVITY_TEMPLATE=gravity
Everything you need.
Nothing you don't.
FastAPI controllers, Jinja2 templates, Uvicorn or Gunicorn production server. Router-based routing, factory pattern, dependency injection. No Node.js anywhere.
One :root {} block drives everything. Colors, fonts, spacing, shadows — edit one variable, the whole site updates.
Each client gets their own views/<theme>/ and CSS. Switch themes by changing one environment variable.
JWT auth via Adhara SDK, token cookies, @login_required decorator, admin role separation — wired from day one.
make dev runs locally with Docker. make deploy ships to Vercel, GCP, or Cloudflare.
Blog, events, forms, and newsletter via Adhara API key. Commerce and advanced features unlock with the Adhara SDK — no third-party integrations to configure.