Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This open source project is for my book Build Blog With Wagtail CMS

You can support my work by purchasing the ebook

Other books written by me


This book will teach you how to build a modern blog with Wagtail CMS

By the end of this course, you will be able to:

  1. Understand Docker and use Docker Compose to do development
  2. Use python-webpack-boilerplate to jump start frontend project bundled by Webpack.
  3. Install Tailwind CSS as the style solution.
  4. Install Stimulus, understand how it works and write Stimulus controllers.
  5. Learn how Dark Mode works in Tailwind CSS and use Stimulus controller to toggle the dark mode.
  6. Understand the benefit of the healthy Stimulus ecosystem by reusing 3-party Stimulus controller.
  7. Create blog models to work with Wagtail.
  8. Use PDB and Django shell to debug, test code and check data in terminal.
  9. Learn to use RoutablePage and add Date to the post url.
  10. Build Pagination component and correctly handle querystring.
  11. Make the blog supports writing in Markdown and Latex.
  12. Create contact page using Wagtail FormBuilder
  13. Build menu, meta tags, sitemap, robots.txt for better SEO.
  14. Build comment system based on django-contrib-comments which support Generic Relations
  15. Use Tribute.js, Axios to add Mention and Emoji support to the comment form.
  16. Deploy the production app to DigitalOcean


  • Python 3.10
  • Django 4
  • Wagtail 4
  • Stimulus 3
  • Tailwind CSS 3

How to run on local

$ git clone
$ cd wagtail-tailwind-blog

First, let's build frontend assets, please make sure node is available.

$ node -v

# install dependency packages
$ npm install

# launch webpack dev server and keep it running
$ npm run watch

You need Docker and Docker Compose and you can install it here Get Docker

# build and launch app
$ docker-compose up --build

Now open a new terminal to import data and change password.

$ docker-compose exec web python load_initial_data
$ docker-compose exec web python changepassword admin

Now you can check on


The demo is also online if you want to check.