15 Commits

Author SHA1 Message Date
Tommy Parnell
3abd5818dd one comes before another 2018-09-28 15:45:56 -04:00
Tommy Parnell
736089533b rework layers 2018-09-28 15:26:36 -04:00
Tommy Parnell
7ee7150a90 container-ify 2018-09-28 15:18:55 -04:00
Tommy Parnell
34baa913ad reduce publish time 2018-06-17 11:01:37 -04:00
Tommy Parnell
ea9208a2a4 link to blog 2018-06-17 10:41:50 -04:00
Tommy Parnell
8a6ebc9f63 swap aws and azure 2018-06-17 10:39:38 -04:00
Tommy Parnell
578a00de15 minor tweaks 2018-06-17 10:38:48 -04:00
Tommy Parnell
37d87e1a09 fix up summary 2018-06-17 09:47:29 -04:00
Tommy Parnell
97d89e4ed0 gravatar https 2018-06-17 09:30:33 -04:00
Tommy Parnell
d33d0a2177 change things 2018-06-17 09:21:07 -04:00
Tommy Parnell
82690199bb minor change 2016-10-19 09:13:53 -04:00
Tommy Parnell
d5ae2eee06 use gravatar image instead 2016-09-23 23:42:32 -04:00
Tommy Parnell
269c694555 fix file 2016-09-01 07:54:45 -04:00
Tommy Parnell
ba7a7ca2b5 add keybase 2016-09-01 07:53:31 -04:00
Tommy Parnell
9023e1ed6a change github link 2016-06-28 12:15:15 -07:00
19 changed files with 10467 additions and 22 deletions

View File

@@ -1,4 +1,5 @@
{
"directory": "components",
"json": "bower.json"
"json": "bower.json",
"allow_root": true
}

5
.dockerignore Normal file
View File

@@ -0,0 +1,5 @@
node_modules
public
db.json
components
js/bowr.js

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM node:8 as build
WORKDIR /build
COPY package.json ./
RUN npm install
COPY .bowerrc bower.json ./
RUN npm run bower install
COPY . .
RUN npm run pub
FROM nginx:mainline as runtime
COPY --from=build /build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf

1
css/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
bundle.css

File diff suppressed because one or more lines are too long

545
css/styles.css Normal file
View File

