> 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](https://www.npmjs.com/package/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](https://github.com/markdown-it/markdown-it) along with 
[highlight.js](https://highlightjs.org/) for any fenced code blocks.
  4. For each of the pages, process it into a full HTML document using 
[nujucks](https://mozilla.github.io/nunjucks/) and a few templates/partials.
  5. Using [Webpack](https://webpack.js.org/), 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:

```json
{
  "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 or view it on GitHub:
https://github.com/geany/www.geany.org/issues/9#issuecomment-530946621

Reply via email to