Open Source · Python 3.12 · Vercel · GCP · Cloudflare

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.

Built on Flask Gunicorn Docker Cloud Run Jinja2 Adhara
gravity — bash
$ git clone https://gitlab.com/eim_opensource/gravity.git
$ cd gravity && cp .env.example .env && make dev
✓  Gunicorn 4 workers on :8000
✓  Theme: gravity
→  http://localhost:8000

$ make deploy
✓  Deploying to Vercel — no Docker needed
✓  Build complete, assets uploaded
→  https://my-site.vercel.app 
(also: 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.

terminal
curl -fsSL \
  https://gitlab.com/eim_opensource/gravity/-/raw/master/scripts/install.sh \
  | bash
Run it again to:
--dockerswitch to a Docker-based run
--theme=photochange the active theme
--updatepull the latest and restart
--stopstop the running server
0
Node.js dependencies
Pure Python, front to back
1
env var to swap themes
GRAVITY_TEMPLATE=your-theme
~5min
to a live URL, any platform
make deploy → done

"The best framework isn't the most powerful one. It's the one you can still understand six months later."

The Gravity Principle — Python-first, always

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 features
01
git clone https://gitlab.com/eim_opensource/gravity.git && cd gravity

Clone and you're running

The repo includes a working Flask app, Gunicorn config, Docker-compose, admin interface, blog, events, contacts, a full customer portal, and the full CSS design system. It renders on day one.

02
cp .env.example .env

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.

03
make dev

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 →
terminal
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.

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.

Building from scratch
  • 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
With Gravity
  • 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
Security by default

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.

AI that builds your product, not your plumbing

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.

Open source, and growing

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
public/themes/gravity/main.css
/* 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.

Python-native Stack

Flask controllers, Jinja2 templates, Gunicorn production server. Blueprint routing, factory pattern, context processors. No Node.js anywhere.

CSS Design Tokens

One :root {} block drives everything. Colors, fonts, spacing, shadows — edit one variable, the whole site updates.

Swappable Themes

Each client gets their own views/<theme>/ and CSS. Switch themes by changing one environment variable.

Auth Built In

JWT auth via Adhara SDK, token cookies, @login_required decorator, admin role separation — wired from day one.

Deploy Anywhere

make dev runs locally with Docker. make deploy ships to Vercel, GCP, or Cloudflare.

Adhara CMS + Commerce

Blog, events, forms, and newsletter via Adhara API key. Commerce and advanced features unlock with the Adhara SDK — no third-party integrations to configure.

Local by default.
Adhara when you're ready.

Every Gravity site 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 a real backend — staff logins, a CRM, content management from a browser? Adhara is EIM's platform for that, and Gravity connects to it with one environment variable.

That 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 →

.env
# auto-detected — no code changes
ADHARA_API_KEY=adhara_pk_...
ADHARA_WORKSPACE=your-workspace-slug
ADHARA_WORKSPACE_ID=xxxxxxxx-...

Everything a real production site needs.
On day one.

Clone the repo, set your .env, run make dev. Your site is live in minutes.