@@ -0,0 +1,545 @@
/*
* Template Name: Developer - Responsive Website Template for Developers
* Version: 1.5
* Author: Xiaoying Riley
* Twitter: @3rdwave_themes
* License: Creative Commons Attribution 3.0 License
* Website: http://themes.3rdwavemedia.com/
*/
/* ======= Base ======= */
body {
font-family: 'Lato', arial, sans-serif;
color: #434343;
background: #DAE3E7;
font-size: 16px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: 'Montserrat', sans-serif;
font-weight: 700;
color: #778492;
}
a {
color: #3AAA64;
-webkit-transition: all 0.4s ease-in-out;
-moz-transition: all 0.4s ease-in-out;
-ms-transition: all 0.4s ease-in-out;
-o-transition: all 0.4s ease-in-out;
}
a:hover {
text-decoration: underline;
color: #5f6b77;
color: #2d844e;
}
a:focus {
text-decoration: none;
}
.btn,
a.btn {
-webkit-transition: all 0.4s ease-in-out;
-moz-transition: all 0.4s ease-in-out;
-ms-transition: all 0.4s ease-in-out;
-o-transition: all 0.4s ease-in-out;
font-family: 'Montserrat', arial, sans-serif;
padding: 8px 16px;
font-weight: bold;
}
.btn .fa,
a.btn .fa {
margin-right: 5px;
}
.btn:focus,
a.btn:focus {
color: #fff;
}
a.btn-cta-primary,
.btn-cta-primary {
background: #54ba4e;
border: 1px solid #54ba4e;
color: #fff;
font-weight: 600;
text-transform: uppercase;
}
a.btn-cta-primary:hover,
.btn-cta-primary:hover {
background: #49ac43;
border: 1px solid #49ac43;
color: #fff;
}
a.btn-cta-secondary,
.btn-cta-secondary {
background: #479FC8;
border: 1px solid #479FC8;
color: #fff;
font-weight: 600;
text-transform: uppercase;
}
a.btn-cta-secondary:hover,
.btn-cta-secondary:hover {
background: #3893bd;
border: 1px solid #3893bd;
color: #fff;
}
.text-highlight {
color: #32383e;
}
.label-theme {
background: #3AAA64;
font-size: 12px;
}
a.dotted-link {
border-bottom: 1px dotted #778492;
color: #778492;
}
a.dotted-link:hover {
text-decoration: none;
color: #49515a;
}
/*
iframe {
.header {
padding: 0;
}
}
.iframe-wrapper {
overflow: auto;
-webkit-overflow-scrolling:touch;
}
*/
/* ======= Header ======= */
.header {
padding: 30px 0;
background: #f5f5f5;
border-top: 10px solid #778492;
}
.header .btn {
margin-top: 60px;
font-weight: bold;
}
.header .profile-image {
margin-right: 30px;
}
.header .profile-content .name {
color: #49515a;
font-size: 38px;
margin-bottom: 5px;
margin-top: 30px;
}
.header .profile-content .desc {
color: #778492;
font-family: "Lato", arial, sans-serif;
font-weight: 400;
font-size: 24px;
margin-top: 0;
margin-bottom: 15px;
}
.header .profile-content .social a {
background: #b0b7bf;
width: 36px;
height: 36px;
display: inline-block;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
color: #fff;
text-align: center;
}
.header .profile-content .social a:hover {
background: #778492;
}
.header .profile-content .social a .fa {
font-size: 20px;
padding-top: 8px;
}
/* ======= Sections======= */
.sections-wrapper {
padding-top: 60px;
padding-bottom: 60px;
}
.section {
margin-bottom: 30px;
}
.section .section-inner {
background: #fff;
padding: 30px;
}
.section .heading {
margin-top: 0;
margin-bottom: 30px;
color: #545e69;
font-size: 24px;
}
.section .content .more-link .fa {
margin-right: 5px;
font-size: 14px;
}
/* About Section */
/* Latest Section */
.latest .item {
margin-bottom: 30px;
}
.latest .item .title {
font-size: 18px;
margin-top: 0;
}
.latest .item .title .label {
margin-left: 5px;
font-size: 12px;
}
.latest .item .title a {
color: #778492;
}
.latest .item .title a:hover {
color: #5f6b77;
}
.latest .item .project-image:hover {
-webkit-opacity: 0.8;
-moz-opacity: 0.8;
opacity: 0.8;
}
.latest .divider {
margin-bottom: 60px;
}
.latest .featured {
margin-bottom: 60px;
}
.latest .featured .title {
margin-bottom: 5px;
font-size: 20px;
}
.latest .featured .summary {
margin-bottom: 30px;
color: #778492;
}
.latest .featured img {
margin-bottom: 30px;
}
.latest .featured .desc {
margin-bottom: 30px;
}
.latest .featured-image {
position: relative;
}
.latest .featured-image .text {
background: #3AAA64;
color: #fff;
}
.latest .featured-image .ribbon {
position: absolute;
top: -4px;
right: -4px;
width: 110px;
height: 110px;
overflow: hidden;
}
.latest .featured-image .ribbon .text {
font-family: 'Montserrat', sans-serif;
position: relative;
left: -8px;
top: 18px;
width: 158px;
padding: 10px 10px;
font-size: 15px;
font-weight: bold;
text-align: center;
text-transform: uppercase;
color: #fff;
background-color: #479FC8;
-webkit-transform: rotate(45deg) translate3d(0, 0, 0);
-moz-transform: rotate(45deg) translate3d(0, 0, 0);
-ms-transform: rotate(45deg) translate3d(0, 0, 0);
-o-transform: rotate(45deg) translate3d(0, 0, 0);
}
.latest .featured-image .ribbon .text:before,
.latest .featured-image .ribbon .text:after {
content: '';
position: absolute;
bottom: -5px;
border-top: 5px solid #276582;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
}
.latest .featured-image .ribbon .text:before {
left: 0;
}
.latest .featured-image .ribbon .text:after {
right: 0;
}
/* Projects Section */
.projects .item {
margin-bottom: 30px;
}
.projects .item .title {
font-size: 16px;
margin-top: 0;
margin-bottom: 5px;
line-height: 1.5;
}
.projects .item .title a {
color: #778492;
}
.projects .item .title a:hover {
color: #5f6b77;
}
/* Work Section */
.experience .item {
margin-bottom: 30px;
}
.experience .item .title {
font-size: 16px;
margin-top: 0;
margin-bottom: 5px;
line-height: 1.5;
}
.experience .item .title .place {
color: #999;
font-weight: normal;
}
.experience .item .title .place a {
color: #999;
}
.experience .item .title .place a:hover {
color: #666666;
}
.experience .item .title .year {
color: #999;
font-weight: normal;
}
/* Git section */
.github-graph {
margin-bottom: 30px;
}
.github-graph .js-calendar-graph-svg {
max-width: 100%;
}
.ghfeed {
height: 600px;
}
.ghfeed,
.ghfeed *,
.ghfeed *:before,
.ghfeed *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/* Info Section */
.info .fa {
margin-right: 15px;
color: #ccd1d6;
}
.info .fa.fa-envelope-o {
font-size: 14px;
}
.info ul {
margin-bottom: 0;
}
.info li {
margin-bottom: 15px;
}
.info li:last-child {
margin-bottom: 0;
}
/* Skills Section */
.skills .intro {
margin-bottom: 30px;
}
.skills .skillset .item {
margin-bottom: 30px;
}
.skills .skillset .level-title {
font-size: 16px;
position: relative;
margin-top: 0;
margin-bottom: 10;
}
.skills .skillset .level-title .level-label {
color: #ccd1d6;
font-size: 14px;
font-weight: 400;
font-family: "Lato", arial, sans-serif;
position: absolute;
right: 0;
top: 0;
}
.skills .skillset .level-bar {
height: 15px;
background: #e8e8e8;
}
.skills .skillset .level-bar-inner {
height: 15px;
background: #66cb8c;
}
/* Testimonials section */
.testimonials .item {
margin-bottom: 30px;
}
.testimonials .item:last-child {
margin-bottom: 0;
}
.testimonials .item .quote {
color: #666;
font-size: 16px;
border-left-color: #9fdeb7;
margin-bottom: 15px;
}
.testimonials .item .quote .fa {
color: #79d19a;
margin-right: 15px;
}
.testimonials .item .source {
font-size: 14px;
padding-left: 30px;
font-weight: 500;
}
.testimonials .item .source .name {
color: #939ea9;
font-weight: 600;
}
.testimonials .item .source .title {
color: #999;
}
/* Education section */
.education .item {
margin-bottom: 30px;
}
.education .item:last-child {
margin-bottom: 0;
}
.education .item .title {
font-size: 16px;
margin-top: 0;
}
.education .item .university {
font-family: "Lato", arial, sans-serif;
font-size: 13px;
color: #999;
font-weight: 600;
padding-left: 25px;
}
.education .item .university .year {
color: #b0b7bf;
font-weight: 500;
}
/* Language Section */
.languages .item {
margin-bottom: 15px;
}
.languages .item .title {
color: #778492;
}
.languages .item .level {
color: #999;
}
.languages .item:last-child {
margin-bottom: 0;
}
.languages .item .fa {
color: #79d19a;
}
/* Blog Section */
.blog .item {
margin-bottom: 30px;
}
.blog .item .title {
font-size: 18px;
line-height: 1.3;
}
.blog .item .title a {
color: #778492;
}
.blog .item .title a:hover {
color: #5f6b77;
}
.blog .item:last-child {
margin-bottom: 0;
}
/* List section */
.list ul li {
margin-bottom: 10px;
}
.list ul li .fa {
margin-right: 5px;
}
.list ul li a {
color: #778492;
}
.list ul li a:hover {
color: #49515a;
}
/* Credits */
.credits ul li {
margin-bottom: 10px;
}
.credits ul li .fa {
margin-right: 5px;
}
.credits ul li a {
color: #778492;
}
.credits ul li a:hover {
color: #49515a;
}
.credits .btn {
margin-bottom: 15px;
}
/* ======= Footer ======= */
.footer {
background: #32383e;
color: #fff;
padding: 10px 0;
}
.footer .copyright {
line-height: 1.6;
color: #a1aab4;
font-size: 14px;
}
.footer a {
color: #fff;
}
.footer .fa-heart {
color: #fb866a;
}
/* Extra small devices (phones, less than 768px) */
@media (max-width: 767px) {
.header {
text-align: center;
}
.header .profile-image {
float: none !important;
margin: 0 auto;
}
.header .profile-content {
float: none !important;
text-align: center;
}
.header .btn {
margin-top: 30px;
float: none !important;
}
.project-image {
margin-bottom: 15px;
}
}
/* Small devices (tablets, 768px and up) */
/* Medium devices (desktops, 992px and up) */
/* Large devices (large desktops, 1200px and up) */
/* Ex-Large devices (large desktops, 1200px and up) */
@media (min-width: 1400px) {
.container {
width: 1360px;
}
}

