diff options
28 files changed, 1485 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/schemeato b/schemeato new file mode 100755 index 0000000..cd940d6 --- /dev/null +++ b/schemeato @@ -0,0 +1,135 @@ +#| +#!/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 file))) + (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")) + (call-with-output-file + outfile + (lambda (f) + (display (render-template x env) f))))) + 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/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 Binary files differnew file mode 100644 index 0000000..865537d --- /dev/null +++ b/static/fonts/LatoLatin-Light.eot diff --git a/static/fonts/LatoLatin-Light.ttf b/static/fonts/LatoLatin-Light.ttf Binary files differnew file mode 100644 index 0000000..6af1b85 --- /dev/null +++ b/static/fonts/LatoLatin-Light.ttf diff --git a/static/fonts/LatoLatin-Light.woff b/static/fonts/LatoLatin-Light.woff Binary files differnew file mode 100644 index 0000000..e7d4278 --- /dev/null +++ b/static/fonts/LatoLatin-Light.woff diff --git a/static/fonts/LatoLatin-Light.woff2 b/static/fonts/LatoLatin-Light.woff2 Binary files differnew file mode 100644 index 0000000..b6d0288 --- /dev/null +++ b/static/fonts/LatoLatin-Light.woff2 diff --git a/static/fonts/LatoLatin-Regular.eot b/static/fonts/LatoLatin-Regular.eot Binary files differnew file mode 100644 index 0000000..96a9035 --- /dev/null +++ b/static/fonts/LatoLatin-Regular.eot diff --git a/static/fonts/LatoLatin-Regular.ttf b/static/fonts/LatoLatin-Regular.ttf Binary files differnew file mode 100644 index 0000000..bcc5778 --- /dev/null +++ b/static/fonts/LatoLatin-Regular.ttf diff --git a/static/fonts/LatoLatin-Regular.woff b/static/fonts/LatoLatin-Regular.woff Binary files differnew file mode 100644 index 0000000..bf73a6d --- /dev/null +++ b/static/fonts/LatoLatin-Regular.woff diff --git a/static/fonts/LatoLatin-Regular.woff2 b/static/fonts/LatoLatin-Regular.woff2 Binary files differnew file mode 100644 index 0000000..a4d084b --- /dev/null +++ b/static/fonts/LatoLatin-Regular.woff2 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 Binary files differnew file mode 100644 index 0000000..b73778f --- /dev/null +++ b/static/img/faces/ekaitz.jpg diff --git a/templates/_defs.scm b/templates/_defs.scm new file mode 100644 index 0000000..765dc73 --- /dev/null +++ b/templates/_defs.scm @@ -0,0 +1,79 @@ +; 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") + (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 "☰")) + (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))))))) + diff --git a/templates/_logo.svg b/templates/_logo.svg new file mode 100644 index 0000000..c574b25 --- /dev/null +++ b/templates/_logo.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 177.165 88.583" height="200" width="300" class="title-image"> + <g style="line-height:125%"> + <path d="M14.289 54.201h27.525v-2.7h-24.3v-17.25h20.55v-2.7h-20.55v-15.9h24.3v-2.7H14.289v41.25zm32.666 0h3.225v-41.25h-3.225v41.25zm8.414-14.775c0 11.25 8.7 15.6 16.5 15.6 11.85 0 15.3-4.725 16.05-9.225h-3.6c-.75 1.875-2.175 6-12.45 6-5.925 0-12.45-3.6-12.975-11.025h29.025v-3.225c-.75-10.425-6.45-15.75-16.05-15.75-9.6 0-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.6H59.044zm34.275 16.65h3.225V28.326c1.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.225v31.575zm29.944-20.625c0 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 style="line-height:125%"> + <path d="M28.71 64.185h4.038v12.184h1.021V64.185h4.061v-.879h-9.12v.879zm10.606 12.184h8.716v-.855h-7.695V70.05h6.508v-.855h-6.508V64.16h7.695v-.855h-8.716V76.37zm10.225-6.532c0 4.275 1.972 6.793 5.63 6.793 2.802 0 5.153-1.496 5.153-3.634h-1.14c0 1.306-1.568 2.613-4.014 2.613-3.159 0-4.512-3.064-4.512-5.772 0-3.11 1.828-5.77 4.607-5.77 2.423 0 3.919 1.258 3.919 2.683h1.14c0-2.351-2.351-3.681-5.154-3.681-3.895 0-5.629 3.467-5.629 6.768zm12.412 6.532h1.02V70.05h6.508v6.318h1.022V63.306H69.48v5.89h-6.507v-5.89h-1.021V76.37zm10.344 0h1.045V65.254l7.196 11.115h1.021V63.306h-1.02V74.54l-7.197-11.234h-1.045V76.37zm10.897-6.532c0 3.54 2.945 6.793 6.532 6.793 3.586 0 6.53-3.254 6.53-6.793 0-3.515-2.92-6.768-6.53-6.768-3.61 0-6.532 3.23-6.532 6.768zm1.045 0c0-2.897 2.4-5.795 5.487-5.795s5.486 2.898 5.486 5.795c0 2.898-2.399 5.82-5.486 5.82-3.088 0-5.487-2.922-5.487-5.82zm13.616 6.532h7.909v-1.022h-6.888v-12.04h-1.021v13.062zm9.368-6.532c0 3.54 2.945 6.793 6.531 6.793s6.531-3.254 6.531-6.793c0-3.515-2.921-6.768-6.531-6.768s-6.531 3.23-6.531 6.768zm1.045 0c0-2.897 2.398-5.795 5.486-5.795 3.087 0 5.486 2.898 5.486 5.795 0 2.898-2.399 5.82-5.486 5.82-3.088 0-5.486-2.922-5.486-5.82zm13.544 0c0 4.275 1.971 6.793 5.629 6.793 1.638 0 3.087-.523 4.013-1.378v1.117h1.022v-6.413h-5.225v1.021h4.203v2.02c0 1.305-1.567 2.612-4.013 2.612-3.16 0-4.513-3.064-4.513-5.772 0-3.11 1.829-5.77 4.608-5.77 2.422 0 3.918 1.258 3.918 2.683h1.022c0-2.351-2.233-3.681-5.035-3.681-3.895 0-5.63 3.467-5.63 6.768zm12.173-6.531l4.75 7.624v5.439h1.02v-5.44l4.775-7.623h-1.14l-4.133 6.65-4.109-6.65h-1.163z" /> + </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/_ethics.md b/templates/en/_ethics.md new file mode 100644 index 0000000..1334b82 --- /dev/null +++ b/templates/en/_ethics.md @@ -0,0 +1,13 @@ +We support free knowledge and we consider our clients must have access to +everything we develop for them so that they can audit and edit it without +restrictions. That’s why only deliver **free software and free +documentation**. + +On the other hand, we believe we all have impact in the society so **we +carefully select the projects we work on**, avoiding projects that we consider +that don't have a good impact in the society: that are incompatible with human +rights, abuse vulnerable collectives, etc. + +Also, we have a really strong compromise with the free software movement +because it helps us make our everyday job. For that reason, we spend some of +our effort supporting free software in terms of funds or development time. diff --git a/templates/en/_products.md b/templates/en/_products.md new file mode 100644 index 0000000..0937455 --- /dev/null +++ b/templates/en/_products.md @@ -0,0 +1,29 @@ +### R&D: Research and Development + +We primarily focus on Research and Development. Our main goal is to push our +clients forward technologically speaking. + +The service is flexible and can focus on research, making reports about +the state of the art in a certain area or about possible alternatives to solve +an issue, or can be focused on development, delivering a proof-of-concept, a +mockup or a fully-featured solution. + +Our commitment is to transfer all the knowledge we adquire during the process, +so our clients are able audit, edit or continue the research in their own. For +that reason, and following our ethics framework, we deliver everything under +a free software license. + +### Training + +We also offer advanced training in computer science, mostly programming, as a +supplementary service as part of our technological grow model. + +The training is aimed to provide our clients a way to improve the technicall +skills of their teams, make them learn a new technology or make newcomers learn +the tools and philosophy of the company, among others. In any case, they ease +to set up a highly-skilled team that deeply understand their job and the tools +they need. + +We focus on the transmission of the technical basis in order to encourage +critical and independent thinking that serves as a robust basis to keep +learning and researching. diff --git a/templates/en/_summary.md b/templates/en/_summary.md new file mode 100644 index 0000000..1df4753 --- /dev/null +++ b/templates/en/_summary.md @@ -0,0 +1,12 @@ +*ElenQ Technology* is a **Research and Development** company. This means we +learn for you and give you the knowledge back in a way you can use it freely, +following our [ethics](#ethics). + +We also offer **training and engineering** as secondary services, which means +we can help you with that project that never gets finished because you must +focus on more important things like clients and maintenance. + +Our experience is based on **Software and Electronics** but we also have a +background on arts, design and other fields. The fact is that we are engineers +and our main talent is learning anything so don't hesitate to [contact +us](#contact) if you think we can help you. diff --git a/templates/en/index.html b/templates/en/index.html new file mode 100644 index 0000000..cb09ca4 --- /dev/null +++ b/templates/en/index.html @@ -0,0 +1,86 @@ +(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 (file->string "templates/en/_summary.md")) +(define ethics (file->string "templates/en/_ethics.md")) +(define products (file->string "templates/en/_products.md")) + +(load "templates/_defs.scm") +(set! lang "en") + +(sxml->xml + (base + "ElenQ Technology" + `(,(header + `(((name . "Technology") + (title . "Engineering - ElenQ Technology") + (absurl . ,(absurl-to-lang "/index.html")) + (active . #t)) + ((name . "Publishing") + (title . "Publishing House - ElenQ Publishing") + (absurl . "https://en.goteo.org/project/elenq-publishing"))) + + `(((name . "en") + (title . "English") + (absurl . "/en/") + (active . #t)) + ((name . "es") + (title . "Español") + (absurl . "/es/")))) + + (div (@ (class "content container")) + ,(logo-title) + + (section (@ (class summary)) + ,(md summary)) + + (section + ,(anchored-h 2 "Ethics" "ethics") + ,(md ethics)) + + (section + ,(anchored-h 2 "Products" "products") + ,(md products)) + + (section + ,(anchored-h 2 "Who we are" "who") + (p "ElenQ Technology wouldn't be possible without all the people + around it, who support and help us unconditionally. Despite + not being part of ElenQ Technology officially, they deserve + to be mentioned at least in these lines, even if they are not + listed below.") + (div (@ (class card)) + (div (@ (class card-picture)) + (img (@ (src "/static/img/faces/ekaitz.jpg") + (class round)))) + (div (@ (class card-data)) + (h3 "Ekaitz Zarraga") + (p "Telecommunication engineer (EEE equivalent) by + training, 10 years of experience as a programmer and + a lifetime of R&D, Ekaitz is the one man army of + ElenQ Technology.") + (p "He says his only talent is learning. He founded + ElenQ Technology with the idea of inspiring + others to make a better world helping them with + the difficult task of going out of their comfort + zone.") + (p "He writes about his work at ElenQ Technology " + (a (@ (href "https://ekaitz.elenq.tech")) + "in his blog") ".")))) + + (section + ,(anchored-h 2 "Contact" "contact") + (p "Send us an email to: " + (a (@ (href "mailto:hello@elenq.tech")) (em "hello@elenq.tech")) + " " + (a (@ (href "/static/files/publickey.hello@elenq.tech.txt")) "[PGP]")))) + + (footer (@ (class bar-bottom)) + (div (@ (class "container text-center")) + (h6 "© ElenQ Technology") + ,(md footer)))))) diff --git a/templates/es/_ethics.md b/templates/es/_ethics.md new file mode 100644 index 0000000..5a24489 --- /dev/null +++ b/templates/es/_ethics.md @@ -0,0 +1,16 @@ +Como defensores del conocimiento libre, consideramos que nuestros clientes +tienen que tener acceso a todo lo que realizamos para ellos con el fin de poder +auditarlo y editarlo sin ninguna restricción. Por esa razón, únicamente +**entregamos software y documentación libre**. + +Por otro lado, como consideramos que todos tenemos un impacto en la sociedad, +**seleccionamos de manera estricta en qué proyectos trabajamos** evitando +apoyar proyectos que consideramos que van a tener un impacto negativo en la +sociedad: que no cumplen los derechos humanos, que buscan explotar a un grupo +de personas vulnerable, etc. + +Además, estamos comprometidos con el movimiento del software libre, ya que nos +permite llevar a cabo nuestro trabajo diario. Por ello, dedicamos parte de +nuestros esfuerzos a colaborar con los proyectos que utilizamos, ya sea de +forma económica o dedicando nuestro tiempo de desarrollo con el fin de mantener +el ecosistema vivo y en buen estado. diff --git a/templates/es/_products.md b/templates/es/_products.md new file mode 100644 index 0000000..8e1ad29 --- /dev/null +++ b/templates/es/_products.md @@ -0,0 +1,31 @@ +### I+D: Investigación y Desarrollo + +Como equipo de Investigación y Desarrollo que somos, nos dedicamos +principalmente a esa tarea. Ofrecemos nuestros servicios como equipo de I+D +independiente para impulsar tecnológicamente a nuestros clientes. + +El servicio es flexible y puede estar más centrado en la investigación, +redactando informes de análisis de situación, estado del arte o posibles +alternativas, o en el desarrollo, creando pruebas de concepto, maquetas o +soluciones que resuelvan los problemas de nuestros clientes. + +Hacemos hincapié en una transferencia de real de conocimiento y, siguiendo +nuestro compromiso ético, realizamos la entrega de todo lo desarrollado con +licencias libres, para que el cliente sea libre de auditarlo y editarlo a su +antojo. + + +### Formación + +Ofrecemos formaciones avanzadas en el área de la informática, principalmente +sobre programación como parte de nuestro modelo de impulso tecnológico. + +Estas formaciones tienen como objetivo introducir a un equipo de profesionales +a una tecnología que aún no conocen, actualizar a profesionales o formar a +recién llegados a conocer la filosofía de la empresa, entre otros. En cualquier +caso, facilitan la puesta en marcha de equipos eficientes que controlan al +detalle su trabajo. + +Estas formaciones se centran en los fundamentos técnicos con el fin de fomentar +el pensamiento crítico e independiente creando así una base de conocimientos +robusta sobre la que seguir avanzando de forma independiente. diff --git a/templates/es/_summary.md b/templates/es/_summary.md new file mode 100644 index 0000000..23222ea --- /dev/null +++ b/templates/es/_summary.md @@ -0,0 +1,13 @@ +*ElenQ Technology* es una empresa de **Investigación y Desarrollo**. Lo que +significa que aprendemos para ti y te damos el conocimiento de vuelta de modo +que puedas usarlo de forma libre, siguiendo nuestro [compromiso +ético](#ethics). + +También ofrecemos **formación e ingeniería** como servicios secundarios, para poder +ayudarte con ese proyecto que nunca acaba porque tienes que concentrarte en +cosas más importantes como el mantenimiento o tratar con los clientes. + +Nuestras especialidades son el **Software y la Electrónica** pero también tenemos +experiencia en el arte, el diseño y otros campos. La verdad es que somos +ingenieros cuyo mayor talento es aprender, así que no dudes en +[contactarnos](#contact) si crees que podemos ayudarte. diff --git a/templates/es/index.html b/templates/es/index.html new file mode 100644 index 0000000..463f00d --- /dev/null +++ b/templates/es/index.html @@ -0,0 +1,88 @@ +(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/) a no +ser que se especifique lo contrario. +") + +(define summary (file->string "templates/es/_summary.md")) +(define ethics (file->string "templates/es/_ethics.md")) +(define products (file->string "templates/es/_products.md")) + +(load "templates/_defs.scm") +(set! lang "es") + +(sxml->xml + (base + "ElenQ Technology" + `(,(header + `(((name . "Technology") + (title . "Ingeniería - ElenQ Technology") + (absurl . ,(absurl-to-lang "/index.html")) + (active . #t)) + ((name . "Publishing") + (title . "Editorial - ElenQ Publishing") + (absurl . "https://www.goteo.org/project/elenq-publishing"))) + + `(((name . "en") + (title . "English") + (absurl . "/en/")) + ((name . "es") + (title . "Español") + (absurl . "/es/") + (active . #t)))) + + + (div (@ (class "content container")) + + ,(logo-title) + + (section (@ (class summary)) + ,(md summary)) + + (section + ,(anchored-h 2 "Compromiso ético" "ethics") + ,(md ethics)) + + (section + ,(anchored-h 2 "Qué ofrecemos" "products") + ,(md products)) + + (section + ,(anchored-h 2 "Quiénes somos" "who") + (p "ElenQ Technology no sería posible sin nuestros colaboradores, + personas de diferentes áreas que nos apoyan y nos ayudan en + nuestro trabajo. A pesar de no formar parte oficial de ElenQ + Technology, merecen ser mencionados, aunque no se listen a + continuación.") + (div (@ (class card)) + (div (@ (class card-picture)) + (img (@ (src "/static/img/faces/ekaitz.jpg") + (class round)))) + (div (@ (class card-data)) + (h3 "Ekaitz Zarraga") + (p "Ingeniero de Telecomunicaciones de formación, con + alrededor de 10 años de experiencia como programador + y toda una vida dedicada al I+D, Ekaitz es el hombre + orquesta de ElenQ Technology.") + (p "Suele decir que su único talento es aprender. Fundó + ElenQ Technology con la idea de inspirar a otros a + hacer del mundo un lugar mejor, ayudándoles con la + difícil tarea de salir a visitar territorio + desconocido.") + (p "Escribe sobre su trabajo en ElenQ Technology " + (a (@ (href "https://ekaitz.elenq.tech")) + "en su blog") ".")))) + + (section + ,(anchored-h 2 "Contacto" "contact") + (p "Escríbenos a: " + (a (@ (href "mailto:hello@elenq.tech")) (em "hello@elenq.tech")) + " " + (a (@ (href "/static/files/publickey.hello@elenq.tech.txt")) "[PGP]")))) + + (footer (@ (class bar-bottom)) + (div (@ (class "container text-center")) + (h6 "© ElenQ Technology") + ,(md footer)))))) |