Commits: 7
Import templates and assets from pages
The template needs to be separated into content and structure. For now it's together. But it produces the same output as had-crafted HTML, so it's a start.
index f03ce8a..e60811d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,10 @@
=.devenv
=.direnv
+
+
+## Codeber Pages
+
+# A bare repository for Codeberg Pages
+/pages.git
+# Content generated with Zola, to be pushed to Codeberg Pages
+/publicnew file mode 100644
index 0000000..fddb23d
--- /dev/null
+++ b/static/.domains
@@ -0,0 +1 @@
+escco.eunew file mode 100644
index 0000000..d00fcd0
Binary files /dev/null and b/static/apple-touch-icon.png differnew file mode 100644
index 0000000..a15e21f
--- /dev/null
+++ b/static/esc-logo.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="160"
+ height="160"
+ viewBox="0 0 160 160"
+ version="1.1"
+ id="svg8"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs2" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1">
+ <g
+ id="g169">
+ <rect
+ style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:none;stroke-width:0.816497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;stop-color:#000000;stop-opacity:1"
+ id="rect167"
+ width="160"
+ height="160"
+ x="0"
+ y="0"
+ ry="30"
+ rx="30" />
+ <ellipse
+ style="font-variation-settings:'wght' 800;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:18.5072;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path1"
+ cy="80"
+ cx="80"
+ rx="50"
+ ry="30" />
+ <g
+ id="g146"
+ style="fill:#ffcd00;fill-opacity:1" />
+ <path
+ id="rect14"
+ style="fill:#ffc400;stroke-width:20;paint-order:markers stroke fill"
+ d="M 67.5,10 130,0 92.5,150 30,160 Z" />
+ <path
+ style="font-variation-settings:'wght' 800;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:18.4994;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="ellipse14"
+ d="m 126.98463,69.739397 a 50,30 0 0 1 -17.1267,34.324303 50,30 0 0 1 -59.71586,0 50,30 0 0 1 -17.126701,-34.324304" />
+ <rect
+ style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:none;stroke-width:0.816497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;stop-color:#000000"
+ id="rect167-5"
+ width="160"
+ height="160"
+ x="340"
+ y="1.4210855e-14"
+ ry="30"
+ rx="30" />
+ </g>
+ </g>
+</svg>new file mode 100644
index 0000000..4acfbee
Binary files /dev/null and b/static/favicon-96x96.png differnew file mode 100644
index 0000000..609cf59
Binary files /dev/null and b/static/favicon.ico differnew file mode 100644
index 0000000..07d03f0
--- /dev/null
+++ b/static/favicon.svg
@@ -0,0 +1,37 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="160" height="160"><svg width="160" height="160" viewBox="0 0 160 160" version="1.1" id="SvgjsSvg1210" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs id="SvgjsDefs1209"></defs>
+ <metadata id="SvgjsMetadata1208">
+ <rdf:rdf>
+ <cc:work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type>
+ </cc:work>
+ </rdf:rdf>
+ </metadata>
+ <g id="SvgjsG1207">
+ <g id="SvgjsG1206">
+ <rect style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:none;stroke-width:0.816497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;stop-color:#000000;stop-opacity:1" id="SvgjsRect1205" width="160" height="160" x="0" y="0" ry="30" rx="30"></rect>
+ <ellipse style="font-variation-settings:'wght' 800;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:18.5072;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers stroke fill" id="SvgjsEllipse1204" cy="80" cx="80" rx="50" ry="30"></ellipse>
+ <g id="SvgjsG1203" transform="translate(-324.625)">
+ <path id="SvgjsPath1202" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffc400;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 230,80 h -10 l -13.875,74 h 10 z"></path>
+ <path id="SvgjsPath1201" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffcd00;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 240,80 h -12 l -14.38616,76.7262 h 12 z"></path>
+ <path id="SvgjsPath1200" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffc400;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 270,80 h -10 l -13.875,74 h 10 z"></path>
+ <path id="SvgjsPath1199" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffcd00;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 262,80 h -12 l -14.25,76 h 12 z"></path>
+ <path id="SvgjsPath1198" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffd733;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 252,80 h -14 l -15,80 h 14 z"></path>
+ </g>
+ <g id="SvgjsG1197" transform="translate(-324.625)">
+ <path id="SvgjsPath1196" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffc400;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="M 233.125,10 220,80 h 10 l 13.125,-70 z"></path>
+ <path id="SvgjsPath1195" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffcd00;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="M 242.26725,3.9079967 228,80 h 12 L 254.26725,3.9079967 Z"></path>
+ <path id="SvgjsPath1194" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffc400;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="M 273.125,10 260,80 h 10 l 13.125,-70 z"></path>
+ <path id="SvgjsPath1193" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffcd00;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="M 264.26725,3.9079967 250,80 h 12 L 276.26725,3.9079967 Z"></path>
+ <path id="SvgjsPath1192" style="font-variation-settings:'wght' 800;vector-effect:none;fill:#ffd733;fill-opacity:1;stroke-width:0.09795;paint-order:markers stroke fill;stop-color:#000000" d="m 253,0 -15,80 h 14 L 267,0 Z"></path>
+ </g>
+ <g id="SvgjsG1191" style="fill:#ffcd00;fill-opacity:1"></g>
+ <path id="SvgjsPath1190" style="fill:#ffc400;stroke-width:20;paint-order:markers stroke fill" d="M 67.5,10 130,0 92.5,150 30,160 Z"></path>
+ <path style="font-variation-settings:'wght' 800;fill:none;fill-opacity:1;stroke:#729fcf;stroke-width:18.4994;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers stroke fill" id="SvgjsPath1189" d="m 126.98463,69.739397 a 50,30 0 0 1 -17.1267,34.324303 50,30 0 0 1 -59.71586,0 50,30 0 0 1 -17.126701,-34.324304"></path>
+ <rect style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:none;stroke-width:0.816497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;paint-order:markers stroke fill;stop-color:#000000" id="SvgjsRect1188" width="160" height="160" x="340" y="1.4210855e-14" ry="30" rx="30"></rect>
+ </g>
+ </g>
+</svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
+@media (prefers-color-scheme: dark) { :root { filter: none; } }
+</style></svg>
\ No newline at end of filenew file mode 100644
index 0000000..d430d9c
--- /dev/null
+++ b/static/site.webmanifest
@@ -0,0 +1,21 @@
+{
+ "name": "ESC Collective",
+ "short_name": "ESC Co",
+ "icons": [
+ {
+ "src": "/web-app-manifest-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/web-app-manifest-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "theme_color": "#dbdbdb",
+ "background_color": "#dbdbdb",
+ "display": "standalone"
+}new file mode 100644
index 0000000..2946743
Binary files /dev/null and b/static/social-media-banner.png differnew file mode 100644
index 0000000..b79fc9f
Binary files /dev/null and b/static/web-app-manifest-192x192.png differnew file mode 100644
index 0000000..ae37e05
Binary files /dev/null and b/static/web-app-manifest-512x512.png differnew file mode 100644
index 0000000..a08738f
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,374 @@
+<!doctype html>
+<html class="no-js" lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta http-equiv="x-ua-compatible" content="ie=edge" />
+ <title>ESC</title>
+ <meta name="description" content="" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+ <link rel="shortcut icon" href="/favicon.ico" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
+ <meta name="apple-mobile-web-app-title" content="ESC Co." />
+ <link rel="manifest" href="/site.webmanifest" />
+
+ <meta property="og:title" content="ESC Collective">
+ <meta property="og:type" content="website" />
+ <meta property="og:image" content="https://escco.eu/social-media-banner.png">
+ <meta property="og:url" content="https://escco.eu/">
+ <meta name="twitter:card" content="summary_large_image">
+ <meta property="og:description" content="An international network of IT professionals and entrepreneurs dedicated to promote and support free software and use of services respecting human rights, dignity and privacy.">
+ <meta property="og:site_name" content="ESC Collective">
+ <meta name="twitter:image:alt" content="The ESC Collective logo">
+
+ <style type="text/css">
+ :root {
+ --typing-duration: 6s;
+ --prompts-count: 19;
+ --max-prompt-length: 63;
+ --prompt-height: 1.5em;
+ --prompt-font-size: 2rem;
+ --container-width: 960px;
+ --dark-color: hsl(0, 0%, 10%);
+ --light-color: hsl(0, 0%, 90%);
+ --full-bleed-margin: max(
+ 0px,
+ calc(0.5 * (100vw - var(--container-width)))
+ );
+ }
+
+ body {
+ font-family: sans-serif;
+ padding: 0;
+ margin: auto;
+ background: hsl(0, 0%, 86%);
+ max-width: 960px;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ }
+
+ body > header {
+ font-size: var(--prompt-font-size);
+ align-items: center;
+ display: flex;
+ gap: 1ch;
+ color: var(--dark-color);
+ padding: 3rem 1rem;
+ overflow: hidden;
+ }
+
+ body > main {
+ flex-grow: 1;
+ padding: 0 1rem;
+ }
+
+ body > footer {
+ display: flex;
+ background: var(--dark-color);
+ align-items: center;
+ color: var(--light-color);
+ }
+
+ hgroup h1 {
+ margin: 0;
+ font-weight: 400;
+ }
+
+ hgroup p {
+ margin: 0;
+ font-size: 0.8rem;
+ font-weight: bold;
+ }
+
+ .title {
+ font-family: sans-serif;
+ white-space: nowrap;
+ }
+
+ .title h1 {
+ font-size: 3rem;
+ }
+
+ .icon {
+ height: 1.6em;
+ margin: 0 1ch;
+ }
+
+ #logo {
+ height: 3em;
+ }
+
+ p {
+ hyphens: auto;
+ line-height: 1.6em;
+ }
+
+ .lead {
+ font-size: 150%;
+ }
+
+ .card-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+ grid-auto-rows: 1fr;
+ gap: 2em 2em;
+ margin: 4rem 0;
+
+
+ &> article {
+ background-color: white;
+ border-radius: 8px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ padding: 1em;
+ display: flex;
+ flex-direction: column;
+
+ h2 {
+ font-size: 1em;
+ font-weight: bold;
+ }
+
+ p {
+ margin-top: 1em;
+ font-size: 1rem;
+ flex-grow: 1;
+ text-align: start;
+ text-align: justify;
+ hyphens: auto;
+ }
+ }
+ }
+
+
+ /* UTILITY CLASSES */
+
+ .full-bleed-background {
+ margin: 0 calc(-1 * var(--full-bleed-margin));
+ padding: 3rem calc(1rem + var(--full-bleed-margin));
+ }
+
+ /* PROMPT ANIMATION */
+
+ .prompt {
+ font-family: monospace;
+ font-weight: 700;
+ white-space: nowrap;
+ overflow: hidden;
+ padding: 0;
+ margin: 0;
+ height: var(--prompt-height);
+ /* background: blue; */
+ line-height: var(--prompt-height);
+ }
+
+ .prompt > li {
+ height: var(--prompt-height);
+ animation: calc(var(--typing-duration) * var(--prompts-count)) infinite
+ switch-prompt;
+ animation-timing-function: steps(var(--prompts-count), end);
+ }
+
+ .prompt > li .input {
+ max-width: 0ch;
+ animation: var(--typing-duration) infinite typing;
+ animation-timing-function: steps(var(--max-prompt-length), end);
+ overflow: hidden;
+ display: inline-block;
+ /* background: pink; */
+ }
+
+ .prompt > li:after {
+ content: "█";
+ display: inline;
+ vertical-align: top;
+ animation: 1s infinite blinking;
+ /* color: green; */
+ }
+
+ @keyframes typing {
+ 0% {
+ max-width: 0ch;
+ }
+
+ 60%,
+ 70% {
+ max-width: 63ch;
+ }
+
+ 90%,
+ 100% {
+ max-width: 0ch;
+ }
+ }
+
+ @keyframes switch-prompt {
+ from {
+ transform: translateY(0);
+ }
+
+ to {
+ transform: translateY(
+ calc(-1 * var(--prompts-count) * var(--prompt-height))
+ );
+ }
+ }
+
+ @keyframes blinking {
+ 0%,
+ 20% {
+ opacity: 0;
+ }
+
+ 40%,
+ 60% {
+ opacity: 100%;
+ }
+
+ 80%,
+ 100% {
+ opacity: 0;
+ }
+ }
+
+ @media (max-width: 36rem) {
+ #logo {
+ height: 2em;
+ }
+
+ .title > h1 {
+ font-size: 2rem;
+ }
+
+ .title > p {
+ font-size: 0.6rem;
+ }
+ }
+ </style>
+ </head>
+
+ <body>
+ <!--[if lt IE 8]>
+ <p class="browserupgrade">
+ You are using an <strong>outdated</strong> browser. Please
+ <a href="http://browsehappy.com/">upgrade your browser</a> to improve
+ your experience.
+ </p>
+ <![endif]-->
+
+ <header>
+ <img
+ id="logo"
+ src="esc-logo.svg"
+ alt="The ESC logo with a sky-blue ring and a bright yellow ray passing through it."
+ />
+
+ <hgroup class="title">
+ <h1>esc collective</h1>
+ <p>supporting european digital independence</p>
+ </hgroup>
+ </header>
+ <main>
+ <p class="lead">
+ We are an international network of IT professionals and entrepreneurs
+ dedicated to promote and support free software and use of services
+ respecting human rights, dignity and privacy.
+ </p>
+
+ <section class="card-grid">
+ <article>
+ <h2>Tad Lazurski</h2>
+ <p>
+ AKA Tad Lispy. I'm a software developer, entrepreneur, and an
+ educator based in the Netherlands, founder and facilitator of EscCo.
+ My delight is finding simple, creative and practical solutions to
+ real business problems. Find out more at <a href="https://tad-lispy.com/">tad-lispy.com</a>.
+ </p>
+ </article>
+
+ <article>
+ <h2>Richard Cronan</h2>
+ <p>
+ I’m an experienced consultant and team leader with a background in
+ digital strategy and analytics who translates between technical and
+ non-technical teams to drive successful, people-centred digital
+ solutions. I believe we can do business ethically.
+ </p>
+ </article>
+
+ <article>
+ <h2>Vítor Andrade</h2>
+ <p>
+ I am a devops / SRE / infrastructure engineer happy to help with
+ anything that runs on a Linux system - from a bash script to a
+ multi-continental distributed system. I love solving problems and
+ working with great people. Fun is an essential ingredient.
+ </p>
+ </article>
+
+ <article>
+ <h2>Tibor Eszes</h2>
+ <p>
+ I have a deep experience in cloud, data and systems engineering,
+ software architecture, AI, backend programming (Go and Python),
+ Kubernetes and embedded systems. I'm also interested in electrical
+ and mechanical engineering, genetics and genomics.
+ </p>
+ </article>
+
+ <article>
+ <h2>João Campos</h2>
+ <p>
+ I'm a researcher and a software engineer from Portugal, with a
+ passion for building efficient and scalable systems, specialized in
+ designing reliable infrastructure for distributed systems.
+ </p>
+ </article>
+
+ <article>
+ <h2>Joachim Nuyttens</h2>
+ <p>
+ I'm the COO of
+ <a href="https://trevalco.com/" target="_blank">Trevalco</a>,
+ an SME providing services to the life sciences industry. As a
+ technology, open-source and Linux enthusiast I advise ESC on the
+ development of services of value to small and medium sized companies
+ in EU.
+ </p>
+ </article>
+
+ </section>
+ </main>
+
+ <footer class="full-bleed-background">
+ <img src="favicon.svg" alt="ESC Icon" class="icon" />
+
+ <ul class="prompt">
+ <!-- Remember to adjust the --prompts-count variable -->
+ <li><span class="input">Enterprise Systems Collective</span></li>
+ <li><span class="input">European Systems Collective</span></li>
+ <li><span class="input">Enabling Successful Cooperation</span></li>
+ <li><span class="input">Ethical and Sustainable Computing</span></li>
+ <li><span class="input">European Sovereign Computing</span></li>
+ <li>
+ <span class="input">Empresa de Sistemas para Computadoras</span>
+ </li>
+ <li><span class="input">Extremely Sassy and Classy</span></li>
+ <li><span class="input">Electronic Sustainability Collective</span></li>
+ <li><span class="input">Etiam Secundum Comodum</span></li>
+ <li><span class="input">ESC Sounds Cool</span></li>
+ <li><span class="input">Europe Stands with Canada</span></li>
+ <li><span class="input">Egalitarian Software Community</span></li>
+ <li><span class="input">Einstein Collective</span></li>
+ <li><span class="input">Escape the Scary Clown</span></li>
+ <li><span class="input">European Syndicate for Computing</span></li>
+ <li><span class="input">Égalité, Sécurité, Calcule</span></li>
+ <li><span class="input">European Solutions for Computers</span></li>
+ <li><span class="input">Energetic, Silly Coders</span></li>
+ <li><span class="input">Exuberantis Serendipitatis Conatus</span></li>
+ </ul>
+ </footer>
+ </body>
+</html>new file mode 100644
index 0000000..94d9808
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1 @@
+{\% extends "base.html" %}Write READMEs for this repo and pages (output)
new file mode 100644
index 0000000..b24e8b0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+This repository contains sources to build escco.eu website: content, templates, assets. Use Zola to generate a website from it and push it to
+
+
+# Development
+
+Start by cloning this repository. Then from within clone the pages using the following command:
+
+``` shell
+git --work-tree public clone ssh://git@codeberg.org/escco/pages.git pages.git
+```
+
+This should create two sub-directories:
+
+ - `public` containing the website (index.html and such)
+ - `pages.git` containing git history and configuration
+
+
+> Why? Because Zola will wipe out everything in public/, including .git/ if it were there. So we need to keep git directory outside of public.
+
+This is the directory structure you should have now:
+
+``` shellsession
+escco.eu/
+ ./config.toml
+ ./content <-- markdown files
+ ./flake.lock
+ ./flake.nix
+ ./pages.git <-- git history of public
+ ./public <-- generated web content to be published
+ ./README.md
+ ./sass <-- stylesheets
+ ./static
+ ./templates <-- reusable html templates
+```
+
+`
+
+Use `zola serve` command to preview the website on your local machine.
+
+Use `zola build` to write production ready files to `public/`.
+
+Change directory to `pages.git/`, commit and push to publish the website.
+
+Inside `pages.git` you can use branches and other features of Git. Just remember that `pages.git/` and `public/` are a separate repository from this one. If it feels too complicated, talk to Tad - he will explain or try find a way to make it simpler.new file mode 100644
index 0000000..53b6373
--- /dev/null
+++ b/static/README.md
@@ -0,0 +1 @@
+This repository contains website assets for escco.eu. We now use Zola to generate it from sources in a separate repository at <https://codeberg.org/escco/escco.eu>. If you modify them by hand, your changes will get overwritten. Instead work in the sources repository.Implement a debug view for Tera context
Only visible in development (i.e. with zola serve), at the very bottom
of the page (below the footer). It shows all the variables that can be
used in a template.
index a08738f..0d3a8a7 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -370,5 +370,14 @@
= <li><span class="input">Exuberantis Serendipitatis Conatus</span></li>
= </ul>
= </footer>
+
+ {\% if config.mode == "serve" %}
+ <details style="overflow: scroll">
+ <summary>Rendering context</summary>
+ <pre>
+{\{ __tera_context | escape | safe \}}
+ </pre>
+ </details>
+ {\% endif %}
= </body>
=</html>Get title and description from config
Small steps to separate templates from content.
index 1e07357..badacc2 100644
--- a/config.toml
+++ b/config.toml
@@ -1,6 +1,12 @@
=# The URL the site will be built for
=base_url = "https://escco.eu/"
=
+# The base title - will be concatenated with page titles
+title = "Esc Co."
+
+# Fallback description if no page-specific is provided
+description = "Esc Collective is an international network of IT professionals and entrepreneurs dedicated to promote and support free software and use of services respecting human rights, dignity and privacy."
+
=# Whether to automatically compile all Sass files in the sass directory
=compile_sass = true
=index d430d9c..0a98b5e 100644
--- a/static/site.webmanifest
+++ b/static/site.webmanifest
@@ -1,6 +1,6 @@
={
- "name": "ESC Collective",
- "short_name": "ESC Co",
+ "name": "Esc Collective",
+ "short_name": "Esc Co.",
= "icons": [
= {
= "src": "/web-app-manifest-192x192.png",index 0d3a8a7..4eb0cfc 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,26 +1,51 @@
+{#
+ Templates can set their custom title and description, otherwise here is the
+ fallback logic.
+#}
+
+{\%- if not title -%}
+ {\%- if section and section.title -%}
+ {\%- set title = section.title ~ " - " ~ config.title -%}
+ {\%- elif page and page.title -%}
+ {\%- set title = page.title ~ " - " ~ config.title -%}
+ {\%- else -%}
+ {\%- set title = config.title -%}
+ {\%- endif -%}
+{\%- endif -%}
+
+{\%- if not description -%}
+ {\%- if section and section.description -%}
+ {\%- set description = section.description -%}
+ {\%- elif page and page.description -%}
+ {\%- set description = page.description -%}
+ {\%- else -%}
+ {\%- set description = config.description -%}
+ {\%- endif -%}
+{\%- endif -%}
+
=<!doctype html>
=<html class="no-js" lang="en">
= <head>
= <meta charset="utf-8" />
= <meta http-equiv="x-ua-compatible" content="ie=edge" />
- <title>ESC</title>
- <meta name="description" content="" />
+ <title>{\{ title \}}</title>
+ <meta name="description" content="{\{ description \}}" />
= <meta name="viewport" content="width=device-width, initial-scale=1" />
=
= <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
= <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
= <link rel="shortcut icon" href="/favicon.ico" />
= <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
- <meta name="apple-mobile-web-app-title" content="ESC Co." />
+ <meta name="apple-mobile-web-app-title" content="{\{ config.title \}}" />
= <link rel="manifest" href="/site.webmanifest" />
=
- <meta property="og:title" content="ESC Collective">
+ <meta property="og:title" content="{\{ title \}}">
= <meta property="og:type" content="website" />
= <meta property="og:image" content="https://escco.eu/social-media-banner.png">
= <meta property="og:url" content="https://escco.eu/">
= <meta name="twitter:card" content="summary_large_image">
- <meta property="og:description" content="An international network of IT professionals and entrepreneurs dedicated to promote and support free software and use of services respecting human rights, dignity and privacy.">
- <meta property="og:site_name" content="ESC Collective">
+ <meta property="og:description" content="{\{ description \}}">
+ <meta property="og:site_name" content="{\{ config.title \}}">
= <meta name="twitter:image:alt" content="The ESC Collective logo">
=
= <style type="text/css">
@@ -282,9 +307,10 @@
= <h2>Tad Lazurski</h2>
= <p>
= AKA Tad Lispy. I'm a software developer, entrepreneur, and an
- educator based in the Netherlands, founder and facilitator of EscCo.
- My delight is finding simple, creative and practical solutions to
- real business problems. Find out more at <a href="https://tad-lispy.com/">tad-lispy.com</a>.
+ educator based in the Netherlands, founder and facilitator of Esc
+ Co. My delight is finding simple, creative and practical solutions
+ to real business problems. Find out more at
+ <a href="https://tad-lispy.com/">tad-lispy.com</a>.
= </p>
= </article>
=Write a note about missing public/ and git errors
index b24e8b0..25a36fd 100644
--- a/README.md
+++ b/README.md
@@ -42,3 +42,12 @@ Use `zola build` to write production ready files to `public/`.
=Change directory to `pages.git/`, commit and push to publish the website.
=
=Inside `pages.git` you can use branches and other features of Git. Just remember that `pages.git/` and `public/` are a separate repository from this one. If it feels too complicated, talk to Tad - he will explain or try find a way to make it simpler.
+
+> NOTE: The `zola serve` command, when stopped, will remove `public/`. If you are getting weird errors from git, like
+>
+> ``` shellsession
+> $ git status
+> fatal: this operation must be run in a work tree
+> ```
+>
+> inside pages repository, check if it exists. If not, just run `zola build` again to re-create it.Move the intro text to the index section
new file mode 100644
index 0000000..69b1963
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,4 @@
+---
+---
+
+We are an international network of IT professionals and entrepreneurs dedicated to promote and support free software and use of services respecting human rights, dignity and privacy.index 4eb0cfc..5c4834b 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -131,7 +131,7 @@
= line-height: 1.6em;
= }
=
- .lead {
+ main > p:first-child {
= font-size: 150%;
= }
=
@@ -296,11 +296,8 @@
= </hgroup>
= </header>
= <main>
- <p class="lead">
- We are an international network of IT professionals and entrepreneurs
- dedicated to promote and support free software and use of services
- respecting human rights, dignity and privacy.
- </p>
+
+ {\{ section.content | safe \}}
=
= <section class="card-grid">
= <article>Move the home page template logic to index.html
Previously it was in the base template, which is used for every page and section.
index 5c4834b..8888a53 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -296,73 +296,10 @@
= </hgroup>
= </header>
= <main>
-
- {\{ section.content | safe \}}
-
- <section class="card-grid">
- <article>
- <h2>Tad Lazurski</h2>
- <p>
- AKA Tad Lispy. I'm a software developer, entrepreneur, and an
- educator based in the Netherlands, founder and facilitator of Esc
- Co. My delight is finding simple, creative and practical solutions
- to real business problems. Find out more at
- <a href="https://tad-lispy.com/">tad-lispy.com</a>.
- </p>
- </article>
-
- <article>
- <h2>Richard Cronan</h2>
- <p>
- I’m an experienced consultant and team leader with a background in
- digital strategy and analytics who translates between technical and
- non-technical teams to drive successful, people-centred digital
- solutions. I believe we can do business ethically.
- </p>
- </article>
-
- <article>
- <h2>Vítor Andrade</h2>
- <p>
- I am a devops / SRE / infrastructure engineer happy to help with
- anything that runs on a Linux system - from a bash script to a
- multi-continental distributed system. I love solving problems and
- working with great people. Fun is an essential ingredient.
- </p>
- </article>
-
- <article>
- <h2>Tibor Eszes</h2>
- <p>
- I have a deep experience in cloud, data and systems engineering,
- software architecture, AI, backend programming (Go and Python),
- Kubernetes and embedded systems. I'm also interested in electrical
- and mechanical engineering, genetics and genomics.
- </p>
- </article>
-
- <article>
- <h2>João Campos</h2>
- <p>
- I'm a researcher and a software engineer from Portugal, with a
- passion for building efficient and scalable systems, specialized in
- designing reliable infrastructure for distributed systems.
- </p>
- </article>
-
- <article>
- <h2>Joachim Nuyttens</h2>
- <p>
- I'm the COO of
- <a href="https://trevalco.com/" target="_blank">Trevalco</a>,
- an SME providing services to the life sciences industry. As a
- technology, open-source and Linux enthusiast I advise ESC on the
- development of services of value to small and medium sized companies
- in EU.
- </p>
- </article>
-
- </section>
+ {\% filter indent(prefix=" ") -%}
+ {\%- block main_content -%}
+ {\%- endblock main_content -%}
+ {\%- endfilter %}
= </main>
=
= <footer class="full-bleed-background">index 94d9808..0d97221 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1 +1,70 @@
={\% extends "base.html" %}
+
+{\%- block main_content -%}
+{\{- section.content | safe -\}}
+
+<section class="card-grid">
+ <article>
+ <h2>Tad Lazurski</h2>
+ <p>
+ AKA Tad Lispy. I'm a software developer, entrepreneur, and an
+ educator based in the Netherlands, founder and facilitator of Esc
+ Co. My delight is finding simple, creative and practical solutions
+ to real business problems. Find out more at
+ <a href="https://tad-lispy.com/">tad-lispy.com</a>.
+ </p>
+ </article>
+
+ <article>
+ <h2>Richard Cronan</h2>
+ <p>
+ I’m an experienced consultant and team leader with a background in
+ digital strategy and analytics who translates between technical and
+ non-technical teams to drive successful, people-centred digital
+ solutions. I believe we can do business ethically.
+ </p>
+ </article>
+
+ <article>
+ <h2>Vítor Andrade</h2>
+ <p>
+ I am a devops / SRE / infrastructure engineer happy to help with
+ anything that runs on a Linux system - from a bash script to a
+ multi-continental distributed system. I love solving problems and
+ working with great people. Fun is an essential ingredient.
+ </p>
+ </article>
+
+ <article>
+ <h2>Tibor Eszes</h2>
+ <p>
+ I have a deep experience in cloud, data and systems engineering,
+ software architecture, AI, backend programming (Go and Python),
+ Kubernetes and embedded systems. I'm also interested in electrical
+ and mechanical engineering, genetics and genomics.
+ </p>
+ </article>
+
+ <article>
+ <h2>João Campos</h2>
+ <p>
+ I'm a researcher and a software engineer from Portugal, with a
+ passion for building efficient and scalable systems, specialized in
+ designing reliable infrastructure for distributed systems.
+ </p>
+ </article>
+
+ <article>
+ <h2>Joachim Nuyttens</h2>
+ <p>
+ I'm the COO of
+ <a href="https://trevalco.com/" target="_blank">Trevalco</a>,
+ an SME providing services to the life sciences industry. As a
+ technology, open-source and Linux enthusiast I advise ESC on the
+ development of services of value to small and medium sized companies
+ in EU.
+ </p>
+ </article>
+
+</section>
+{\%- endblock main_content -%}