<blockquote>
<p>I personally prefer good ol' Python because I like it and so being much more familiar with it.</p>
</blockquote>
<p>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).</p>
<blockquote>
<p>The only requirement I would like to consider is that the site should work mostly with JavaScript enabled in the browser.</p>
</blockquote>
<p>I assume you mean <strong>without</strong> JavaScript, if so I agree.</p>
<blockquote>
<p>Obviously this is quite hard when using Vue or the like for the frontend</p>
</blockquote>
<p>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.</p>
<hr>
<p>I started working on the frontend a bit. Basically it goes like this:</p>
<ol>
<li>Scan "pages" directory recursively looking for <code>*.md</code> files.</li>
<li>Using <a href="https://www.npmjs.com/package/front-matter" rel="nofollow">front-matter</a> to get meta data for the page (ex. title, description, keywords, output file, etc.).</li>
<li>Convert the markdown body to HTML using <a href="https://github.com/markdown-it/markdown-it">markdown-it</a> along with <a href="https://highlightjs.org/" rel="nofollow">highlight.js</a> for any fenced code blocks.</li>
<li>For each of the pages, process it into a full HTML document using <a href="https://mozilla.github.io/nunjucks/" rel="nofollow">nujucks</a> and a few templates/partials.</li>
<li>Using <a href="https://webpack.js.org/" rel="nofollow">Webpack</a>, the resulting pages, images, SCSS/CSS, JS, etc. are bundled into a production-ready, tiny, optimized, front-end site.</li>
</ol>
<p>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.</p>
<p>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 <code>npm install</code> 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 <code>package.json</code>) look like this:</p>
<div class="highlight highlight-source-json"><pre>{
  <span class="pl-s"><span class="pl-pds">"</span>dependencies<span class="pl-pds">"</span></span>: {
    <span class="pl-s"><span class="pl-pds">"</span>highlight.js<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^9.15.10<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>normalize.css<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^8.0.1<span class="pl-pds">"</span></span>
  },
  <span class="pl-s"><span class="pl-pds">"</span>devDependencies<span class="pl-pds">"</span></span>: {
    <span class="pl-s"><span class="pl-pds">"</span>@babel/core<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^7.6.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>@babel/preset-env<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^7.6.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>babel-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^8.0.6<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>browser-sync<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^2.26.7<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>chokidar<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.0.2<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>css-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.2.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>file-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^4.2.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>front-matter<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.0.2<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>glob<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^7.1.4<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>html-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^0.5.5<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>html-webpack-plugin<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.2.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>markdown-it<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^9.1.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>mini-css-extract-plugin<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^0.8.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>node-sass<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^4.12.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>nodemon<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^1.19.2<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>nunjucks<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.2.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>postcss-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.0.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>postcss-preset-env<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^6.7.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>pretty<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^2.0.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>sass-loader<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^8.0.0<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>webpack<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^4.39.3<span class="pl-pds">"</span></span>,
    <span class="pl-s"><span class="pl-pds">"</span>webpack-cli<span class="pl-pds">"</span></span>: <span class="pl-s"><span class="pl-pds">"</span>^3.3.8<span class="pl-pds">"</span></span>
  }</pre></div>
<p>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 <code>devDependencies</code> are for the compiler, Webpack and to make development of the site easier.</p>
<p>What do you think?</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/www.geany.org/issues/9?email_source=notifications&email_token=AAIOWJ6QW72Z4VKN3RS2ECLQJKCI5A5CNFSM4H2Z4T5KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6SZUPI#issuecomment-530946621">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AAIOWJYUYOGG3W6ALHBHN3LQJKCI5ANCNFSM4H2Z4T5A">mute the thread</a>.<img src="https://github.com/notifications/beacon/AAIOWJ3ARO56Z2AINBY3VADQJKCI5A5CNFSM4H2Z4T5KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6SZUPI.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/geany/www.geany.org/issues/9?email_source=notifications\u0026email_token=AAIOWJ6QW72Z4VKN3RS2ECLQJKCI5A5CNFSM4H2Z4T5KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6SZUPI#issuecomment-530946621",
"url": "https://github.com/geany/www.geany.org/issues/9?email_source=notifications\u0026email_token=AAIOWJ6QW72Z4VKN3RS2ECLQJKCI5A5CNFSM4H2Z4T5KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6SZUPI#issuecomment-530946621",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>