Skip to content

adamghill/coltrane

Repository files navigation

coltrane

A minimal app framework for content sites 🎵

PyPI PyPI - Downloads GitHub Sponsors

All Contributors

📖 Complete documentation at https://coltrane.readthedocs.io.

📦 Package located at https://pypi.org/project/coltrane/.

⭐ Features

  • Render markdown files as HTML with automatic URL routing based on the filesystem
  • Use JSON files as data sources in HTML templates or markdown
  • Automatic generation of sitemap.xml and rss.xml files
  • Can serve non-markdown files like robots.txt
  • Local development server which includes live re-rendering of markdown and data via https://github.com/adamchainz/django-browser-reload
  • Site-wide redirects
  • Deployment best practices with whitenoise and gunicorn already configured
  • Leverage the power of built-in Django templates, template tags, and filters inside markdown files
  • Any custom template tags and filters are enabled automatically for use in markdown or HTML templates
  • Include any third-party Django app for additional functionality
  • Optional command to generate static HTML files
  • Can be integrated into a regular Django project as a standard third-party Django app to render markdown content

⚡ Quick start

  1. mkdir new-site && cd new-site to create a new folder
  2. python3 -m venv .venv && source .venv/bin/activate && pip install coltrane to install the coltrane package
  3. coltrane create to create the folder structure for a new site
  4. coltrane play to start local development server
  5. Go to http://localhost:8000 to see the original markdown rendered into HTML
  6. Update content/index.md
  7. Refresh http://localhost:8000 to see the updated markdown rendered into HTML
  8. Optional: run coltrane record to build static HTML files

Generated coltrane file structure

.
├── .gitignore
├── Dockerfile
├── README.md
├── pyproject.toml
└── site
    ├── .env
    ├── .watchmanconfig
    ├── __init__.py
    ├── app.py
    ├── content
    │   └── index.md
    ├── data
    ├── gunicorn.conf.py
    ├── static
    └── templates

📝 Content

Add markdown files or sub-directories to the content directory and rendered HTML will be accessible via auto-generated routes.

  • / would render the markdown in content/index.md
  • /about/ would render the markdown in content/about.md
  • /articles/this-is-the-first-article/ would render the content from /content/articles/this-is-the-first-article.md
  • /not-there/ will 404

HTML will also be served automatically if a markdown file can not be found.

  • /app/ would render the HTML from /templates/app.html or /templates/app/index.html
  • /app/some-user would render the HTML from /templates/app/*.html

Deployment

Example Dockerfile and gunicorn.conf.py files are created when an app is created, and optional dependencies can be installed for efficient static serving with whitenoise.

📖 Documentation

Read all of the documentation at https://coltrane.readthedocs.io.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Tobi DEGNON
Tobi DEGNON

⚠️ 💻

This project follows the all-contributors specification. Contributions of any kind welcome!