1
css/styles.min.css vendored

File diff suppressed because one or more lines are too long

19
default.conf Normal file
View File

@@ -0,0 +1,19 @@
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
rewrite ^(/tags/)(.*) https://$host/tag/$2/ permanent;
rewrite ^(/rss) /rss.xml break;
absolute_redirect off;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
}
error_page 500 502 503 504 /500/;
error_page 404 /404/;
}

View File

@@ -109,8 +109,7 @@ IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
IF EXIST "%DEPLOYMENT_TARGET%\bower.json" (
pushd "%DEPLOYMENT_TARGET%"
IF EXIST ".\components" (call rmdir .\components /S /Q)
call :ExecuteCmd !NPM_CMD! install bower
call .\node_modules\.bin\bower install
call :ExecuteCmd !NPM_CMD! run bower install
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
@@ -119,9 +118,7 @@ IF EXIST "%DEPLOYMENT_TARGET%\bower.json" (
:: 4. Install gulp
IF EXIST "%DEPLOYMENT_TARGET%\gulpfile.js" (
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd !NPM_CMD! install gulp gulp-cache-bust gulp-concat-css gulp-uglify html-minifier gulp-concat gulp-rimraf
call .\node_modules\.bin\gulp clean
call .\node_modules\.bin\gulp publish
call :ExecuteCmd !NPM_CMD! run gulp publish
IF !ERRORLEVEL! NEQ 0 goto error
popd
)

6
docker-compose.yml Normal file
View File

@@ -0,0 +1,6 @@
version: '3'
services:
webapp:
build: ./
ports:
- "8080:80"

View File

@@ -14,9 +14,9 @@ var gulp = require('gulp'),
gulp.task('watch', function() {
gulp.watch('./css/*.less', ['less']);
gulp.watch('./css/*.css');
gulp.task('watch', ['default'], function() {
gulp.watch(['./css/*.css', '!./css/bundle.css'], ['combineCss']);
gulp.watch(['./js/*.js', '!./js/bowr.js'], ['combineJs']);
});
gulp.task('clean', function(){
@@ -78,7 +78,7 @@ gulp.task('combineJs',['clean'], function() {
});
gulp.task('cachebust', function(){
gulp.task('cachebust', ['clean'], function(){
return gulp.src('index.html')
.pipe(cachebust({
type: 'timestamp'

File diff suppressed because one or more lines are too long

1
js/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
bowr.js

File diff suppressed because one or more lines are too long

74
keybase.txt Normal file
View File

@@ -0,0 +1,74 @@
==================================================================
https://keybase.io/terribledev
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://about.terribledev.io
* I am terribledev (https://keybase.io/terribledev) on keybase.
* I have a public key with fingerprint 0038 46D2 1D97 8194 BF5E D616 1ECB 05E5 739F 3C98
To do so, I am signing this object:
{
"body": {
"key": {
"eldest_kid": "010169b5f69aca723593668e275e67b2d6304110766f3cfa98c4ca8db7c4b9f4f6d10a",
"fingerprint": "003846d21d978194bf5ed6161ecb05e5739f3c98",
"host": "keybase.io",
"key_id": "1ecb05e5739f3c98",
"kid": "010169b5f69aca723593668e275e67b2d6304110766f3cfa98c4ca8db7c4b9f4f6d10a",
"uid": "ffcade3f3fbf6c5c54c09310e7b43719",
"username": "terribledev"
},
"service": {
"hostname": "about.terribledev.io",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 1
},
"ctime": 1472730864,
"expire_in": 157680000,
"prev": "da28b2e12eb2e938fe098f4ff8ec59c0aa9f624b735cfddce0ae128abbb36623",
"seqno": 7,
"tag": "signature"
}
which yields the signature:
-----BEGIN PGP MESSAGE-----
Version: Keybase OpenPGP v2.0.56
Comment: https://keybase.io/crypto
yMNGAnicrZJtUFRVHMZ3EWjYRKA0GFhMb9pkIdz3l5XaCaGENqqZFZGo7b6ci1dw
77J7dwmZTSx8S0UksRYZkZfGyLXAGIQiFYYspKnISQeQpBR1WiiM0RQku5dspg99
7Hw4Z845v+c5z/8/pyd8js6gX9gXMuqqTX5P39dV79at+eqhiRKIk4ViyFQC5YPZ
BRQIwKXY8iUBMkEwAiMkwxEiybA8S6EYwWAkSQOUIgBJcahAYjCOIDBFkiLGiyxD
8zjP0gJH8TjHiLhICgjMQgmQKNnzgNPhlOyKZgtjNE4KKCIwFI0wOCcSQCAREgE8
BxOAoDBGtWNoVbhOdmkKNRzHukCiJKtn6sY2G+8/+P85t3vWThR5VgCYiImcSPIE
T+A8zGAIDCgOxyiE0UAXcNrZDUClFeB0SlwBEIAH8iZA6oVH4oHWW62YexDLyW4l
8V/o36U5nLIi83KBSqxTFIfLpDkoxQ5NUgQ42z0zGyfZBbWlqsIDnC5JtkMmRCV5
RdLcEZxCKQymSTwBAq87JCewSRpBUCQNq0N7Rw1nggQWpTkUIChQZwajRQAztFq+
SAOeYHiYZRmRRHGOwgheFAQewKwK0yzHcWo/UQzSyiu0y5CJUmOyeaqlS8qzs4rb
CSBvd1dusE5v0IWGBGlfTWcIi/znA357MOJu1rKic6No/RtNdLzVerXnVO9la9jk
1Vsl7PrIG37/9oadAZ95j7c4pmwZ+UBW3n12amZwMfkMee3S2kE26KPYsbDDH55f
Pvj8itNVWSc2MVPk+CZ//JlAufKDc3++Y+/Q5qL+E5ERk9mLVn+XNLJvZGrrC9lJ
q49c3GK4hR0nvjC+WTHvWDNhiE1pb70x7RruuBuTbXjft94sj7sXoFG1NRWx6eKP
5f7Kpp+Dfl2ZM3oqr26P0VyRMe/MXuUt44bkjMR3op69SXS+PNUdKLKY2yxT/aHv
XvCVNfqYNGzywcW7TT5zTi/THZ5Shfq50dRmwrc7eEFwzxIdlDl2BYr4ZMvX+BPf
Y3eiW6r3H8m80tlVejjaUpb6S7C3+cvhuojKXSML59x5LPmV6SfXtF94NdHiGUtd
crJs3O1xLy2qWj6zs280VX/UdE26nLn5tz+ZbVs/6NgnYivbdqR3tis7sMjjb5cM
yU3W/saIQ7mtyPxPLScbdcfOmifi4m8ab4vhektW6fmB2gPGg6VyTfzjY5mZLWm5
Jbe7ekMvpj7at/G6bttcr9SbttbaNv+bo6/VJXWeDvn4p4SCQOGhKNGj/D4QVx13
blF6wyNDS/WVVOL0xKoBX9LwZ82F1Q/PZDz30sYDHTbz0y0v7mo12gOrclICK2Lq
r4v3R3/eUO6Pyvhj7iWB9NacfeoveB3Dtg==
=N78Z
-----END PGP MESSAGE-----
And finally, I am proving ownership of this host by posting or
appending to this document.
View my publicly-auditable identity here: https://keybase.io/terribledev
==================================================================

32
nginx.conf Normal file
View File

@@ -0,0 +1,32 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
include /etc/nginx/conf.d/*.conf;
}

6121
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,12 @@
"version": "0.0.1",
"private": true,
"scripts": {
"start": ""
"gulp": "gulp",
"bower": "bower",
"pub": "gulp publish"
},
"dependencies": {
"bower": "^1.8.4",
"html-minifier": "^0.7.2"
},
"devDependencies": {

3636
yarn.lock Normal file

File diff suppressed because it is too large Load Diff