Ship beautiful
websites.
In Python.
Gravity bundles everything a production site needs — Flask routing, Gunicorn workers, Docker deployment, JWT auth, a CSS design token system, and Adhara CMS — ready the day you clone it. No Node.js. No build step. No framework churn.
make deploy PLATFORM=gcp or PLATFORM=cloudflare)Run Gravity locally
in under a minute.
One command clones the repo into ~/projects/opensource/gravity,
installs dependencies, and starts the server — no Docker required to try it.
curl -fsSL \ https://gitlab.com/eim_opensource/gravity/-/raw/master/scripts/install.sh \ | bash
Download and run https://gitlab.com/eim_opensource/gravity/-/raw/master/scripts/install.sh to set up Gravity locally — clone it, install dependencies, and start the server — then tell me the URL once it's running.
--dockerswitch to a Docker-based run--theme=photochange the active theme--updatepull the latest and restart--stopstop the running server"The best framework isn't the most powerful one. It's the one you can still understand six months later."
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 Flask app, Gunicorn config, Docker-compose, admin interface, blog, events, contacts, user management, 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 Gunicorn 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.
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.
Flask controllers, Jinja2 templates, Gunicorn production server. Blueprint routing, factory pattern, context processors. 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.