Mundana by WowThemes.net is a well designed Jekyll theme. Its looks have lasted, but years without maintenance told on everything behind them: it loaded slowly, pulled data from other people’s servers, and some of it quietly did not work at all.
Tento článek je k dispozici také v češtině.
This version kept the way it looks and rebuilt everything underneath. What comes out is a site that loads almost at once, does not announce your readers to anyone else, and needs no maintenance beyond writing articles.
Obsah
Performance
99 points on mobile, 100 on desktop. That is what Google PageSpeed Insights gives the theme’s demo site, measured on 28 October 2026. Speed was not an afterthought; it decided the shape of every feature.
No needless calls to outside services. By default the theme loads no outside scripts, no fonts and nothing else from a third party. An outside service is only reached where the person running the site has switched it on in the configuration. Until they do, a reader’s visit stays between the two of you and nobody else gets to know that they opened your article.
One small script instead of two libraries. jQuery and the Bootstrap bundle, close to two hundred kilobytes between them, are replaced by the theme’s own script of around 11 kB.
Images at the size the device needs. The build generates smaller variants and a phone downloads its own. The page does not shift while it loads, the dimensions being written into it in advance.
Search that does not fall apart as articles pile up. The index is a file of its own, fetched the first time somebody searches. It searches the text of the articles, not only their titles. Diacritics do not matter, so navody finds what návody finds.
Webfonts from your own domain, Czech diacritics included. The base weight is preloaded, so text appears at once instead of flashing.
The next page fetched before the reader clicks. Hovering over a link is enough for the browser to fetch the article behind it, so the move is instant. Only a page of this site is fetched, nothing is rendered in advance and nothing is loaded from anywhere else.
Writing
Drafts. You can take your time over an article and read it on the site exactly as it will look once published. It is listed nowhere, it is out of search and out of the sitemap, and it asks search engines to leave it alone. Publishing is moving one file.
A table of contents on longer articles. A collapsed list of the headings, placed before the first of them. It works without JavaScript, and Google can offer links straight to the parts of the article.
Captions under the images. The caption is written in quotes after the image address and rendered under it. An image without one does not leave the build, so it cannot be forgotten.
A viewer for the images. An image that belongs to the text opens over a darkened page, with the other images of the article a step away: arrows, a finger on a telephone, Escape or the back button to close. An image is never stretched past the size it really has, so an old scan is shown as it is. Every image that opens carries a magnifier in its lower right corner, because the cursor says the same thing and a telephone has no cursor. The portrait of an author, the thumbnail of an article being offered and an icon do not open.
A grid of thumbnails. Two or more images written one after another are drawn as thumbnails, two to a row and cropped to one shape. The caption of a thumbnail is shown in the viewer rather than under it, where it would not fit. A single article can be left out of the grid.
Footnotes and references. Sources can sit where they belong without breaking the structure of the article, and an arrow leads back from the list to the place in the text.
Coloured source code. Code in an article is coloured while the site is built rather than in the reader’s browser. Comments, keywords, strings and numbers each have a colour of their own, and there are two palettes, one for each mode. Nothing is downloaded for it and nothing runs on the page.
A call to action inside the article. A box with text and a button, placed into the middle of a longer article on its own. The wording lives in one place in the configuration rather than being pasted into every article.
Anchors on the headings. Every heading carries a small icon that copies a link straight to that part of the article.
The date of the update and the reading time. An article shows when it came out, when you last changed it, and how long it will take to read.
Highlights on the home page. An article can be marked as featured or as a highlight, which puts it in the large block in the middle of the home page or in the sidebar.
A mark on paid content. An article somebody paid for declares itself with one value in its front matter and says so in four places at once: a line above the text, a mark under the headline in every listing, the label in front of its title in the feed, and the attribute a search engine reads a paid link by. Its colours are deliberately not those of the strip above a draft, so that one is not read as the other.
Finding the way around
Categories have pages of their own. Each one has its own address, its own description and its own image. The descriptions live in a single file, not in templates.
Authors have pages of their own. The name on an article leads to the author’s page with a list of their articles, a portrait and links to their profiles.
Series of articles. An article says in its front matter which series it belongs to and which part it is. The order comes from the part number and not from the date, so a whole series can be published in one afternoon and still be read in order. How many parts there are is never written down; it is counted from the articles, so the two cannot disagree. Every part carries the list of them, and a series has a page of its own. Every part says so on itself as well, with a mark over its lead and in every listing, so a reader knows it is not a text standing alone before reading a word of it.
Pagination of the archives. A longer archive of a category or an author is split into pages. The first keeps the address it always had and the others carry their number behind it. The second and every further page says so in its title and description, so that a search engine does not take them for copies of the first. The home page has a length of its own, because a listing one arrives at and an archive one browses are not read the same way.
Breadcrumbs. On articles, on categories and on authors. They are one of the few things whose effect is actually visible in the search results.
Back to the top of the page. In a longer article a round button appears in the lower right corner and takes the reader back to the beginning. While they are at the top it is not there; it appears once a whole screen has gone by and hides again at the top. On a computer the arrow carries the word as well, on a telephone the arrow stands alone, because room is short there.
Dark mode. A page follows the setting of the reader’s system, and a switch in the navigation bar lets them choose for themselves. Once they do, the choice is theirs: it is remembered and the system no longer overrules it. It is kept in their browser and goes nowhere else, and until they touch the switch nothing about them is stored at all.
A warning before leaving for another site. A link that leads away shows a dialog first, and only then opens the other site in a new window. Your own sites and the publisher’s sites do not count as other sites.
A mark on a link that leads away. A little square with an arrow leaving it, drawn after the text of the link, so that the way out is visible before the click. It is drawn in the text of an article or a page, and not in the navigation or the footer.
A 404 page in the style of a blue screen of death. With the sad face and the address the visitor was trying to reach.
Sharing without other people’s scripts. The buttons for Facebook, Threads, LinkedIn and X are ordinary links.
Feedback on an article. Under the text there is a button that opens a dialog: an e-mail address, a checkbox saying this is a mistake rather than a remark, the message and the consent. The message goes to the same form as the contact page and the reader stays on the article. The code behind the dialog is fetched on the first click, so an article nobody writes about costs nothing.
The article on paper. A printed page carries the headline, the author and the date, the lead picture with its caption, the text and the notes under it. The navigation, the search field, the sharing buttons, the block of the publisher and the footer are not printed, because none of them can be used on paper. Dark mode goes back to black on white for the print, and the address of a link is written out after it.
Filtering the articles by category. On the index of the categories a reader ticks several categories at once and gets the articles belonging to all of them. The links to the individual archives stay where they were, so the page works without JavaScript and nothing is hidden from a search engine. The selection is written into the address and can be sent on.
SEO
The title, the description and the language of the page are generated correctly. Every tag a search engine or a social network reads is valid, and each one appears once.
Breadcrumbs as structured data, a canonical address and twitter:card. The twitter section is deliberately absent from the configuration, so that an author without an account on X does not end up with an empty value.
A sitemap and a feed. Both are generated. Only the opening of an article goes into the feed, not the whole text.
An archive with fewer than three articles is not offered to search engines. It is thin content, while navigation through it keeps working.
Redirects from old addresses. When an article changes address, the old one leads to the new.
The Preferred Sources button on Google. Optional, and off by default.
Running the site
Analytics from the configuration, not from templates. Google Analytics 4, Microsoft Clarity and Meta Pixel are switched on by filling in one value. An empty value means nothing at all is written into the page.
A question about the measuring, and two answers to it. As soon as one of those identifiers is filled in, the reader is shown a bar with two choices, the measuring and the marketing. Refusing does not mean nothing is measured: Analytics and Clarity keep working, but store nothing in the reader’s device, so they do not recognise anybody coming back. The Meta pixel is not loaded at all without consent, having no such mode.
Czech or English by one key. The whole interface follows, the date format included. Czech has the plural forms it needs and English does not.
A test instance. One value marks a site as a test: a loud strip across the top, TEST added to the name, and every page telling search engines to stay away. It cannot be mistaken for the live site.
The publisher block in the footer. Links to your other sites, grouped into categories, with an optional block of the newest articles from them. The list of sites is fetched from one place, so it changes on all of them at once.
The pages a site needs. A contact page with a form, a privacy policy, terms of use, an about page. Each link is rendered only when its address is filled in.
Builds on a schedule. The site regenerates itself even when nobody has touched it.
Checks that catch mistakes before a reader does
This is the part you will not see on the site, and it may be the most useful of all. A static site reports almost nothing: it simply behaves differently from what you expected.
The article check. The build stops when an article uses a category that does not exist, has no lead image or caption, points at an author who is not there, or is missing the separator that keeps the whole text out of the feed. It watches the lead as well: one paragraph of prose, not a heading, a list or nothing at all. An article still being written is held to the same standard, so a missing image or description turns up while it is being written rather than on the day it goes out.
The file name check. The build stops at a name Jekyll will not take for an article and would silently leave out, at a date that is not a date, and at two articles that would end up at the same address. It can also watch the numbering of articles, so that no number is used twice.
The link check. After the build it walks the finished site and writes broken links into the log.
The repository check. It needs neither a built site nor a running one, only the files. It catches a block left open in a template and an include naming a file that is not there, holds the language files against each other so that no translation goes missing, and asks that the version is the same everywhere. It is run by hand before changes go out, and the build runs it as well.
Smoke tests of the finished site. A set of tests that walks the published site and checks that it stands: that every address answers, that a missing one gives a 404, that the pagination, the archives, the series and the feed are in order, and that the features you switched on really are on the pages. What to expect is read from the repository itself, so publishing an article or adding a category changes nothing in them. They are run by hand, on your own computer, in PowerShell.
Where to go from here
The theme runs on GitHub Pages and builds itself on every change. Setting up a new site is a few hours of work: create the repository, fill in the configuration, point the domain at it.
If that is not your line of work, get in touch or hand it to anybody who knows GitHub Pages. The theme is freely available and ties you to nobody.
The detailed list of changes against the original Mundana is in CHANGELOG.md in the theme repository.