diff --git a/.gitignore b/.gitignore
index 1d02cf4..36757f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,14 +4,12 @@ __pycache__
# node/bower
node_modules
-bower_components
# emacs
*~
# static js
-assets/static/js/app-min.js
-assets/static/js/app.js
+assets/static/js
assets/static/css
# Tests
@@ -19,3 +17,6 @@ tests/venv
# Build
public
+
+# Lektor
+.lektor
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index fd5ecbc..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-image: archlinux/base:latest
-
-variables:
- POETRY_CACHE_DIR: "$CI_PROJECT_DIR/.cache/poetry"
- PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
-
-before_script:
-- pacman -Syu python-pip nodejs npm python2 base-devel --noconfirm
-
-cache:
- paths:
- - .cache/pip
- - .cache/poetry
-
-stages:
-- deploy
-
-pages:
- stage: deploy
- script:
- - pip install -r requirements.txt
- - npm install
- - make build
- artifacts:
- paths:
- - public
- only:
- - master
-
-pages_test:
- stage: deploy
- script:
- - pip install requests
- - python -m unittest tests.tests_deploy
- only:
- - master
diff --git a/Makefile b/Makefile
index 9e994a3..84f3a08 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,15 @@
setup:
poetry install
-
-dev:
- node_modules/gulp/bin/gulp.js sass
- node_modules/gulp/bin/gulp.js js
+ npm install
build:
- make dev
- lektor build --prune --output-path ${PWD}/public
+ node_modules/gulp/bin/gulp.js sass
+ node_modules/gulp/bin/gulp.js js
+ lektor build --prune --output-path ${PWD}/public --buildstate-path ${PWD}/.lektor
watch:
node_modules/gulp/bin/gulp.js sass:watch
-deploy_tests:
- bash tests/run.sh
+deploy:
+ make build
+ rsync -e ssh --info=progress2 -r ${PWD}/public/ pages.sites.town:~/public_html/fmartingr.com/
diff --git a/assets/pubkey.txt b/assets/pubkey.txt
new file mode 100644
index 0000000..2dc3b2c
--- /dev/null
+++ b/assets/pubkey.txt
@@ -0,0 +1,380 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+gBYhBPSdr5cM3uur90Q/snFrwUdxXnFvBQJeD1DMAhkBAAoJEHFrwUdxXnFvVz0P+QFq1OIx
+Th8E4Q+4TFr5fhHn8D5crC+OYTwJISSMQgnqGJI3FL70C0GNlIPpfnS04c0WAMMgm4Qmaimx
+ycc9Oe+hCRHig7ubARhhBKhJRqs5IOPpyW/NhylBZrVJhE9FCdj82XEi0a64JEiFMhaFOHiN
+F9Wb3t6TjG4A6Uo5c/c/gNdS71GLzb9+4QVPxbvDm1cn7kmxcZC5ykhiQ/BRFk/vON2/4NgI
+ExKF3DeHJm8BCLM9BRf6gUwDr/wLekJVmNSrdm+h8gNn9zCpS7IGJokZpA8oqWdhAcg8/puS
+xuho2lieLuqW5Db7p0okFNi+7Zh7n7IqWFdq7mt3zf/5CMT8kNRyOMYcVyPyqbcmqzZGxeph
+1El+6nD5hDOguh3UMa7Lt5QZp78Lagtpv+aI4rDf+IX1hkda5aYbcOWjxRk/zTI2kxjyj22q
+NTs4vuuEC3BZJOckLl4lojGs68sizSAaPC3GQigd82BUy401sk0RtRveTladm62JOqynERdo
+Tjm7sasn38ZNy7g9elgJltMkAHYNEKWcfQgTRlVcSUzlZrIDMnjJn/xT+alaOtE8qQM1aekO
+DSEM1ps8KhpYxuLZcjkbHrFJnMeqnakII4uSdaDW0A4R7jnVaPdOqrgrJdwVT7gEVoXsx3Z1
+paT7m5L3HBKO+PoTzTbdiwhx9O8O0f8AABK90fsBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpG
+SUYAAQEAAAEAAQAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQu
+JyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIy
+MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAhwCHAwEi
+AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
+BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn
+KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SV
+lpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz
+9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQH
+BQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBka
+JicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT
+lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz
+9PX29/j5+v/aAAwDAQACEQMRAD8A9qspGht1RxjjkelRTclhu/GlaRS20EE+gqMsJGwR8o7+
+tdUYqOxyuTluc9D4U+3Xs8s7BISuQqNgsc9xik/4Re1vL1pp3kdI+AN2MAdB9K6kgRFZD0NY
+Wu65Dp8TrJ5geTkbMDIzyM07vVjaWiOd8bXtvbaXBZRxOSMqGJ+6B2OfwNeWXO2SZ5gqKS2S
+iDA/D0rrfFOqpqdwvlReXGBxlsk8dT71x985jgcjaSgOCBWc3zFQXKV5ZG2hQqDIxnI6VVZc
+HofrWVI7sxLMST70kVzLC25HIP1rN0zVM1wmc8gYHQ96sCCNxlVC5HPNV9PvIblwkuFk7E9D
+XQR2BkXOAF9qwneO5pFXMpbLygfLO4nJ3DsKY6FGwRwew7V0hs440VBxkfexmq0umeXcCOQg
+FhkY5FZc5fKY5yx+UbV9AKlhtjMHldXEEXLlRyfYf54q6LcHzGICovBYLwP8TVe4m3bIV3JB
+kgY4J+tUtSWiB7x5JN20AAbUQdEHoKiILAZHSpjaSRAl42X3YYqQBoXLZzt44PT6UwKm0AdK
+KncE5ZelFAHuOiXsKSNZTylLluTubIf6Gt0YIBXGO2K8wuriQQrKFEsaAMsndAfeus8M+IIb
+23S0mZUmXhcnAb6V3wqN7nLUh1Rv3DSm3YIRkf3jgCvPNXuY3MsUrG5bosjtwvrium1rWlDG
+3tyGGcEj+I+n0rnbm0haMF4nluXy2EOD9fpSnUS0CEHuzkr5ETGzLDuSayriLzY3iK4De3Nd
+fbaJK2om2KK8irvOW+RR7+prOvdOmbZK0WzHyucYII/pWLmaKJ5rMhjkZGGGU4NQNXUeJtIa
+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
+=aVl0
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/assets/static/images/favicon.ico b/assets/static/images/favicon.ico
new file mode 100644
index 0000000..0266ebd
Binary files /dev/null and b/assets/static/images/favicon.ico differ
diff --git a/assets/static/sass/_layout.sass b/assets/static/sass/_layout.sass
deleted file mode 100644
index af17e80..0000000
--- a/assets/static/sass/_layout.sass
+++ /dev/null
@@ -1,84 +0,0 @@
-body
- font-family: "Antic Slab"
- font-size: $font-size-normal
- line-height: 1.5em
-
-.center
- margin: 0 auto
- max-width: 920px
-
-a
- text-decoration: underilne
- color: $red
-
- &.no-underline
- text-decoration: none
-
-img
- max-width: 100%
-
-header
- h1
- font-size: 1.5em
- margin-bottom: 0
- text-align: right
-
- h2
- font-size: 0.8em
- font-weight: normal
- margin-top: 0
- display: none
-
-nav.main-menu
- text-align: right
-
-footer
- font-size: 0.7em
- padding-top: 1em
-
-hr.light
- border: 0px
- margin: 1em 0 1em 0
- border-top: #CCC 1px solid
-
-p:first-child
- margin-top: 0
-
-.text-center
- text-align: center
-
-.text-right
- text-align: right
-
-.text-bold
- font-weight: bold
-
-.text-size-normal
- font-size: $font-size-normal
-
-.text-size-enormous
- font-size: $font-size-enormous
-
-.float-right
- float: right
-
-.float-left
- float: left
-
-.clearfloat
- clear: both
-
-.display-block
- display: block
-
-.block-info
- background-color: lightblue
- padding: 12px
-
- &:before
- color: darken(lightblue, 50)
- content: '🛈'
- float: left
- font-size: 180%
- line-height: 80%
- padding-right: 6px
diff --git a/assets/static/sass/_variables.sass b/assets/static/sass/_variables.sass
deleted file mode 100644
index a16f144..0000000
--- a/assets/static/sass/_variables.sass
+++ /dev/null
@@ -1,6 +0,0 @@
-$red: #c24e4a
-$lightgray: #f6f6f6
-$darkgray: #e9e9e9
-
-$font-size-normal: 20px
-$font-size-enormous: 5em
diff --git a/content/about/contents.lr b/content/about/contents.lr
new file mode 100644
index 0000000..ea9d74c
--- /dev/null
+++ b/content/about/contents.lr
@@ -0,0 +1,48 @@
+_model: page
+---
+title: About
+---
+body:
+Hi! I'm Felipe, and I am a developer. Whatever that is.
+
+I have been playing with code for a while now, but I also enjoy geeking around with computers, algorithms and other stuff; the less I know about it, the better!
+Learning new things every day is my way of life.
+
+I think that developers are like artists, writers and composers... we all make art. But we don't use strokes and colors, words or notes, we make it through code. And I really love it.
+
+If you want to get in touch feel free to drop me a line.
+
+
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/001.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/001.jpg
deleted file mode 100644
index 8003dcc..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/001.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/002.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/002.jpg
deleted file mode 100644
index d077496..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/002.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/003.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/003.jpg
deleted file mode 100644
index 9e4769c..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/003.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/004.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/004.jpg
deleted file mode 100644
index d9b687a..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/004.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/005.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/005.jpg
deleted file mode 100644
index 28d47f2..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/005.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/006.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/006.jpg
deleted file mode 100644
index 3ba4349..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/006.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/099.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/099.jpg
deleted file mode 100644
index 01491d3..0000000
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/099.jpg and /dev/null differ
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/contents.lr b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/contents.lr
deleted file mode 100644
index cf03529..0000000
--- a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/gallery/contents.lr
+++ /dev/null
@@ -1,3 +0,0 @@
-_model: gallery
----
-_discoverable: no
diff --git a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/hero.jpg b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/hero.jpg
index 455b9c8..db9487f 100644
Binary files a/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/hero.jpg and b/content/blog/2019-11-20-i-finished-playing-the-legend-of-zelda-links-awakening/hero.jpg differ
diff --git a/content/contents.lr b/content/contents.lr
index 572cbc1..d5149fc 100644
--- a/content/contents.lr
+++ b/content/contents.lr
@@ -2,13 +2,14 @@ title: Welcome to Felipe Martin!
---
body:
-Hi! I'm Felipe, and I am a developer. Whatever that is.
-
-I have been playing with code for a while now, but I also enjoy geeking around with computers, algorithms and other stuff; the less I know about it, the better! Learning new things every day is my way of life.
-
-I think that developers are like artists, writers and composers... we all make art. But we don't use strokes and colors, words or notes, we make it through code. And I really love it.
-
-If you want to get in touch feel free to drop me a line.
+I'm currently reading...
+
+I'm currently playing...
+
---
_template: home.html
diff --git a/gulpfile.js b/gulpfile.js
index 6069cab..d3abf10 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,32 +1,26 @@
'use strict';
var gulp = require('gulp');
-
-// Styles
var sass = require('gulp-sass');
var concatCss = require('gulp-concat-css');
var concatJs = require('gulp-concat');
var merge = require('merge-stream');
var minifyCss = require('gulp-minify-css');
-var livereload = require('gulp-livereload');
-var yargs = require('yargs').argv;
var minify = require('gulp-minify');
-gulp.task('sass', function () {
- var sassStream = gulp.src('./assets/static/sass/style.sass')
+gulp.task('sass', function() {
+ var sassStream = gulp.src('./static/sass/style.sass')
.pipe(sass().on('error', sass.logError));
- // var bowerStream = gulp.src([]);
return merge(sassStream)
.pipe(concatCss("style.css"))
.pipe(minifyCss())
- .pipe(gulp.dest('./assets/static/css'))
- .pipe(livereload());
+ .pipe(gulp.dest('./assets/static/css'));
});
-gulp.task('js', function () {
+gulp.task('js', function() {
var jsStream = gulp.src([
- './assets/static/js/main.js'
+ './static/js/main.js'
]);
return jsStream
.pipe(concatJs('app.js'))
@@ -37,12 +31,6 @@ gulp.task('js', function () {
.pipe(gulp.dest('./assets/static/js'))
})
-gulp.task('livereload', function () {
- return gulp.src('./templates/**/*.html').pipe(livereload());
-});
-
-gulp.task('sass:watch', function () {
- livereload.listen();
- gulp.watch('./assets/static/sass/*', gulp.parallel(['sass']));
- gulp.watch('./assets/static/templates/**/*.html', gulp.parallel(['livereload']));
-});
+gulp.task('sass:watch', function() {
+ gulp.watch('./static/sass/*', gulp.parallel(['sass']));
+});
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index d5e5728..2295b00 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,12 +4,6 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -469,18 +463,6 @@
"inherits": "~2.0.0"
}
},
- "body": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
- "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
- "dev": true,
- "requires": {
- "continuable-cache": "^0.3.1",
- "error": "^7.0.0",
- "raw-body": "~1.1.0",
- "safe-json-parse": "~1.0.1"
- }
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -567,12 +549,6 @@
}
}
},
- "bytes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
- "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
- "dev": true
- },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -862,12 +838,6 @@
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"dev": true
},
- "continuable-cache": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
- "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
- "dev": true
- },
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
@@ -1142,12 +1112,6 @@
"safer-buffer": "^2.1.0"
}
},
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -1157,15 +1121,6 @@
"once": "^1.4.0"
}
},
- "error": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz",
- "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==",
- "dev": true,
- "requires": {
- "string-template": "~0.2.1"
- }
- },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -1408,15 +1363,6 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
- "faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@@ -2475,55 +2421,6 @@
}
}
},
- "gulp-livereload": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/gulp-livereload/-/gulp-livereload-4.0.2.tgz",
- "integrity": "sha512-InmaR50Xl1xB1WdEk4mrUgGHv3VhhlRLrx7u60iY5AAer90FlK95KXitPcGGQoi28zrUJM189d/h6+V470Ncgg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.1",
- "debug": "^3.1.0",
- "fancy-log": "^1.3.2",
- "lodash.assign": "^4.2.0",
- "readable-stream": "^3.0.6",
- "tiny-lr": "^1.1.1",
- "vinyl": "^2.2.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
- "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
"gulp-minify": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/gulp-minify/-/gulp-minify-3.1.0.tgz",
@@ -2795,12 +2692,6 @@
"integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
"dev": true
},
- "http-parser-js": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
- "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
- "dev": true
- },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -3216,12 +3107,6 @@
"resolve": "^1.1.7"
}
},
- "livereload-js": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
- "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==",
- "dev": true
- },
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -3235,15 +3120,6 @@
"strip-bom": "^2.0.0"
}
},
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
@@ -3978,30 +3854,6 @@
"os-tmpdir": "^1.0.0"
}
},
- "p-limit": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
- "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
"parse-filepath": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
@@ -4238,30 +4090,6 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
- "qs": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==",
- "dev": true
- },
- "raw-body": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
- "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
- "dev": true,
- "requires": {
- "bytes": "1",
- "string_decoder": "0.10"
- },
- "dependencies": {
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -4560,12 +4388,6 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
- "safe-json-parse": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
- "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
- "dev": true
- },
"safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
@@ -4949,12 +4771,6 @@
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
"dev": true
},
- "string-template": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
- "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
- "dev": true
- },
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@@ -5077,43 +4893,6 @@
"integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
"dev": true
},
- "tiny-lr": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
- "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
- "dev": true,
- "requires": {
- "body": "^5.1.0",
- "debug": "^3.1.0",
- "faye-websocket": "~0.10.0",
- "livereload-js": "^2.3.0",
- "object-assign": "^4.1.0",
- "qs": "^6.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- }
- }
- },
"to-absolute-glob": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
@@ -5482,23 +5261,6 @@
"source-map": "^0.5.1"
}
},
- "websocket-driver": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
- "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.4.0 <0.4.11",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
- },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -5557,162 +5319,6 @@
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
- "yargs": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz",
- "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^16.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yargs-parser": {
- "version": "16.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz",
- "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
"yargs-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
diff --git a/package.json b/package.json
index 8a76d4f..f4aabf4 100644
--- a/package.json
+++ b/package.json
@@ -7,12 +7,10 @@
"gulp": "*",
"gulp-concat": "*",
"gulp-concat-css": "*",
- "gulp-livereload": "*",
"gulp-minify": "*",
"gulp-minify-css": "*",
"gulp-sass": "*",
- "merge-stream": "*",
- "yargs": "*"
+ "merge-stream": "*"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
diff --git a/assets/static/js/main.js b/static/js/main.js
similarity index 100%
rename from assets/static/js/main.js
rename to static/js/main.js
diff --git a/assets/static/sass/_about.sass b/static/sass/_about.sass
similarity index 100%
rename from assets/static/sass/_about.sass
rename to static/sass/_about.sass
diff --git a/assets/static/sass/_blog.sass b/static/sass/_blog.sass
similarity index 95%
rename from assets/static/sass/_blog.sass
rename to static/sass/_blog.sass
index dca4f75..6028b95 100644
--- a/assets/static/sass/_blog.sass
+++ b/static/sass/_blog.sass
@@ -1,6 +1,5 @@
article.blog-post
- h1
- font-size: 1.8em
+ .title
margin-bottom: 0.3em
.info
@@ -13,7 +12,8 @@ article.blog-post
img
border-radius: 6px
display: block
- margin: 0 auto
+ margin: 0 auto
+ max-width: 100%
img
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2)
diff --git a/assets/static/sass/_grid.sass b/static/sass/_grid.sass
similarity index 100%
rename from assets/static/sass/_grid.sass
rename to static/sass/_grid.sass
diff --git a/static/sass/_layout.sass b/static/sass/_layout.sass
new file mode 100644
index 0000000..8c1e908
--- /dev/null
+++ b/static/sass/_layout.sass
@@ -0,0 +1,103 @@
+body
+ font-family: $font-family
+ font-size: $font-size-base
+ line-height: 1.5em
+
+.center
+ margin: 0 auto
+ max-width: 920px
+
+a
+ text-decoration: underilne
+ color: $highlight-color
+
+ &.no-underline
+ text-decoration: none
+
+hr.light
+ border: 0px
+ margin: 1em 0 1em 0
+ border-top: #CCC 1px solid
+
+p:first-child
+ margin-top: 0
+
+.text-left
+ text-align: left
+
+.text-center
+ text-align: center
+
+.text-right
+ text-align: right
+
+.text-bold
+ font-weight: bold
+
+.text-size-small
+ font-size: $font-size-small
+
+.text-size-normal
+ font-size: $font-size-normal
+
+.text-size-enormous
+ font-size: $font-size-enormous
+
+.float-right
+ float: right
+
+.float-left
+ float: left
+
+.clearfloat
+ clear: both
+
+.display-block
+ display: block
+
+.block-info
+ background-color: lighten($highlight-color, 40%)
+ padding: 12px
+
+// New
+.page-content
+ display: flex
+ margin: 0 auto
+ flex-direction: row
+ max-width: 980px
+
+ @media ($tablet)
+ display: block
+ width: 100%
+
+ header
+ width: 25%
+ text-align: center
+
+ @media ($tablet)
+ width: 100%
+ .avatar
+ max-width: 125px
+
+ h1
+ font-size: 1.3em
+
+ .avatar
+ width: 70%
+ margin: 0 auto
+ border-radius: 12%
+
+ nav
+ a
+ display: block
+
+ .social
+ list-style: none
+ padding: 0
+
+ .main-content
+ @media ($tablet)
+ width: 100%
+
+ width: 75%
+ padding-right: 16px
diff --git a/assets/static/sass/_mediaqueries.sass b/static/sass/_mediaqueries.sass
similarity index 100%
rename from assets/static/sass/_mediaqueries.sass
rename to static/sass/_mediaqueries.sass
diff --git a/assets/static/sass/_mixins.sass b/static/sass/_mixins.sass
similarity index 100%
rename from assets/static/sass/_mixins.sass
rename to static/sass/_mixins.sass
diff --git a/assets/static/sass/_portfolio.sass b/static/sass/_portfolio.sass
similarity index 100%
rename from assets/static/sass/_portfolio.sass
rename to static/sass/_portfolio.sass
diff --git a/assets/static/sass/_syntax.sass b/static/sass/_syntax.sass
similarity index 100%
rename from assets/static/sass/_syntax.sass
rename to static/sass/_syntax.sass
diff --git a/assets/static/sass/_table.sass b/static/sass/_table.sass
similarity index 87%
rename from assets/static/sass/_table.sass
rename to static/sass/_table.sass
index b9e8fe5..de8c0d5 100644
--- a/assets/static/sass/_table.sass
+++ b/static/sass/_table.sass
@@ -4,7 +4,7 @@ table
box-shadow: 0 1px 3px rgba(0,0,0,0.2)
th
- background: $red
+ background: $highlight-color
color: white
font-weight: bold
diff --git a/static/sass/_variables.sass b/static/sass/_variables.sass
new file mode 100644
index 0000000..2479cf7
--- /dev/null
+++ b/static/sass/_variables.sass
@@ -0,0 +1,11 @@
+$highlight-color: #c24e4a
+$lightgray: #f6f6f6
+$darkgray: #e9e9e9
+
+$font-family: "Antic Slab"
+
+$font-size-base: 1.2em
+
+$font-size-small: 0.8em
+$font-size-normal: 1.3em
+$font-size-enormous: 5em
diff --git a/assets/static/sass/style.sass b/static/sass/style.sass
similarity index 90%
rename from assets/static/sass/style.sass
rename to static/sass/style.sass
index a2592e9..d9bf942 100644
--- a/assets/static/sass/style.sass
+++ b/static/sass/style.sass
@@ -3,7 +3,6 @@
@import ./mixins
@import ./grid
@import ./layout
-@import ./about
@import ./blog
@import ./portfolio
@import ./table
diff --git a/templates/_base.html b/templates/_base.html
index bf1c6f6..972409d 100644
--- a/templates/_base.html
+++ b/templates/_base.html
@@ -8,6 +8,7 @@
+
@@ -17,40 +18,58 @@
{% block endhead %}{% endblock %}
-
- Felipe MartÃn
- Be incomprehensible. If they can't understand, they can't disagree.
-
- /home
- {% for section in site.get('/').children %}
- {{ section.path }} {% if not loop.last %} {% endif %}
- {% endfor %}
-
-
-
- {% block main_content %}{% endblock %}
-
-
-
+
+
+ {% block main_content %}asd{% endblock %}
+
+
+ Felipe MartÃn
+
+
+
+ /home
+ {% for section in site.get('/').children %}
+ {{ section.path }}
+ {% endfor %}
+
+
+
+
+
+
+ Site created using
+ lektor
+
+
+ Published using
+ sites.town
+
+
+
+
{% block endbody %}{% endblock %}
diff --git a/templates/blog/_base.html b/templates/blog/_base.html
index b7fcb4d..4cfa829 100644
--- a/templates/blog/_base.html
+++ b/templates/blog/_base.html
@@ -1,3 +1,3 @@
{% extends "_base.html" %}
-{% block page_title %}{{ super() }} | Blog{% endblock %}
+{% block page_title %}Blog | {{ super() }}{% endblock %}
diff --git a/templates/blog/post.html b/templates/blog/post.html
index 825a3b9..f0b1e35 100644
--- a/templates/blog/post.html
+++ b/templates/blog/post.html
@@ -3,15 +3,15 @@
{% block body_class %}blog post{% endblock %}
-{% block page_title %}{{ super() }} | {{ this.title }}{% endblock %}
+{% block page_title %}{{ this.title }} | {{ super() }}{% endblock %}
{% block main_content %}
{{ render_blog_post(this) }}
- {% if this.children.get("gallery") %}
- {{ render_gallery(this) }}
- {% endif %}
- Comments have been disabled in this blog. If you want to contact me directly please use the information at the bottom of the page.
+ In order to make a public comment on this entry please use
+
the mailing list
+ and if you want to approach me directly use the most appropriate channel from
+
the about page .
{% endblock %}
diff --git a/templates/gallery.html b/templates/gallery.html
deleted file mode 100644
index e69de29..0000000
diff --git a/templates/home.html b/templates/home.html
index 5f61a24..7e943f7 100644
--- a/templates/home.html
+++ b/templates/home.html
@@ -1,16 +1,19 @@
{% extends "_base.html" %}
+{% from "macros/blog.html" import render_blog_post %}
-{% block page_title %}{{ super() }} | {{ this.title }}{% endblock %}
+{% block page_title %}{{ this.title }} | {{ super() }}{% endblock %}
{% block main_content %}
-
-
-
-
-
- {{ this.body }}
-
-
+ Latest blog posts
+ {% for post in site.get('/blog').pagination.for_page(1).pagination.items %}
+
+ Read »
+
+ {{ post.pub_date }}
+
+
+ {% endfor %}
+ {{ this.body }}
{% endblock %}
{% block body_class %}home{% endblock %}
diff --git a/templates/macros/blog.html b/templates/macros/blog.html
index 591f64f..89f9457 100644
--- a/templates/macros/blog.html
+++ b/templates/macros/blog.html
@@ -1,39 +1,24 @@
-{% macro render_blog_post(post, from_index=false) %}
+{% macro render_blog_post(post, from_index=false, include_content=true) %}
{% set summary = post.body.html.split('') %}
-
+
Published on {{ post.pub_date }}
-
- {% if from_index and summary|length > 1 %}
- {{ summary[0] }}
-
Read more »
- {% else %}
- {{ post.body }}
+ {% if include_content %}
+
+ {% if from_index and summary|length > 1 %}
+ {{ summary[0] }}
+
Read more »
+ {% else %}
+ {{ post.body }}
+ {% endif %}
+
+ {% if not from_index and post.edit_comment %}
+
Edits
+ {{ post.edit_comment }}
{% endif %}
-
- {% if not from_index and post.edit_comment %}
- Edits
- {{ post.edit_comment }}
{% endif %}
{% endmacro %}
-
-{% macro render_gallery(post) %}
-
-
Gallery
-
- {% for attachment in post.children.get("gallery").attachments.order_by("_id") %}
-
-
-
- {% if loop.index is divisibleby(3) %}
-
- {% endif %}
- {% endfor %}
-
-
-
-{% endmacro %}
diff --git a/templates/open-source.html b/templates/open-source.html
deleted file mode 100644
index 2d353c1..0000000
--- a/templates/open-source.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% extends "_base.html" %}
-
-{% block page_title %}{{ super() }} | {{ this.title }}{% endblock %}
-
-{% block main_content %}
-
- {{ this.body }}
-
-{% endblock %}
diff --git a/templates/page.html b/templates/page.html
index a0adb17..93d6405 100644
--- a/templates/page.html
+++ b/templates/page.html
@@ -1,10 +1,11 @@
{% extends "_base.html" %}
-{% block page_title %}{{ super() }} | {{ this.title }}{% endblock %}
+{% block page_title %}{{ this.title }} | {{ super() }}{% endblock %}
{% block body_class %}{{ this.title|lower }}{% endblock %}
{% block main_content %}
+{{ this.title }}
{{ this.body }}
diff --git a/templates/portfolio.html b/templates/portfolio.html
deleted file mode 100644
index 1f00257..0000000
--- a/templates/portfolio.html
+++ /dev/null
@@ -1,34 +0,0 @@
-{% extends "_base.html" %}
-
-{% block page_title %}{{ super() }} | Portfolio{% endblock %}
-
-{% block main_content %}
-
-
Portfolio
-
-
{{ this.content }}
-
-
-
- {% for category in this.children %}
-
{{ category.name }}
- {% for item in category.children %}
-
-
- {% if category.show_images %}
-
- {% endif %}
- {% if item.description_in_list %}
-
{{ item.description }}
- {% endif %}
-
- {% endfor %}
-
- {% if not loop.last %}
{% endif %}
- {% endfor %}
-
-{% endblock %}
diff --git a/templates/portfolio_category.html b/templates/portfolio_category.html
deleted file mode 100644
index e69de29..0000000
diff --git a/templates/project.html b/templates/project.html
deleted file mode 100644
index 7836892..0000000
--- a/templates/project.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% extends "_base.html" %}
-
-{% block page_title %}{{ super() }} | Portfolio | {{ this.name }}{% endblock %}
-
-{% set images_number = this.attachments.images.count() %}
-
-{% block main_content %}
-
-
{{ this.name }}
-
-
- {% if this.date %}Date: {{ this.date.year }} {% endif %}
- {% if this.role %}Role: {{ this.role }} {% endif %}
- {% if this.stack %}Stack: {{ this.stack }} {% endif %}
- {% if this.company %}Company: {{ this.company }} {% endif %}
- {% if this.url %}URL: {{ this.url }} {% endif %}
-
-
-
{{ this.description }}
-
- {% if images_number > 0 %}
-
- {% for image in this.attachments.images %}
-
- {% endfor %}
-
-
- {% endif %}
-{% endblock %}
-
-{% block endhead %}
- {% if images_number > 0 %}
-
-
- {% endif %}
-{% endblock %}
-
-{% block endbody %}
- {% if images_number > 0 %}
-
-
-
- {% endif %}
-{% endblock %}
diff --git a/tests/tests_deploy.py b/tests/tests_deploy.py
deleted file mode 100644
index 2e2b131..0000000
--- a/tests/tests_deploy.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from urllib.parse import urlsplit
-import unittest
-import requests
-
-
-class PagesTestCase(unittest.TestCase):
- def test_http_redirect_to_https(self):
- response = requests.get('http://fmartingr.com', allow_redirects=False)
- scheme, host, *_ = urlsplit(response.headers.get("Location"))
- self.assertEqual(response.status_code, 301)
- self.assertEqual(scheme, 'https')
- self.assertEquals(host, "fmartingr.com")
-
- def test_www_redirects_to_non_www(self):
- response = requests.get('https://www.fmartingr.com', allow_redirects=False)
- scheme, host, *_ = urlsplit(response.headers.get("Location"))
- self.assertEqual(response.status_code, 301)
- self.assertEqual(scheme, 'https')
- self.assertEquals(host, "fmartingr.com")