Skip to main content

sgelt

A simple static site generator for research labs.

Sgelt builds a complete static website from Markdown content, Jinja2 templates, and JSON data files. It is designed for research institutions: seminars, conferences, defenses, team pages, news, and a searchable index.

Features

  • Markdown content with YAML frontmatter
  • Jinja2 templates for full layout control
  • Agenda (seminars, conferences, defenses) with pagination by year
  • Team pages with members and organizing seminars
  • News with paginated indexes
  • iCal export for seminar calendars
  • Lunr.js search index
  • Systematic checks (sgelt --check): broken links, orphan assets, duplicates
  • Dev server with livereload (sgelt --serve)

Installation

pip install sgelt
# or
uv add sgelt

Quick start

mkdir mysite && cd mysite
sgelt --init        # scaffold: templates/, config.yml, content/index.md
sgelt               # build the site
sgelt --serve       # build + dev server on http://localhost:5500

sgelt --init creates a complete project structure with starter templates bundled in the package (sgelt/templates/). Edit config.yml and content/index.md, then build.

Demo site

To see what a complete site looks like, generate one with random demo content:

mkdir mysite && cd mysite
sgelt --init --demo # scaffold + random news, teams, seminars, conferences
sgelt --serve       # preview at http://localhost:5500

--demo uses Faker to generate realistic but entirely fictional content: news articles, team pages with members, seminar series, conferences, and defenses (2020-2026). Requires the dev extra: uv sync --extra dev or pip install sgelt[dev].

A live demo is published at irma.pages.math.unistra.fr/sgelt.

Manual setup

Create a site project with this structure:

mysite/
├── config.yml          # site configuration
├── content/            # Markdown pages
│   ├── home/           # homepage cards
│   ├── teams/          # team pages
│   └── ...
├── templates/          # Jinja2 templates (copy from sgelt --init or customize)
├── static/             # CSS, JS, images
├── data/               # JSON data (agenda, teams)
│   ├── archive/        # agenda archive by year
│   └── teams.json      # team members
└── output/             # generated site (git-ignored)

Then build:

cd mysite
sgelt           # build the site
sgelt --check   # run checks
sgelt --serve   # build + dev server on http://localhost:5500
sgelt --clean   # remove output/

Configuration (config.yml)

site:
  title: "My Lab"
  url: "https://lab.example.org"
  # today: 2026-10-23  # override date for reproducible builds

nav_items:
  Home: index.html
  Team: teams/index.html
  Agenda:
    Upcoming: agenda/a_venir.html

Data files

  • data/archive/<year>.json — agenda archive (seminars, conferences, defenses)
  • data/agenda_indico.json — optional Indico events (merged with archive)
  • data/teams.json — team members and affiliations

See data/*.schema.json for the expected JSON schemas.

Development

git clone <repo>
cd sgelt
uv sync --extra dev
uv run pytest -q
uv run ruff check
uv run ty check

License

MIT

Metadata

Release files for sgelt 5.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sgelt 5.1.0
File Size Uploaded Provenance Actions
sgelt-5.1.0.tar.gz 63.4 kB Without provenance Details for sgelt-5.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sgelt 5.1.0
File Interpreter ABI Platform Actions
sgelt-5.1.0-py3-none-any.whl Python 3 none any Details for sgelt-5.1.0-py3-none-any.whl

Total release size: 114.6 kB

Release files / sgelt-5.1.0.tar.gz

Download URL sgelt-5.1.0.tar.gz
Size 63.4 kB
Tags Source
SHA-256 checksum
How to use checksums
306cce3b071fc6f52b5e00b7cf4f63d6a91199ec55e29f8aeafe227ffc8c94ba
BLAKE2b-256 checksum
How to use checksums
d34eaa6ba728ba1ad68de68a937a8c7a4edbdf9eebdceb99ac7db5763f31cc54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.11

Release files / sgelt-5.1.0-py3-none-any.whl

Download URL sgelt-5.1.0-py3-none-any.whl
Size 51.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
287933d2bf7e9ecdd01b795a5f7abf2fe4649fd6bb432a0ed8ab19f8e21c7da0
BLAKE2b-256 checksum
How to use checksums
c849152bef336ff02b29c9ef35a6a323acc6e41047cc57816dec7dd0d5b9de42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.11

Security for sgelt 5.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page