I personally prefer good ol' Python because I like it and so being much more familiar with it.

Same here, I've been using it for almost everything I need scripting language for since about 15 years or so, just not for web stuff (with the exception of a few backends using Flask).

The only requirement I would like to consider is that the site should work mostly with JavaScript enabled in the browser.

I assume you mean without JavaScript, if so I agree.

Obviously this is quite hard when using Vue or the like for the frontend

IMO, using Vue or other frontend frameworks isn't really appropriate for a site like Geany anyway since it's not really a "SPA", just a document/info site that is almost entirely static.


I started working on the frontend a bit. Basically it goes like this:

  1. Scan "pages" directory recursively looking for *.md files.
  2. Using front-matter to get meta data for the page (ex. title, description, keywords, output file, etc.).
  3. Convert the markdown body to HTML using markdown-it along with highlight.js for any fenced code blocks.
  4. For each of the pages, process it into a full HTML document using nujucks and a few templates/partials.
  5. Using Webpack, the resulting pages, images, SCSS/CSS, JS, etc. are bundled into a production-ready, tiny, optimized, front-end site.

Basically it just pushes all of the work to "compile-time" to build the site before deploying, without any backend (so far at least, some stuff will likely need a bit of backend like nightly builds, IRC stuff, etc). Updating the site contents involves just adding/editing a markdown file in the "pages" directory and then running the build command to regenerate the site.

I wrote the compiler code in JS/Node because NPM has all of the needed tooling readily available and to start hacking on the site is as simple as running npm install in the source directory. To this point there's about 100 lines of JS for the compiler and about 50 lines of code for a dev server/file-monitoring/live-browser-reloading/etc for development. So far the dependencies (from package.json) look like this:

{
  "dependencies": {
    "highlight.js": "^9.15.10",
    "normalize.css": "^8.0.1"
  },
  "devDependencies": {
    "@babel/core": "^7.6.0",
    "@babel/preset-env": "^7.6.0",
    "babel-loader": "^8.0.6",
    "browser-sync": "^2.26.7",
    "chokidar": "^3.0.2",
    "css-loader": "^3.2.0",
    "file-loader": "^4.2.0",
    "front-matter": "^3.0.2",
    "glob": "^7.1.4",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.2.0",
    "markdown-it": "^9.1.0",
    "mini-css-extract-plugin": "^0.8.0",
    "node-sass": "^4.12.0",
    "nodemon": "^1.19.2",
    "nunjucks": "^3.2.0",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "pretty": "^2.0.0",
    "sass-loader": "^8.0.0",
    "webpack": "^4.39.3",
    "webpack-cli": "^3.3.8"
  }

So basically the actual site itself only depends on highlight.js package (only for the CSS theme, the rest is done at compile-time) and normalize.css (to make SCSS/CSS easier, since it doesn't use any CSS frameworks like Bootstrap). All of the other devDependencies are for the compiler, Webpack and to make development of the site easier.

What do you think?


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.