summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xadd_books41
-rwxr-xr-xschemeato146
-rw-r--r--static/css/extra-style.css31
-rw-r--r--static/css/fonts.css23
-rw-r--r--static/css/normalize.css427
-rw-r--r--static/css/publishing.css138
-rw-r--r--static/css/style.css364
-rw-r--r--static/files/publickey.hello@elenq.tech.txt34
-rw-r--r--static/fonts/LatoLatin-Light.eotbin0 -> 67508 bytes
-rw-r--r--static/fonts/LatoLatin-Light.ttfbin0 -> 151856 bytes
-rw-r--r--static/fonts/LatoLatin-Light.woffbin0 -> 72604 bytes
-rw-r--r--static/fonts/LatoLatin-Light.woff2bin0 -> 43468 bytes
-rw-r--r--static/fonts/LatoLatin-Regular.eotbin0 -> 68135 bytes
-rw-r--r--static/fonts/LatoLatin-Regular.ttfbin0 -> 148540 bytes
-rw-r--r--static/fonts/LatoLatin-Regular.woffbin0 -> 72456 bytes
-rw-r--r--static/fonts/LatoLatin-Regular.woff2bin0 -> 43760 bytes
-rw-r--r--static/fonts/OFL.txt94
-rw-r--r--static/img/faces/ekaitz.jpgbin0 -> 11507 bytes
-rw-r--r--templates/_defs.scm99
-rw-r--r--templates/_logo.svg27
-rw-r--r--templates/_structure.scm0
-rw-r--r--templates/en/_books.md13
-rw-r--r--templates/en/_funding.md18
-rw-r--r--templates/en/_philosophy.md7
-rw-r--r--templates/en/_programming_in_python.md10
-rw-r--r--templates/en/_summary.md14
-rw-r--r--templates/en/_whats_informatics.md10
-rw-r--r--templates/en/index.html84
-rw-r--r--templates/es/_books.md14
-rw-r--r--templates/es/_funding.md25
-rw-r--r--templates/es/_philosophy.md9
-rw-r--r--templates/es/_programming_in_python.md12
-rw-r--r--templates/es/_summary.md16
-rw-r--r--templates/es/_whats_informatics.md11
-rw-r--r--templates/es/index.html85
36 files changed, 1754 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1c0f43e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+www
+discarded
diff --git a/add_books b/add_books
new file mode 100755
index 0000000..9c38ec0
--- /dev/null
+++ b/add_books
@@ -0,0 +1,41 @@
+#|
+#!/usr/bin/env sh
+exec chibi-scheme -A `dirname $0` $0 $@
+|#
+
+(import
+ (scheme base)
+ (srfi 1)
+ (chibi)
+ (chibi filesystem)
+ (chibi io)
+ (chibi pathname)
+ (chibi sxml))
+
+(define outdir "www")
+(define bookdir "../books/out/")
+(define valid '("book-simple.pdf" "web.html" "web-simple.html" "cover.png"))
+
+(define (copy-books)
+ "Copy books"
+ (directory-fold-tree
+ bookdir
+ #f
+ #f
+ (lambda (file acc)
+ (let ((output (make-path outdir "books" (path-relative-to file bookdir))))
+ (if (member (path-strip-directory file) valid)
+ (begin
+ (display "Loading: ")
+ (display file)
+ (display " to:")
+ (display output)
+ (newline)
+ (create-directory* (path-directory output))
+ (call-with-output-file output
+ (lambda (x)
+ (send-file file x)))))))
+ #\null))
+
+
+(copy-books)
diff --git a/schemeato b/schemeato
new file mode 100755
index 0000000..c950af0
--- /dev/null
+++ b/schemeato
@@ -0,0 +1,146 @@
+#|
+#!/usr/bin/env sh
+exec chibi-scheme -A `dirname $0` $0 $@
+|#
+(import
+ (scheme base)
+ (srfi 1)
+ (srfi 69)
+ (srfi 115)
+ (chibi)
+ (chibi app)
+ (chibi config)
+ (chibi filesystem)
+ (chibi process)
+ (chibi io)
+ (chibi pathname)
+ (chibi string)
+ (chibi sxml))
+
+; - [X] Read all the locales
+; - [ ] Prepare needed variables per file:
+; - [X] List of languages available
+; - [X] Current language
+; - [ ] Current file
+; - [X] Markdown parser
+; - [X] pandoc
+; - [ ] Check how to do it in scheme
+; - [ ] Some more: check schiumato for reference
+; - [X] `load` or `eval` files in the created environment and extract their
+; exports to dump them to target folder
+; - [ ] deal with input arguments or config, that can be cool for language
+; selection and directory config.
+; - [ ] Move globs to default config stuff.
+; - [ ] Make a `new` command that creates the file structure and the default
+; configuration file
+
+(define (string-startswith? str char)
+ (string-cursor=?
+ (string-cursor-start str)
+ (string-find str (lambda (y) (char=? y char)))))
+
+; Move this to input/config parameters
+(define staticdir "static")
+(define templatedir "templates")
+(define outdir "www")
+
+(define (md-to-html md-text)
+ "Markdown to HTML converter using external Pandoc command"
+ (call-with-process-io "pandoc"
+ (lambda (pid in out err)
+ (display md-text in)
+ (close-output-port in)
+ (let ((res (port->string out)))
+ (waitpid pid 0)
+ res))))
+
+(define (load-templates)
+ "Read templates `templatedir`.
+ Returns them as a alist where keys are the filename of the template relative
+ to the `templatedir` and the values are the contents of the file."
+ (directory-fold-tree
+ templatedir
+ #f
+ #f
+ (lambda (file acc)
+ (if (or (string-startswith? (path-strip-directory file) #\.)
+ (string-startswith? (path-strip-directory file) #\_))
+ acc
+ (cons (list (path-relative-to file templatedir)
+ (call-with-input-file
+ file
+ (lambda (p)
+ (let loop ((x (read p)))
+ (if (eof-object? x)
+ '()
+ (cons x (loop (read p))))))))
+ acc)))
+ '()))
+
+(define (render-template tpl env)
+ "Render one template"
+ (let* ((code (let ((codelist (cdr tpl)))
+ (reduce (lambda (x acc)
+ (append x acc))
+ '()
+ codelist)))
+ (fullcode (append env code)))
+ (eval fullcode)))
+
+(define (copy-static)
+ "Copy static directory in output directory"
+ (directory-fold-tree
+ staticdir
+ #f
+ #f
+ (lambda (file acc)
+ (let ((output (make-path outdir
+ (make-path "static"
+ (path-relative-to file staticdir)))))
+ (create-directory* (path-directory output))
+ (call-with-output-file output
+ (lambda (x)
+ (send-file file x)))))
+ #\null))
+
+(define (include-template name)
+ ; TODO make template loader
+ #f)
+
+(define (create-output cfg spec . args)
+ "Dumps the templates in the output directory"
+ (let ((templates (load-templates)))
+ (or (create-directory* outdir) (error "Unable to create output directory"))
+ (display "Copying static files...")
+ (newline)
+ (copy-static)
+ (let* ((env `(let ((include-template ,include-template)))))
+ (for-each
+ (lambda (x)
+ (let ((outfile (make-path outdir (car x))))
+ (or (create-directory* (path-directory outfile))
+ (error "Unable to create directory"))
+
+ (display "Rendering template ")
+ (display (car x))
+ (display " to ")
+ (display outfile)
+
+ (call-with-output-file
+ outfile
+ (lambda (f)
+ (display (render-template x env) f)))
+
+ (display "\t[Done]")
+ (newline)))
+ templates))))
+
+
+(run-application
+ `(schemeato
+ "Schemeato: an easy to translate static site generator"
+ (or
+ (create "Create output from current folder" ,create-output)
+ (help "Show this help" (,app-help-command))))
+ (command-line)
+ #;(conf-load "conf.scm"))
diff --git a/static/css/extra-style.css b/static/css/extra-style.css
new file mode 100644
index 0000000..c7a7f06
--- /dev/null
+++ b/static/css/extra-style.css
@@ -0,0 +1,31 @@
+.summary{
+ font-size: 115%;
+ padding-top: 2rem;
+}
+
+#hamburger, #hamburger-label{
+ display: none;
+}
+
+#hamburger-label{
+ font-size: 180%;
+ cursor: pointer;
+}
+
+.active{
+ text-decoration: underline;
+}
+
+.mainheader{position: relative;}
+
+@media (max-width: 800px){
+ #hamburger-label {
+ display: inline-block;
+ }
+ .navbar-contents {
+ display: none;
+ }
+ input#hamburger:checked ~ .navbar-contents {
+ display: block;
+ }
+}
diff --git a/static/css/fonts.css b/static/css/fonts.css
new file mode 100644
index 0000000..ea9b2c9
--- /dev/null
+++ b/static/css/fonts.css
@@ -0,0 +1,23 @@
+/* Webfont: LatoLatin-Regular */@font-face {
+ font-family: 'LatoLatinWeb';
+ src: url('/static/fonts/LatoLatin-Regular.eot'); /* IE9 Compat Modes */
+ src: url('/static/fonts/LatoLatin-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/static/fonts/LatoLatin-Regular.woff2') format('woff2'), /* Modern Browsers */
+ url('/static/fonts/LatoLatin-Regular.woff') format('woff'), /* Modern Browsers */
+ url('/static/fonts/LatoLatin-Regular.ttf') format('truetype');
+ font-style: normal;
+ font-weight: normal;
+ text-rendering: optimizeLegibility;
+}
+
+/* Webfont: LatoLatin-Light */@font-face {
+ font-family: 'LatoLatinLightWeb';
+ src: url('/static/fonts/LatoLatin-Light.eot'); /* IE9 Compat Modes */
+ src: url('/static/fonts/LatoLatin-Light.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/static/fonts/LatoLatin-Light.woff2') format('woff2'), /* Modern Browsers */
+ url('/static/fonts/LatoLatin-Light.woff') format('woff'), /* Modern Browsers */
+ url('/static/fonts/LatoLatin-Light.ttf') format('truetype');
+ font-style: normal;
+ font-weight: normal;
+ text-rendering: optimizeLegibility;
+}
diff --git a/static/css/normalize.css b/static/css/normalize.css
new file mode 100644
index 0000000..81c6f31
--- /dev/null
+++ b/static/css/normalize.css
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+} \ No newline at end of file
diff --git a/static/css/publishing.css b/static/css/publishing.css
new file mode 100644
index 0000000..50f159b
--- /dev/null
+++ b/static/css/publishing.css
@@ -0,0 +1,138 @@
+.book-container{
+ --book-width: 176px;
+ --book-height: 250px;
+ --book-thickness: 13px;
+ padding-top: calc(0.3 * var(--book-width));
+ padding-bottom: calc(0.3 * var(--book-width));
+ padding-left: calc(0.3 * var(--book-width));
+ padding-right: calc(0.3 * var(--book-width));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transform-style: preserve-3d;
+ perspective: 1000px;
+}
+
+.book {
+ --book-initial-x-rotation: 10deg;
+ --book-initial-y-rotation: 30deg;
+ --book-initial-z-rotation: 0deg;
+ --book-pages-color: white;
+ --book-cover: "";
+}
+
+.type1{
+ --book-initial-x-rotation: 10deg;
+ --book-initial-y-rotation: 10deg;
+ --book-initial-z-rotation: 0deg;
+}
+.type2{
+ --book-initial-x-rotation: -10deg;
+ --book-initial-y-rotation: -10deg;
+ --book-initial-z-rotation: 2deg;
+}
+
+.book{
+ position: relative;
+ width: var(--book-width);
+ height: var(--book-height);
+ transform: rotateX(var(--book-initial-x-rotation))
+ rotateY(var(--book-initial-y-rotation))
+ rotateZ(var(--book-initial-z-rotation));
+ transform-style: preserve-3d;
+}
+
+.book > ._side{
+ border: 1px solid darkgrey;
+}
+
+.book > ._side:nth-of-type(1){
+ width: var(--book-width);
+ height: var(--book-height);
+ position: absolute;
+ transform: translateZ(calc(var(--book-thickness) * 0.5));
+
+ background: var(--book-cover) no-repeat center right scroll;
+ background-size: cover;
+}
+
+.book > ._side:nth-of-type(2){
+ width: var(--book-width);
+ height: var(--book-height);
+ position: absolute;
+
+ background-color: white;
+ background: var(--book-cover) no-repeat center left scroll;
+ background-size: cover;
+ transform: rotateY(180deg) translateZ(calc(var(--book-thickness) * 0.5));
+}
+
+.book > ._side:nth-of-type(3){
+ background-color: var(--book-pages-color);
+ width: var(--book-thickness);
+ height: var(--book-height);
+ position: absolute;
+ transform:
+ translateX(var(--book-width))
+ rotateY(90deg)
+ translateZ(calc(var(--book-thickness) * -0.5));
+}
+
+.book > ._side:nth-of-type(4){
+ background-color: var(--book-pages-color);
+ height: var(--book-thickness);
+ width: var(--book-width);
+ position: absolute;
+ transform:
+ rotateX(90deg)
+ translateZ(calc(var(--book-thickness) * 0.5));
+}
+
+.book > ._side:nth-of-type(5){
+ background-color: var(--book-pages-color);
+ height: var(--book-thickness);
+ width: var(--book-width);
+ position: absolute;
+ transform:
+ rotateX(270deg)
+ translateZ(calc(var(--book-height) + var(--book-thickness) * -0.5));
+}
+
+.book > ._side:nth-of-type(6){
+ background: var(--book-cover) no-repeat center center scroll;
+ width: var(--book-thickness);
+ height: var(--book-height);
+ background-size: cover;
+ position: absolute;
+ transform:
+ rotateY(270deg)
+ translateZ(calc(var(--book-thickness) * 0.5));
+}
+
+
+/*ANIMATION*/
+@keyframes rotate {
+ from {
+ transform: rotateX(var(--book-initial-x-rotation))
+ rotateY(var(--book-initial-y-rotation))
+ rotateZ(var(--book-initial-z-rotation));
+ }
+
+ to {
+ transform: rotateX(var(--book-initial-x-rotation))
+ rotateY(calc(var(--book-initial-y-rotation) + 360deg))
+ rotateZ(var(--book-initial-z-rotation));
+ }
+}
+
+.book-container:hover >.book{
+ animation: rotate 15s infinite linear;
+ transition: none;
+}
+
+
+.flex-around-wrap{
+ display: flex;
+ justify-content: space-around;
+ flex-wrap: wrap;
+}
diff --git a/static/css/style.css b/static/css/style.css
new file mode 100644
index 0000000..29cede2
--- /dev/null
+++ b/static/css/style.css
@@ -0,0 +1,364 @@
+html{
+ font-size: 80%;
+}
+
+/* Typography*/
+body{
+ font-family: "LatoLatinWeb", Helvetica, Arial, sans-serif;
+ line-height: 1.4;
+ color: #222;
+ background-color: #fff;
+ font-size: 1.5em;
+}
+p {
+ text-align: justify;
+}
+q, blockquote{
+ font-style: italic;
+}
+h1, h2, h3, h4, h5, h6 {
+ text-decoration: none;
+ margin-top: 2ex;
+ margin-bottom: 0;
+ font-weight: 300; }
+h1 {
+ font-size: 5.5rem;
+ line-height: 1.2;
+ text-align: center;
+ margin-bottom: 4rem;
+ margin-top: 0;
+ font-family: "LatoLatinLightWeb", Helvetica, Arial, sans-serif;
+}
+h1,h2,h3 { letter-spacing: -.1rem; }
+h4 { letter-spacing: -.08rem;}
+h5 { letter-spacing: -.05rem;}
+h6 { letter-spacing: 0}
+
+h2 { font-size: 2.8rem; }
+h3 { font-size: 2.3rem; }
+h4 { font-size: 2.1rem; }
+h5 { font-size: 1.8rem; }
+h6 { font-size: 1.5rem; }
+
+@media (min-width: 550px) {
+ h1 { font-size: 8.0rem; }
+ h2 { font-size: 3.2rem; }
+ h3 { font-size: 2.7rem; }
+ h4 { font-size: 2.2rem; }
+ h5 { font-size: 2.0rem; }
+ h6 { font-size: 1.7rem; }
+}
+a{
+ color: #1EAEDB;
+}
+hr{
+ border: 0
+}
+pre > code {
+ overflow: auto;
+ border: none;
+ border-radius: 0;
+}
+
+
+
+/* Utils */
+.text-center{
+ text-align: center;
+}
+.text-right{
+ text-align: right;
+}
+.text-justify{
+ text-align: justify;
+}
+.text-nodeco{
+ text-decoration: none;
+}
+.text-nodeco-black{
+ text-decoration: none;
+ color: #222;
+}
+.only-reader{
+ font-size: 0;
+}
+
+
+/* Sections*/
+section{
+ padding-bottom: 2rem;
+ margin-bottom: 0;
+}
+
+
+/* Images */
+img {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 3ex;
+ margin-bottom: 3ex;
+}
+img.round{
+ border-radius: 50%;
+}
+
+
+/* Footer */
+.bar-bottom {
+ border-top: 1px solid #eee;
+ position: relative;
+ width: 100%;
+ margin: 0 auto;
+ margin-top: 10ex;
+ padding: 1rem 0;
+ box-sizing: border-box;
+
+ font-size: 70%;
+}
+
+
+/* Container */
+.container {
+ max-width: 900px;
+ margin: auto;
+ width: 80%;
+}
+@media(max-width: 550px){
+ .container{
+ padding-left: 20px;
+ padding-right: 20px;
+ }
+}
+
+
+/* Navbar */
+.mainheader{
+ top: 0;
+ display: block;
+ width: 100%;
+ background: #fff;
+ z-index: 99;
+ border-bottom: 1px solid #eee;
+ margin-bottom: 6.5rem;
+}
+@media(max-width: 550px){
+ .mainheader{
+ margin-bottom: 4rem;
+ }
+}
+.navbar {
+ width: 100%;
+ }
+.navbar-link,
+.navbar-control{
+ text-transform: uppercase;
+ font-size: 0.9rem;
+ font-weight: 600;
+ letter-spacing: .1rem;
+ text-decoration: none;
+ line-height: 6rem;
+ display: inline-block;
+ color: #222;
+ }
+.navbar-right,
+.navbar-left{
+ display: inline;
+}
+.navbar-separator{
+ margin: 0 auto;
+}
+/* Large devices everything inline and the header floating */
+@media (min-width: 801px) {
+ .mainheader{position: sticky;}
+ .link-right {
+ margin-left: 15px;
+ margin-right: 0px;
+ }
+ .link-left{
+ margin-right: 25px;
+ }
+ .nav-right{
+ text-align: right;
+ }
+ .navbar-right{
+ float: right;
+ }
+ .navbar-separator{
+ display: none;
+ }
+
+}
+/* Smaller devices leave the header at the top of the page and make it more
+ * vertical */
+@media (max-width: 800px){
+ /* Main navbar toggle */
+ /* TODO: BURGER? */
+ .navbar-right,
+ .navbar-left{
+ width: 100%;
+ min-width: 100%;
+ display: inline-flex;
+ flex: 1;
+ justify-content: space-around;
+ flex-flow: row;
+ }
+ .navbar-left{
+ flex-flow: row wrap;
+ }
+
+ .navbar-left .navbar-link{
+ margin-left: 3ex;
+ margin-right: 3ex;
+ }
+
+ .navbar-right .navbar-link{
+ margin: auto;
+ line-height: 5rem;
+ }
+}
+
+
+/* Title page */
+.title-image {
+ width: 90%;
+}
+.title-image path{
+ fill: #222;
+}
+@media (min-width: 550px){
+ .title-image { width: 60%; }
+}
+
+
+/* Cards: Image | text */
+.card-picture *{
+ height: auto;
+ width: 100%;
+}
+.card-picture{
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 2ex;
+ margin-bottom: 2ex;
+ height: auto;
+ width: 150px;
+ min-width: 150px;
+}
+.card-picture-right{
+ order 2;
+}
+.card-data{
+ order: 1;
+}
+@media (min-width: 800px) { /*more than a tablet*/
+ .card{
+ margin-top: 1ex;
+ margin-bottom: 1ex;
+
+ width: 100%;
+ min-width: 100%;
+ display: inline-flex;
+ flex: 1;
+ -webkit-flex: 1; /* Safari 6.1+ */
+ -ms-flex: 1; /* IE 10 */
+ justify-content: space-around;
+ align-items: center;
+ }
+
+ .card-picture{
+ margin: 2ex;
+ margin-right: 4ex;
+ order: 0;
+ }
+ .card-picture-right{
+ margin: 2ex;
+ margin-left: 4ex;
+ order: 2;
+ }
+
+ .card-data{
+ flex-grow: 2;
+ flex-shrink: 2;
+ order: 1;
+ }
+}
+
+/* Anchors */
+a.anchor{
+ visibility: hidden;
+ text-decoration: none;
+ font-size: 0.8em;
+}
+h1:hover > a.anchor,
+h2:hover > a.anchor,
+h3:hover > a.anchor,
+h4:hover > a.anchor,
+h5:hover > a.anchor,
+h6:hover > a.anchor{
+ visibility: visible;
+}
+
+:root{
+ --bg-color: #FFF;
+ --tx-color: #222;
+ --link-color: #1EAEDB;
+ --border-color:#EEE;
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --bg-color: #2F2F2F;
+ --tx-color: #FFF;
+ --link-color: #1EAEDB;
+ --border-color:#4A4A4A;
+ }
+}
+
+/* Overwrite colors to vars if supported */
+body{
+ color: var(--tx-color);
+ background-color: var(--bg-color);
+}
+.text-nodeco-black, .navbar-link{
+ color: var(--tx-color);
+}
+.title-image path{
+ fill: var(--tx-color);
+}
+.mainheader {
+ background-color: var(--bg-color);
+ border-color: var(--border-color);
+}
+a {
+ color: var(--link-color);
+}
+.bar-bottom {
+ border-color: var(--border-color);
+}
+
+
+
+.flex-cols{
+ width: 90%;
+}
+.col{
+ max-width: 100%;
+}
+@media (min-width: 550px) { /*more than a phone*/
+ .flex-cols{
+ display: inline-flex;
+ flex: 1;
+ align-items: center;
+ justify-content: space-around;
+ width: 100%;
+ min-width: 100%;
+ }
+ .col{
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 100px;
+ margin-left: 5%;
+ margin-right: 5%;
+ }
+
+}
diff --git a/static/files/publickey.hello@elenq.tech.txt b/static/files/publickey.hello@elenq.tech.txt
new file mode 100644
index 0000000..ddb4ca3
--- /dev/null
+++ b/static/files/publickey.hello@elenq.tech.txt
@@ -0,0 +1,34 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: OpenPGP.js v2.3.8
+Comment: http://openpgpjs.org
+
+xsBNBFlKNu4BCADnO0dweMwiVAAWmI51s7SXtCAgxEUdPMlzPADmAsz31lLc
+SIcsXW1lPfA0GDwvn4XvDjxW4RB/HKKpg04IbKFxFrfJ/1Vu0tpGe9H252JM
+nWBexc6oSCSKpuhG7/nLRO140v0xmdU+CZj3XPSLO73rIgYzSPV//j00kXGz
+z1rVLKv+3FlTSMJV411qQpP9P/Rwdad/txekXOURnvFLhDC0xJBIq4KMPolh
+/u0TkkYtPmRmn9U7YFeraiublSEQEGmX5rxuzJ+A6P+kVjWeOQxJuigiKKWR
+4E/gd2rvn8wSxafnbzS0uA1iQRgF0/It5pG1XeRUrJLJTQ2P0kfdQrEjABEB
+AAHNI2hlbGxvQGVsZW5xLnRlY2ggPGhlbGxvQGVsZW5xLnRlY2g+wsB1BBAB
+CAApBQJZSjbuBgsJBwgDAgkQQ7fiWdQmzT4EFQgKAgMWAgECGQECGwMCHgEA
+AGuWCACYylinKBY/sHtqqbqbw57A4QcP/E5LCDjIJyLB5LV5HFEaCqjPqpGP
+2F05S8to9BarFPMPKtvZbWy8u3wR9VHhVLkuLYGO15eNPgboylU/n1DEDAbt
+iTPv1wd4OStulIAU79LZj6RNkYAGYaLGetYMcWTXzJUN2WbER6IhR8uKKlb4
+480qUyjEN4uznO72WVZRnFRXCekk+q0yuURNQy4Z2IMKriALM0Ijj/VAsnyK
+i4KQCukFylcnG33rD7Dq9qPDAmHC0imWRXFDMIy/g7pZP6XtjwMp4MlpZ2oS
+w+JJlYwTgHd0nVVQ8TE6FWPN/mDZa6U4VWhlrOCTcecPP6sEzsBNBFlKNu4B
+CADdCy6ugZzxwQctqGzy0YMl0Uk4WQLrqQ4ZkvW0H5yhxnBzSC1YaZ+WQOLL
+bdParzS/0LRMa0WQikqLsC8uRQxXgWCBzjtPSmphFmOfAW9n8Fc5Ap8PAxjv
+M5Y+znOnx8ecZHcYx2l0BNV+9uWWRDx0t+gtNTeLlvYuCUF40WKG3USGZ1U8
++O3jhjbEII0sBdz45el516nEp0Uzc/usFQ3dJNPZ6ZK6M+YA7o/EfGfwVKVH
+A5L0lP26utDpBmmWoTfLVUFZ1lxrZCNJ9M4JGBJ0/xDmZw1GOCHeacF3ZuWP
+7JLcsSyukGKUzn6Sm9wwy73rAV8lhddd6EdGwgWWIsTbABEBAAHCwF8EGAEI
+ABMFAllKNu4JEEO34lnUJs0+AhsMAAA1lAgAlb0C/6Qev//zdnv1CUi+zotZ
+vNQQOSK7XDAfQlpMhwwuwrA5wR8Y43e1tEVutUaEE3wahW8smj8cb/C7SVBR
+5JvAQyqTESqCbGcrGOgUa8L2505pnEb6wrBmPfZ1STbQwK+Xw/meM3eVAzuq
+m2IgwaRbuLg3bJh8L45XVkDyzYJJDnugqfmnnUTy7jTHXLRNLatAdQdcKwbY
+9fSyzuU6BQn1vSdwZGDvkMC2UZ0ygBvyFDir9WmQbhTKNqDGfsz/XndGhujW
+IdBWSdVYr1/pYJ2/3M/6VS2rCzujpoip6dd96bSjhCQ3R6se/Z8hWxMqZyZD
+LCAjdtBXsrAnapFj7Q==
+=Yvv0
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/static/fonts/LatoLatin-Light.eot b/static/fonts/LatoLatin-Light.eot
new file mode 100644
index 0000000..865537d
--- /dev/null
+++ b/static/fonts/LatoLatin-Light.eot
Binary files differ
diff --git a/static/fonts/LatoLatin-Light.ttf b/static/fonts/LatoLatin-Light.ttf
new file mode 100644
index 0000000..6af1b85
--- /dev/null
+++ b/static/fonts/LatoLatin-Light.ttf
Binary files differ
diff --git a/static/fonts/LatoLatin-Light.woff b/static/fonts/LatoLatin-Light.woff
new file mode 100644
index 0000000..e7d4278
--- /dev/null
+++ b/static/fonts/LatoLatin-Light.woff
Binary files differ
diff --git a/static/fonts/LatoLatin-Light.woff2 b/static/fonts/LatoLatin-Light.woff2
new file mode 100644
index 0000000..b6d0288
--- /dev/null
+++ b/static/fonts/LatoLatin-Light.woff2
Binary files differ
diff --git a/static/fonts/LatoLatin-Regular.eot b/static/fonts/LatoLatin-Regular.eot
new file mode 100644
index 0000000..96a9035
--- /dev/null
+++ b/static/fonts/LatoLatin-Regular.eot
Binary files differ
diff --git a/static/fonts/LatoLatin-Regular.ttf b/static/fonts/LatoLatin-Regular.ttf
new file mode 100644
index 0000000..bcc5778
--- /dev/null
+++ b/static/fonts/LatoLatin-Regular.ttf
Binary files differ
diff --git a/static/fonts/LatoLatin-Regular.woff b/static/fonts/LatoLatin-Regular.woff
new file mode 100644
index 0000000..bf73a6d
--- /dev/null
+++ b/static/fonts/LatoLatin-Regular.woff
Binary files differ
diff --git a/static/fonts/LatoLatin-Regular.woff2 b/static/fonts/LatoLatin-Regular.woff2
new file mode 100644
index 0000000..a4d084b
--- /dev/null
+++ b/static/fonts/LatoLatin-Regular.woff2
Binary files differ
diff --git a/static/fonts/OFL.txt b/static/fonts/OFL.txt
new file mode 100644
index 0000000..6d2c416
--- /dev/null
+++ b/static/fonts/OFL.txt
@@ -0,0 +1,94 @@
+Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com),
+with Reserved Font Name Lato.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/static/img/faces/ekaitz.jpg b/static/img/faces/ekaitz.jpg
new file mode 100644
index 0000000..b73778f
--- /dev/null
+++ b/static/img/faces/ekaitz.jpg
Binary files differ
diff --git a/templates/_defs.scm b/templates/_defs.scm
new file mode 100644
index 0000000..ed145b4
--- /dev/null
+++ b/templates/_defs.scm
@@ -0,0 +1,99 @@
+; Global to the file, use (set! lang "lang") to configure in languages
+(define lang "en")
+
+; UTILS -----------------------------------------------------------------------
+(define (anchored-h level title id)
+ `(,(string->symbol (string-append "h" (number->string level)))
+ (@ (id ,id))
+ ,title
+ (a (@ (href ,(string-append "#" id)) (class "anchor")) " ¶" )))
+
+
+(define (absurl-to-lang url)
+ (string-append "/" lang url))
+
+(define (header-link lr text title link active)
+ `(a (@ (class ,(string-append (if active "active " " ")
+ "navbar-link link-" lr))
+ (href ,link)
+ (title ,title))
+ ,text))
+
+(define (style href)
+ "Make <link> tags to add CSS"
+ `(link (@ (rel "stylesheet")
+ (href ,href))))
+
+(define (md markdown-text)
+ `(@raw ,(md-to-html markdown-text)))
+
+(define (logo-title) `(h1 (@raw ,(file->string "templates/_logo.svg"))))
+
+; BASE ------------------------------------------------------------------------
+(define (base title body)
+ `(html
+ (@ (lang ,lang))
+ (head
+ (meta (@ (charset "utf-8")))
+ (meta (@ (name "viewport")
+ (content "width=device-width, initial-scale=1")))
+ ,(style "/static/css/normalize.css")
+ ,(style "/static/css/style.css")
+ ,(style "/static/css/fonts.css")
+ ,(style "/static/css/extra-style.css")
+ ,(style "/static/css/publishing.css")
+ (title ,title))
+ (body ,body)))
+
+
+; HEADER-----------------------------------------------------------------------
+(define (nav-link l)
+ (header-link "left"
+ (cdr (assq 'name l))
+ (cdr (assq 'title l))
+ (cdr (assq 'absurl l))
+ (or (assq 'active l) #f)))
+
+(define (lang-link l)
+ (header-link "right"
+ (cdr (assq 'name l))
+ (cdr (assq 'title l))
+ (cdr (assq 'absurl l))
+ (or (assq 'active l) #f)))
+
+(define (header links langs)
+ `(header
+ (@ (class mainheader))
+ (div (@ (class container))
+ (nav (@ (class navbar))
+ (label (@ (id hamburger-label)
+ (for "hamburger")
+ (class "navbar-link link-left")) (@raw "&#9776;"))
+ (input (@ (id "hamburger") (type checkbox)))
+
+ (div (@ (class navbar-contents))
+ (div (@ (class navbar-left))
+ ,(map nav-link links))
+
+ (div (@ (class "navbar-right"))
+ ,(map lang-link langs)))))))
+
+
+(define (book thickness cover-url extra-classes)
+ `(div (@ (class "book-container")
+ (tabindex "0"))
+ (div (@ (class ,(string-join (append '("book") extra-classes) " "))
+ (style ,(string-append
+ "--book-cover: url(" cover-url ");"
+ "--book-thickness: " thickness ";")))
+ (div (@ (class "_side")))
+ (div (@ (class "_side")))
+ (div (@ (class "_side")))
+ (div (@ (class "_side")))
+ (div (@ (class "_side")))
+ (div (@ (class "_side"))))))
+
+(define (link-with-title title url)
+ `(a (@ (title ,title)
+ (href ,url))
+ ,title))
diff --git a/templates/_logo.svg b/templates/_logo.svg
new file mode 100644
index 0000000..b4bb2f3
--- /dev/null
+++ b/templates/_logo.svg
@@ -0,0 +1,27 @@
+<svg class="title-image" width="300" height="200" version="1.1" viewBox="0 0 177.16 88.583" xmlns="http://www.w3.org/2000/svg">
+ <g transform="translate(12.992 -974.94)">
+ <g transform="translate(-161.99,807.24)">
+ <g transform="translate(.34251 84.258)" font-size="37.5px" letter-spacing="0px" stroke-width=".9375" word-spacing="0px">
+ <g aria-label="ElenQ">
+ <path d="m163.2 137.69h27.525v-2.7h-24.3v-17.25h20.55v-2.7h-20.55v-15.9h24.3v-2.7h-27.525z"/>
+ <path d="m195.82 137.69h3.225v-41.25h-3.225z"/>
+ <path d="m204.3 122.92c0 11.25 8.7 15.6 16.5 15.6 11.85 0 15.3-4.725 16.05-9.225h-3.6c-0.75 1.875-2.175 6-12.45 6-5.925 0-12.45-3.6-12.975-11.025h29.025v-3.225c-0.75-10.425-6.45-15.75-16.05-15.75s-16.5 7.2-16.5 17.625zm3.675-1.875c1.05-7.875 5.175-12.6 13.125-12.6s11.4 5.1 12.15 12.6z"/>
+ <path d="m242.25 137.69h3.225v-25.875c1.575-2.025 5.025-3.225 10.2-3.225 3.6 0 8.1 1.35 8.1 7.65v21.45h3.45v-21.45c0-8.25-6.15-10.95-11.55-10.95-5.55 0-9.075 1.35-10.2 4.05v-3.225h-3.225z"/>
+ <path d="m272.25 117.07c0 11.175 9.3 21.45 20.625 21.45 4.8 0 9.15-1.875 12.675-4.8l4.8 3.975h3.75l-6.6-5.775c3.675-3.975 6-9.3 6-14.85 0-11.1-9.225-21.375-20.625-21.375s-20.625 10.2-20.625 21.375zm3.3 0c0-9.15 7.575-18.3 17.325-18.3s17.325 9.15 17.325 18.3-7.575 18.375-17.325 18.375-17.325-9.225-17.325-18.375z"/>
+ </g>
+ <g aria-label="PUBLISHING">
+ <path d="m184.99 159.61h1.045v-6.1038h2.7788c4.9875 0 4.7975-3.1112 4.7975-3.5862 0.0237-2.09-1.425-3.3725-3.8-3.3725h-4.8212zm1.045-6.9825v-5.225h3.4912c1.7812 0 3.1112 0.9975 3.1112 2.5175 0 1.7338-1.33 2.7075-3.1112 2.7075z"/>
+ <path d="m196.58 155.41c0 3.0162 1.52 4.465 4.5125 4.465s4.4888-1.4488 4.4888-4.465v-8.8588h-1.0212v8.6212c0 2.3988-1.045 3.6812-3.4675 3.6812s-3.4912-1.3062-3.4912-3.6812v-8.6212h-1.0212z"/>
+ <path d="m208.77 159.61h4.8212c2.375 0 3.8-1.2825 3.8-3.3725 0-1.1875-0.59375-2.85-2.4938-3.3012 0.6175-0.16625 1.7812-1.0212 1.7812-3.23 0-1.9475-1.425-3.1588-3.8475-3.1588h-4.0612zm1.045-0.855v-5.225h3.4912c1.7812 0 3.1112 0.97375 3.1112 2.7075 0 1.52-1.33 2.5175-3.1112 2.5175zm0-6.1038v-5.225h2.7788c1.7338 0 3.1112 0.97375 3.1112 2.28 0 2.0188-1.4012 2.945-3.1112 2.945z"/>
+ <path d="m220.36 159.61h7.9088v-1.0212h-6.8875v-12.041h-1.0212z"/>
+ <path d="m231.29 159.61h1.0212v-13.062h-1.0212z"/>
+ <path d="m235.31 149.85c0 2.47 1.9712 2.8975 4.3225 3.3725 1.5912 0.3325 3.99 0.57 3.99 2.945 0 1.805-1.9475 2.6838-3.4438 2.6838-2.4462 0-3.5862-0.7125-4.1088-0.97375l-0.78375 0.92625c0.95 0.59375 1.9712 1.0688 4.8925 1.0688 2.3512 0 4.56-1.9 4.56-3.705 0-2.9212-1.995-3.42-4.7025-3.9662-1.1638-0.26125-3.61-0.38-3.61-2.3512 0-1.6862 1.3538-2.5412 3.0162-2.5175 2.4462 0 3.3488 0.57 3.8712 0.83125l0.78375-0.78375c-0.95-0.59375-1.7338-1.0688-4.655-1.0688-2.4938 0-4.1325 1.7812-4.1325 3.5388z"/>
+ <path d="m247.79 159.61h1.0212v-6.3175h6.5075v6.3175h1.0212v-13.062h-1.0212v5.89h-6.5075v-5.89h-1.0212z"/>
+ <path d="m259.52 159.61h1.0212v-13.062h-1.0212z"/>
+ <path d="m263.73 159.61h1.045v-11.115l7.1962 11.115h1.0212v-13.062h-1.0212v11.234l-7.1962-11.234h-1.045z"/>
+ <path d="m276.06 153.08c0 4.275 1.9712 6.7925 5.6288 6.7925 1.6388 0 3.0875-0.5225 4.0138-1.3775v1.1162h1.0212v-6.4125h-5.225v1.0212h4.2038v2.0188c0 1.3062-1.5675 2.6125-4.0138 2.6125-3.1588 0-4.5125-3.0638-4.5125-5.7712 0-3.1112 1.8288-5.7712 4.6075-5.7712 2.4225 0 3.9188 1.2588 3.9188 2.6838h1.0212c0-2.3512-2.2325-3.6812-5.035-3.6812-3.895 0-5.6288 3.4675-5.6288 6.7688z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/templates/_structure.scm b/templates/_structure.scm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/templates/_structure.scm
diff --git a/templates/en/_books.md b/templates/en/_books.md
new file mode 100644
index 0000000..6df057b
--- /dev/null
+++ b/templates/en/_books.md
@@ -0,0 +1,13 @@
+All the books are published under the terms of the
+[CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/) license and have
+been published in various formats: paperback, web and an easy to print PDF
+file, with the goal of making them available for anyone.
+
+Digital versions of the books are available in the list below while the
+paperback edition can be obtained [contacting
+us](https://elenq.tech/en/#contact).
+
+For those who want to take part in the development, send comments, propose
+corrections or even create derivative works, having the sources is more than
+interesting. Each book has a link to its Git repository where raw content,
+change history, etc. are available.
diff --git a/templates/en/_funding.md b/templates/en/_funding.md
new file mode 100644
index 0000000..f1e1ffe
--- /dev/null
+++ b/templates/en/_funding.md
@@ -0,0 +1,18 @@
+This project's goal is to make the contents available for everyone, regardless
+of their resources. That's why we share the contents online for free and we
+even allow the printing of the books using our easy-to-print format.
+
+On the other hand, the project needs to be sustainable so we can keep making
+new books, correcting them, maintaining this website and so on.
+
+This project is funded selling the books, it would die if nobody paid for them.
+
+Those who want and have the resources to do it, can support the project buying
+physical or digital books.
+
+Even further, its also possible [to hire ElenQ
+Technology](https://elenq.tech/en/#products) for training or as an independent
+research and development team.
+
+For both things, you can contact us with the contact info [you can find
+here](https://elenq.tech/en/#contact).
diff --git a/templates/en/_philosophy.md b/templates/en/_philosophy.md
new file mode 100644
index 0000000..2b6aa5d
--- /dev/null
+++ b/templates/en/_philosophy.md
@@ -0,0 +1,7 @@
+As ElenQ Technology's training, the content of ElenQ Publishing is focused on
+teaching the underlaying concepts of subjects in order to create a solid
+knowledge basis. From that, the goal is to encourage independent learning.
+
+On the other hand, the books are mainly focused on Free Software due to its
+educational value and social approach, which is part of the [values of ElenQ
+Technology](https://elenq.tech/en#ethics).
diff --git a/templates/en/_programming_in_python.md b/templates/en/_programming_in_python.md
new file mode 100644
index 0000000..9f5b431
--- /dev/null
+++ b/templates/en/_programming_in_python.md
@@ -0,0 +1,10 @@
+- Level: basic
+- Publishing date: 10-08-2020
+- ISBN of the paperback edition: 978-84-122572-1-2
+- Price of the physical book: 30€
+- Available languages and formats:
+ - Español
+ - [Easy to print PDF](/books/Programming_in_Python/es/book-simple.pdf)
+ - [Web](/books/Programming_in_Python/es/web.html)
+ - [Simple Web](/books/Programming_in_Python/es/web-simple.html)
+- [Source repository](https://gitlab.com/ElenQ/Publishing/python)
diff --git a/templates/en/_summary.md b/templates/en/_summary.md
new file mode 100644
index 0000000..2a57127
--- /dev/null
+++ b/templates/en/_summary.md
@@ -0,0 +1,14 @@
+*ElenQ Publishing* is a book publishing initiative which goal is to empower
+people with high quality material, with free licenses, accessible and published
+in their own language.
+
+The project was born from *ElenQ Technology*'s training service, where we
+prepare comprehensive course notes for our students. As we realized the notes
+could be interesting for the public, we decided to create a publishing house to
+make them available for everyone. In 2020 we launched [a crowdfunding
+campaign](https://www.goteo.org/project/elenq-publishing) and with it we
+published the first books of the collection.
+
+Today, with the first two books published, printed and sent to their new homes,
+*ElenQ Publishing* is another piece of *ElenQ Technology* that is large enough
+to deserve its own space.
diff --git a/templates/en/_whats_informatics.md b/templates/en/_whats_informatics.md
new file mode 100644
index 0000000..4629c69
--- /dev/null
+++ b/templates/en/_whats_informatics.md
@@ -0,0 +1,10 @@
+- Level: basic
+- Publishing date: 10-08-2020
+- ISBN of the paperback edition: 978-84-122572-0-5
+- Price of the physical book: 15€
+- Available languages and formats:
+ - Español
+ - [Printable PDF](/books/What_is_Informatics/es/book-simple.pdf)
+ - [Web](/books/What_is_Informatics/es/web.html)
+ - [Simple web](/books/What_is_Informatics/es/web-simple.html)
+- [Source repository](https://gitlab.com/ElenQ/Publishing/informatics)
diff --git a/templates/en/index.html b/templates/en/index.html
new file mode 100644
index 0000000..75c8448
--- /dev/null
+++ b/templates/en/index.html
@@ -0,0 +1,84 @@
+(define footer
+"
+The content of this website is published under the terms of [Creative Commons
+Attribution Share-Alike 4.0
+International](http://creativecommons.org/licenses/by-sa/4.0/) license unless
+otherwise stated.
+")
+
+(define summary (md-to-html (file->string "templates/en/_summary.md")))
+(define philo (md-to-html (file->string "templates/en/_philosophy.md")))
+(define funding (md-to-html (file->string "templates/en/_funding.md")))
+
+(define books (md-to-html (file->string "templates/en/_books.md")))
+(define python (md-to-html (file->string "templates/en/_programming_in_python.md")))
+(define informatics (md-to-html (file->string "templates/en/_whats_informatics.md")))
+
+(load "templates/_defs.scm")
+(set! lang "en")
+
+(sxml->xml
+ (base
+ "ElenQ Publishing"
+ `(,(header
+ `(((name . "Technology")
+ (title . "Engineering - ElenQ Technology")
+ (absurl . "https://elenq.tech/en/index.html"))
+
+ ((name . "Publishing")
+ (title . "Publishing House - ElenQ Publishing")
+ (absurl . ,(absurl-to-lang "/index.html"))
+ (active . #t)))
+
+ `(((name . "en")
+ (title . "English")
+ (absurl . "/en/")
+ (active . #t))
+ ((name . "es")
+ (title . "Español")
+ (absurl . "/es/"))))
+
+
+ (div (@ (class "content container"))
+
+ ,(logo-title)
+
+ (section (@ (class summary))
+ (@raw ,summary))
+
+ (section
+ ,(anchored-h 2 "Philosophy" "philosophy")
+ (@raw ,philo))
+
+ (section
+ ,(anchored-h 2 "Books" "books")
+ (@raw ,books))
+
+
+ ,(anchored-h 3 "What is informatics" "whats-informatics")
+ (p "This document written by Giacomo Tesio and translated and adapted by Ekaitz
+ Zarraga aims to describe what is informatics from its origins and create debate
+ about the ethics around it and the current uses it has. This book serves as
+ opening and statement of purpose of the whole collection because Giacomo's
+ ideas match perfectly the goals of ElenQ Publishing even if they were developed
+ independently.")
+ (div (@ (class "flex-around-wrap"))
+ (@raw ,informatics)
+ ,(book "5px" "/books/What_is_Informatics/es/cover.png" '("type2")))
+
+
+ ,(anchored-h 3 "Programming in Python" "programming-in-python")
+ (p "Written by Ekaitz Zarraga for his courses, this book is a Python programming
+ manual that also describes general programming theory in an introductory level.")
+ (div (@ (class "flex-around-wrap"))
+ (@raw ,python)
+ ,(book "13px" "/books/Programming_in_Python/es/cover.png" '("type1")))
+
+ (section
+ ,(anchored-h 2 "Funding" "funding")
+ (@raw ,funding)))
+
+ (footer (@ (class bar-bottom))
+ (div (@ (class "container text-center"))
+ (h6 "ElenQ Technology")
+ ,(md footer))))))
diff --git a/templates/es/_books.md b/templates/es/_books.md
new file mode 100644
index 0000000..3c2a02a
--- /dev/null
+++ b/templates/es/_books.md
@@ -0,0 +1,14 @@
+Todos ellos han sido publicados bajo los términos de la licencia
+[CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/deed.es) y se han
+preparado para su publicación en varios formatos: se publican en papel, en
+formato web y en un archivo de fácil impresión con el fin de que puedan llegar
+a cualquiera.
+
+Las versiones digitales están disponibles en los enlaces dispuestos en cada uno
+de los libros de la siguiente lista, mientras que las versiones físicas pueden
+adquirirse [contactando con nosotros](https://elenq.tech/es/#contact).
+
+Para colaborar en el proyecto enviando correcciones o comentarios o para crear
+proyectos derivados, tener acceso a la fuente es interesante. Cada uno de los
+libros lista además su repositorio de Git público, donde puede verse y
+descargarse el contenido en crudo, navegar el histórico de cambios, etc.
diff --git a/templates/es/_funding.md b/templates/es/_funding.md
new file mode 100644
index 0000000..b5b1431
--- /dev/null
+++ b/templates/es/_funding.md
@@ -0,0 +1,25 @@
+Este proyecto de publicación tiene como objetivo que cualquier persona pueda
+acceder al contenido, independientemente de los recursos de los que disponga.
+Es por eso que se permite la consulta e incluso la impresión de los libros.
+
+Sin embargo, necesita financiarse de modo que podamos seguir dedicando tiempo a
+publicar ejemplares, corregirlos, mantener este sitio web y todo el tiempo que
+este proceso conlleva.
+
+Como este proyecto se financia a través de las ventas de los ejemplares,
+moriría si la gente sólo se limitara a descargar las versiones que se comparten
+aquí.
+
+Quien así lo desee y pueda permitírselo, puede aportar al proyecto mediante la
+compra de un ejemplar físico o digital facilitando así que esta iniciativa siga
+adelante.
+
+O, yendo más allá, también es posible contratar [los
+servicios](https://elenq.tech/es/#products) de investigación y desarrollo o de
+formación de ElenQ Technology.
+
+La mejor manera de resolver cualquiera de las dos opciones es contactando con
+nosotros. La información de contacto [está disponible
+aquí](https://elenq.tech/es/#contact).
+
+
diff --git a/templates/es/_philosophy.md b/templates/es/_philosophy.md
new file mode 100644
index 0000000..22e5bfa
--- /dev/null
+++ b/templates/es/_philosophy.md
@@ -0,0 +1,9 @@
+Al igual que la formación en ElenQ Technology, los contenidos de ElenQ
+Publishing tienen como objetivo centrarse en los conceptos para aportar una
+base fundacional fuerte sobre la que fomentar el aprendizaje autónomo.
+
+Por otro lado, centran su interés en el software libre debido a su valor
+didáctico y a su enfoque social, parte del [compromiso ético de ElenQ
+Technology](https://elenq.tech/es#ethics).
+
+
diff --git a/templates/es/_programming_in_python.md b/templates/es/_programming_in_python.md
new file mode 100644
index 0000000..833241e
--- /dev/null
+++ b/templates/es/_programming_in_python.md
@@ -0,0 +1,12 @@
+- Nivel: básico
+- Fecha de edición: 10-08-2020
+- ISBN de la versión física: 978-84-122572-1-2
+- Precio de la edición física: 30€ IVA(4%) incl.
+- Formatos e idiomas disponibles:
+ - Español
+ - [PDF imprimible](/books/Programming_in_Python/es/book-simple.pdf)
+ - [Web](/books/Programming_in_Python/es/web.html)
+ - [Web simple](/books/Programming_in_Python/es/web-simple.html)
+- [Repositorio fuente](https://gitlab.com/ElenQ/Publishing/python)
+
+
diff --git a/templates/es/_summary.md b/templates/es/_summary.md
new file mode 100644
index 0000000..4130512
--- /dev/null
+++ b/templates/es/_summary.md
@@ -0,0 +1,16 @@
+*ElenQ Publishing* es una iniciativa de publicación de libros técnicos del área
+de la informática, cuyo fin es empoderar a la ciudadanía con material de
+calidad, con licencias libres, accesible y en su propio idioma.
+
+El proyecto nació de la acción formativa de *ElenQ Technology* a modo de
+documentación para los cursos que oferta, pero visto que los apuntes tenían
+entidad suficiente y eran interesantes para el público general, se decidió
+plantear la creación de una editorial de libros técnicos y en 2020 se lanzó
+[una campaña de crowdfunding](https://www.goteo.org/project/elenq-publishing)
+para editar los primeros ejemplares.
+
+Actualmente, con los dos primeros ejemplares ya publicados, impresos y
+entregados a los participantes de la campaña, *ElenQ Publishing* es una parte
+más de las actividades de *ElenQ Technology* que merece un espacio propio.
+
+
diff --git a/templates/es/_whats_informatics.md b/templates/es/_whats_informatics.md
new file mode 100644
index 0000000..3d18243
--- /dev/null
+++ b/templates/es/_whats_informatics.md
@@ -0,0 +1,11 @@
+- Nivel: básico
+- Fecha de edición: 10-08-2020
+- ISBN de la versión física: 978-84-122572-0-5
+- Precio de la edición física: 15€ IVA(4%) incl.
+- Formatos e idiomas disponibles:
+ - Español
+ - [PDF imprimible](/books/What_is_Informatics/es/book-simple.pdf)
+ - [Web](/books/What_is_Informatics/es/web.html)
+ - [Web simple](/books/What_is_Informatics/es/web-simple.html)
+- [Repositorio fuente](https://gitlab.com/ElenQ/Publishing/informatics)
+
diff --git a/templates/es/index.html b/templates/es/index.html
new file mode 100644
index 0000000..683a691
--- /dev/null
+++ b/templates/es/index.html
@@ -0,0 +1,85 @@
+(define footer
+"
+El contenido de este sitio está publicado bajo los términos de la licencia
+[Cretive Commons Atribución Compartir-Igual 4.0
+Internacional](http://creativecommons.org/licenses/by-sa/4.0/deed.es) a no
+ser que se especifique lo contrario.
+")
+
+(define summary (md-to-html (file->string "templates/es/_summary.md")))
+(define philo (md-to-html (file->string "templates/es/_philosophy.md")))
+(define funding (md-to-html (file->string "templates/es/_funding.md")))
+
+(define books (md-to-html (file->string "templates/es/_books.md")))
+(define python (md-to-html (file->string "templates/es/_programming_in_python.md")))
+(define informatics (md-to-html (file->string "templates/es/_whats_informatics.md")))
+
+(load "templates/_defs.scm")
+(set! lang "es")
+
+(sxml->xml
+ (base
+ "ElenQ Publishing"
+ `(,(header
+ `(((name . "Technology")
+ (title . "Ingeniería - ElenQ Technology")
+ (absurl . "https://elenq.tech/es/index.html"))
+ ((name . "Publishing")
+ (title . "Editorial - ElenQ Publishing")
+ (absurl . ,(absurl-to-lang "/index.html"))
+ (active . #t)))
+
+ `(((name . "en")
+ (title . "English")
+ (absurl . "/en/"))
+ ((name . "es")
+ (title . "Español")
+ (absurl . "/es/")
+ (active . #t))))
+
+
+ (div (@ (class "content container"))
+
+ ,(logo-title)
+
+ (section (@ (class summary))
+ (@raw ,summary))
+
+ (section
+ ,(anchored-h 2 "Filosofía" "philosophy")
+ (@raw ,philo))
+
+ (section
+ ,(anchored-h 2 "Libros" "books")
+ (@raw ,books))
+
+
+ ,(anchored-h 3 "¿Qué es la informática?" "whats-informatics")
+ (p "Escrito por Giacomo Tesio y traducido y adaptado por Ekaitz Zárraga, «¿Qué es
+ la informática?» trata de describir qué es la informática desde su origen y de
+ generar reflexión respecto a la ética de ésta y al uso que se le está dando hoy
+ en día. Este tomo sirve como apertura y como declaración de intenciones ya que
+ las ideas de Giacomo encajan a la perfección con el objetivo de ElenQ
+ Publishing, a pesar de haber surgido de forma independiente.")
+ (div (@ (class "flex-around-wrap"))
+ (@raw ,informatics)
+ ,(book "5px" "/books/What_is_Informatics/es/cover.png" '("type2")))
+
+
+ ,(anchored-h 3 "Programación en Python" "programming-in-python")
+ (p "Escrito por Ekaitz Zárraga como material para sus cursos de formación, este
+ documento es un manual del lenguaje de programación Python que describe además
+ fundamentos técnicos de la programación general.")
+ (div (@ (class "flex-around-wrap"))
+ (@raw ,python)
+ ,(book "13px" "/books/Programming_in_Python/es/cover.png" '("type1")))
+
+
+ (section
+ ,(anchored-h 2 "Financiación" "funding")
+ (@raw ,funding)))
+
+ (footer (@ (class bar-bottom))
+ (div (@ (class "container text-center"))
+ (h6 "ElenQ Technology")
+ ,(md footer))))))