Under the hood

JEIKO runs on Django.

Python's web framework, maintained since 2005 and backed by an independent foundation. JEIKO doesn't reinvent the machinery: it builds on proven components, and spends its own code on what a professional website actually needs.

The stack, layer by layer

Nothing exotic: each tool is the standard choice in its category — maintained, documented, familiar to any system administrator. That is what lets your website outlive its developer.

LayerToolWhat it does for your site
LanguagePython 3.13One language for the site, the API, scheduled tasks and the install scripts.
FrameworkDjango 5.2Database, migrations, templates, forms, protection against common web attacks.
DatabasePostgreSQLPages, records, orders, appointments, accounts: all your data, with its integrity constraints.
CacheMemcachedKeeps page bodies, menus and anti-abuse counters in memory.
Application serverGunicornRuns Django, one service per site.
Web serverNginxReceives visitors, encrypts the connection, serves static files with a one-year cache.
CertificatesLet's EncryptHTTPS, renewed automatically.
SystemDebian 12The most conservative server distribution: few surprises, long-lived security fixes.
Accountsdjango-allauthSign-up, verified email, login, two-factor authentication.
PaymentStripeCard payments, without card numbers ever passing through your server.
Contentnh3, tinycss2, PillowSanitising the HTML you type, parsing CSS, producing images in five widths.

Why Django

Because it solves, up front, the problems every website eventually runs into — and that nobody wants to solve alone.

  1. The database schema follows the code. Every JEIKO release ships with its migrations; the update applies them, and restores the previous version if one of them fails.
  2. The basic protections are on from day one: an anti-forgery token on every form, escaped templates, no framing of the site by third parties, secure cookies and HSTS as soon as HTTPS is enabled.
  3. A long-lived release. Django 5.2 is a long-term support release: its security fixes keep coming for three years.
  4. A readable ecosystem. Any Python developer can pick up a Django project: your site doesn't depend on a single person.

Fourteen applications, one package

JEIKO is a Python package made of fourteen Django applications. They are installed together: the start-up check refuses a partial install and names what is missing, rather than letting an error surface far from its cause.

  1. administration — settings, identity, colours and fonts, global CSS, updates
  2. administration_pages — pages, editor, media library, page cache
  3. administration_menu — main and footer menus
  4. shop — the store: products, cart, orders, stock, VAT
  5. payments — payment gateways
  6. custom_objects — custom records and their templates
  7. calendars — appointments, availability, Google Calendar
  8. courses — online courses
  9. questionnaires_expert — questionnaires and profiles
  10. emailing — transactional email
  11. users — accounts, roles, two-factor authentication, personal data
  12. cookies — consent banner and proof of consent
  13. stats — audience measurement
  14. agents — agent API, MCP server, OAuth sign-in

One package, as many sites as you like

Each site is a separate Django project on the same machine: its own Unix account, database, service and cache prefix. The package is shared; what belongs to the site lives in a single file, the .env next to settings.py, readable by the site alone.

A site's .env

SECRET_KEY=… # never in the database, never in a repository
DOMAIN_NAME=mysite.com
JEIKO_SITE_NAME=mysite
DB_NAME=mysite
DB_USER=mysite
DB_PASS=…
JEIKO_LANGUAGE=en-us # the site's default language
JEIKO_TIMEZONE=Europe/London
JEIKO_SSL=true # HTTPS, secure cookies, HSTS

An update replaces settings.py with the new release's template: that is how a release can add an application without anyone touching the server. So it can't overwrite any of your configuration — everything that is yours lives in the .env.

Checked with every release

More than two thousand four hundred automated tests pass before each release: they cover the editor, the store, appointments, the API, account security. A fixed bug comes with the test that stops it from coming back.

python manage.py check # configuration checks
python manage.py test jeiko # 2,407 tests

Install JEIKOAll features