Skip to main content

A blog-oriented static site generation engine

Project description

BlogMore

BlogMore

A blog-oriented static site generation engine built in Python.

[!IMPORTANT] This project is built almost 100% using GitHub Copilot or Google's Gemini CLI. Every other Python project you will find in my repository is good old human-built code. This project is the complete opposite: as much as possible I'm trying to write no code at all as an experiment in getting to know how this process works, how to recognise such code, and to understand those who use this process every day to, in future, better guide them.

If "AI written" is a huge red flag for you I suggest you avoid this project; you'll find plenty of other pure-davep-built projects via my profile.

What is BlogMore?

BlogMore is a blog-oriented static site generation engine built in Python. It transforms your Markdown files into a complete, modern blog website with a clean, responsive design—no database, no server-side runtime required.

See my own blog for an example of a site created with BlogMore (the site is hosted on GitHub pages, with the repository over here).

Key Features

  • Static site generator — produces plain HTML/CSS/JS that can be hosted anywhere
  • Markdown-based content — write all your posts in Markdown with support for code highlighting, tables, and footnotes
  • Frontmatter metadata — control post metadata (title, date, tags, category, author) through YAML frontmatter
  • Jinja2 templating — fully customisable templates for complete control over your site's appearance
  • Client-side search — optional full-text search across post titles and content, running entirely in the browser with no external services
  • Automatic icon generation — generate favicons and platform-specific icons (iOS, Android/Chrome, Windows) from a single source image
  • Automatic image optimisation — optional multi-size "ladder" generation and next-gen WebP conversion for local images in Markdown posts; simple <img> tags are replaced with stable, responsive <picture> elements
  • CSS minification — optional minification of the generated stylesheet
  • JavaScript minification — optional minification of generated scripts
  • HTML minification — optional minification of every generated HTML page
  • Flexible post URL format — fully configurable post output paths and URLs via the post_path option; choose date-based paths, per-post directories, category-based layouts, and more
  • Optional reading time display — estimated reading time shown next to the post date, based on 200 words per minute
  • GitHub-style admonitions — alert boxes (note, tip, important, warning, caution) rendered from standard > [!TYPE] blockquote syntax
  • RSS and Atom feeds — built-in feed generation for syndication
  • XML sitemap — optional sitemap.xml for search engine indexing
  • Blog statistics page — optional stats page with histograms, word counts, reading times, lifespan, top linked domains, and more
  • Calendar view — optional full-history year calendar showing all posts, with links to day, month, and year archives; responsive design adapts from four months per row down to one
  • Post graph — optional interactive force-directed graph connecting posts, tags, and categories via internal links; click any node to navigate to it; respects the active light/dark theme
  • Related posts — automatically find and display contextually relevant posts for each entry using a build-time TF-IDF and cosine similarity engine
  • SEO optimisation — meta tags, Open Graph tags, and Twitter Card support
  • Automatic organisation — tag pages, category pages, and chronological archives generated automatically
  • GitHub Pages integration — one-command publishing to GitHub Pages (or any git branch)
  • Live preview server — local development server with automatic rebuilding on file changes
  • Built-in linter — check your site for broken internal links, missing metadata, duplicate titles, and other common issues
  • External link checking — check the reachability and HTTP status of all external URLs found in posts to detect broken links
  • External link dumping — export a CSV list of all external links found in posts along with the files they appear in
  • YAML configuration file — keep all your settings in blogmore.yaml instead of repeating them on the command line

Installation

BlogMore requires Python 3.12 or later.

Using uv (recommended)

The fastest and most modern way to install BlogMore is with uv:

uv tool install blogmore

If you don't have uv installed you can use uvx.sh to perform the installation. For GNU/Linux or macOS or similar:

curl -LsSf uvx.sh/blogmore/install.sh | sh

or on Windows:

powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/blogmore/install.ps1 | iex"

Using pipx

pipx install blogmore

From source

git clone https://github.com/davep/blogmore.git
cd blogmore
uv sync

Documentation

Full documentation -- including a getting-started guide, day-to-day usage, a complete configuration reference, and the command-line reference -- is available at blogmore.davep.dev.

Getting Help

Licence

BlogMore is released under the GPL-3.0-or-later licence.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blogmore-2.31.0.tar.gz (151.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

blogmore-2.31.0-py3-none-any.whl (188.3 kB view details)

Uploaded Python 3

File details

Details for the file blogmore-2.31.0.tar.gz.

File metadata

  • Download URL: blogmore-2.31.0.tar.gz
  • Upload date:
  • Size: 151.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for blogmore-2.31.0.tar.gz
Algorithm Hash digest
SHA256 caeac77a778a258df0f0fb39e7537a19df2a4f00ce2a5ec638de08345f54fa0a
MD5 7d825510bc8846d042f3f5fd53a4a290
BLAKE2b-256 1992bb145ca3a2e207c7b0b2390be40a9f9c9182d4f8e8ee0cb247adf5cd3165

See more details on using hashes here.

File details

Details for the file blogmore-2.31.0-py3-none-any.whl.

File metadata

  • Download URL: blogmore-2.31.0-py3-none-any.whl
  • Upload date:
  • Size: 188.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for blogmore-2.31.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e89a21bc7dd94c0c42117fa6622fd8ad36e199be602c093ed2840622703ae6d9
MD5 362457e8ab94b19081739538478cc999
BLAKE2b-256 e7b326010f04f70815bb62fdf6f507c7dd2dfa4ec6918ebf062d1c13572121d9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page