├── .gitignore ├── LICENSE ├── README.md ├── eleventy.config.js ├── lib ├── collections │ ├── pagedPosts.js │ ├── pagedPostsByTag.js │ ├── posts.js │ └── tagList.js ├── filters │ ├── minifyJs.js │ └── readableDate.js └── transforms │ └── minifyHtml.js ├── netlify.toml ├── package.json ├── src ├── 404.njk ├── _data │ ├── author.json │ ├── menu.json │ ├── process.js │ └── site.js ├── _includes │ ├── icons │ │ ├── frown.svg │ │ ├── menu.svg │ │ └── search.svg │ ├── layouts │ │ ├── default.njk │ │ └── post.njk │ └── partials │ │ ├── disqus.njk │ │ ├── footer.njk │ │ ├── header.njk │ │ ├── paginator.njk │ │ └── post-grid.njk ├── about.njk ├── assets │ ├── css │ │ └── main.css │ ├── img │ │ ├── apple-touch-icon.png │ │ ├── favicon.png │ │ └── no-image.svg │ └── js │ │ ├── main.js │ │ └── search.js ├── index.njk ├── misc │ ├── bundle.js.njk │ ├── index.json.njk │ ├── misc.11tydata.js │ ├── robots.txt.njk │ └── sitemap.xml.njk ├── posts │ ├── comparing-yourself.md │ ├── fearlessness.md │ ├── img │ │ ├── comparing-yourself.jpg │ │ ├── much-to-do.jpg │ │ ├── small-business.jpg │ │ ├── traveling-kuy.jpg │ │ ├── typography.png │ │ └── windows-7.jpg │ ├── much-to-do.md │ ├── posts.11tydata.js │ ├── small-business.md │ ├── stop-procrastinating.md │ ├── traveling-ultralight.md │ ├── typography.md │ └── untitled-post.md ├── search.njk ├── tag.njk └── tags.njk └── tailwind.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # Local Netlify folder 107 | .netlify 108 | 109 | package-lock.json 110 | yarn.lock 111 | pnpm-lock.yaml 112 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Dafiul Haq 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vredeburg 2 | [![Netlify Status](https://api.netlify.com/api/v1/badges/a1d36fc9-4471-4679-902c-337449ccb59d/deploy-status)](https://app.netlify.com/sites/vredeburg/deploys) 3 | 4 | A simple starter project to create a blog using Eleventy and Tailwind CSS. 5 | 6 |
7 | Screenshot 8 | 9 | ![](https://i.imgur.com/QTec5Xd.jpg) 10 |
11 | 12 | See demo [here](https://vredeburg.netlify.app)! 13 | 14 | ## Getting Started 15 | 1. Clone this repository 16 | ```bash 17 | git clone https://github.com/daflh/vredeburg.git my-blog 18 | ``` 19 | 2. Navigate to the directory 20 | ```bash 21 | cd my-blog 22 | ``` 23 | 3. Install dependencies 24 | ```bash 25 | npm install 26 | ``` 27 | 28 | ### Use in development 29 | ```bash 30 | npm start 31 | ``` 32 | 33 | ### Build for production 34 | ```bash 35 | npm run build 36 | ``` 37 | 38 | ### For debugging purposes 39 | ```bash 40 | npm run debug 41 | ``` 42 | 43 | ## Configuration 44 | To change the title, description, author data, menu/nav item, etc, go to `src/_data/`. 45 | -------------------------------------------------------------------------------- /eleventy.config.js: -------------------------------------------------------------------------------- 1 | module.exports = (config) => { 2 | config.addPassthroughCopy('src/assets/img/**/*'); 3 | config.addPassthroughCopy({ 'src/posts/img/**/*': 'assets/img/' }); 4 | 5 | config.addWatchTarget("src/assets/js/"); 6 | 7 | config.addLayoutAlias('default', 'layouts/default.njk'); 8 | config.addLayoutAlias('post', 'layouts/post.njk'); 9 | 10 | config.addFilter('readableDate', require('./lib/filters/readableDate')); 11 | config.addFilter('minifyJs', require('./lib/filters/minifyJs')); 12 | 13 | config.addTransform('minifyHtml', require('./lib/transforms/minifyHtml')); 14 | 15 | config.addCollection('posts', require('./lib/collections/posts')); 16 | config.addCollection('tagList', require('./lib/collections/tagList')); 17 | config.addCollection('pagedPosts', require('./lib/collections/pagedPosts')); 18 | config.addCollection('pagedPostsByTag', require('./lib/collections/pagedPostsByTag')); 19 | 20 | return { 21 | dir: { 22 | input: 'src', 23 | output: 'dist' 24 | }, 25 | // pathPrefix: "/subfolder/", 26 | templateFormats: ['md', 'njk', 'html'], 27 | dataTemplateEngine: 'njk', 28 | markdownTemplateEngine: 'njk' 29 | }; 30 | }; 31 | -------------------------------------------------------------------------------- /lib/collections/pagedPosts.js: -------------------------------------------------------------------------------- 1 | const siteData = require('../../src/_data/site'); 2 | 3 | module.exports = (coll) => { 4 | const allPosts = require('./posts')(coll); 5 | 6 | const maxPostsPerPage = siteData.paginate; 7 | const numberOfPages = Math.ceil(allPosts.length / maxPostsPerPage); 8 | const pagedPosts = []; 9 | 10 | for (let pageNum = 1; pageNum <= numberOfPages; pageNum++) { 11 | const sliceFrom = (pageNum - 1) * maxPostsPerPage; 12 | const sliceTo = sliceFrom + maxPostsPerPage; 13 | 14 | pagedPosts.push({ 15 | number: pageNum, 16 | posts: allPosts.slice(sliceFrom, sliceTo), 17 | first: pageNum === 1, 18 | last: pageNum === numberOfPages 19 | }); 20 | } 21 | 22 | return pagedPosts; 23 | }; 24 | -------------------------------------------------------------------------------- /lib/collections/pagedPostsByTag.js: -------------------------------------------------------------------------------- 1 | const siteData = require('../../src/_data/site'); 2 | 3 | module.exports = (coll) => { 4 | const tagList = require('./tagList')(coll); 5 | 6 | const maxPostsPerPage = siteData.paginate; 7 | const pagedPosts = []; 8 | 9 | Object.keys(tagList).forEach((tagName) => { 10 | const taggedPosts = [...coll.getFilteredByTag(tagName)].reverse(); 11 | const numberOfPages = Math.ceil(taggedPosts.length / maxPostsPerPage); 12 | 13 | for (let pageNum = 1; pageNum <= numberOfPages; pageNum++) { 14 | const sliceFrom = (pageNum - 1) * maxPostsPerPage; 15 | const sliceTo = sliceFrom + maxPostsPerPage; 16 | 17 | pagedPosts.push({ 18 | tagName, 19 | number: pageNum, 20 | posts: taggedPosts.slice(sliceFrom, sliceTo), 21 | first: pageNum === 1, 22 | last: pageNum === numberOfPages 23 | }); 24 | } 25 | }); 26 | 27 | return pagedPosts; 28 | }; 29 | -------------------------------------------------------------------------------- /lib/collections/posts.js: -------------------------------------------------------------------------------- 1 | module.exports = (coll) => { 2 | const posts = [...coll.getFilteredByGlob('src/posts/*.md')]; 3 | 4 | return posts.reverse(); 5 | }; 6 | -------------------------------------------------------------------------------- /lib/collections/tagList.js: -------------------------------------------------------------------------------- 1 | function fromEntries (iterable) { 2 | return [...iterable].reduce((obj, [key, val]) => { 3 | obj[key] = val; 4 | 5 | return obj; 6 | }, {}); 7 | } 8 | 9 | /* Collection output format: 10 | { 11 | tagName: numberOfPostsWithTagName, 12 | ... 13 | } 14 | */ 15 | module.exports = (coll) => { 16 | const posts = require('./posts')(coll); 17 | 18 | const tagListArr = posts 19 | .reduce((tags, post) => { 20 | if ('tags' in post.data) { 21 | tags = tags.concat(post.data.tags); 22 | } 23 | 24 | return [...new Set(tags)]; 25 | }, []) 26 | .map((tag) => ([ 27 | tag, 28 | coll.getFilteredByTag(tag).length 29 | ])) 30 | .sort((a, b) => b[1] - a[1]); 31 | 32 | return fromEntries(tagListArr); 33 | }; 34 | -------------------------------------------------------------------------------- /lib/filters/minifyJs.js: -------------------------------------------------------------------------------- 1 | const { minify } = require('terser'); 2 | 3 | module.exports = async (code) => { 4 | if (process.env.NODE_ENV === 'production') { 5 | const minified = await minify(code); 6 | 7 | if (minified.error) { 8 | console.error('Terser error: ', minified.error); 9 | 10 | return code; 11 | } 12 | 13 | return minified.code; 14 | } 15 | 16 | return code; 17 | }; 18 | -------------------------------------------------------------------------------- /lib/filters/readableDate.js: -------------------------------------------------------------------------------- 1 | const dayjs = require('dayjs'); 2 | const utc = require('dayjs/plugin/utc'); 3 | dayjs.extend(utc); 4 | 5 | module.exports = (date) => { 6 | return dayjs(date).utc().format('D MMMM YYYY hh:mm A'); 7 | }; 8 | -------------------------------------------------------------------------------- /lib/transforms/minifyHtml.js: -------------------------------------------------------------------------------- 1 | const { minify } = require('html-minifier'); 2 | 3 | module.exports = (content, outputPath) => { 4 | if (process.env.NODE_ENV === 'production' && outputPath.endsWith('.html')) { 5 | return minify(content, { 6 | useShortDoctype: true, 7 | removeComments: true, 8 | collapseWhitespace: true 9 | }); 10 | } 11 | 12 | return content; 13 | }; 14 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "dist" 3 | command = "npm run build" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vredeburg", 3 | "version": "2.0.0", 4 | "description": "A simple starter project to create a blog using Eleventy and Tailwind CSS", 5 | "scripts": { 6 | "start": "npm run serve", 7 | "watch": "concurrently -c auto npm:css:watch npm:11ty:watch", 8 | "serve": "concurrently -c auto npm:css:watch npm:11ty:serve", 9 | "build": "npm run css:build && npm run 11ty:build", 10 | "debug": "cross-env DEBUG=Eleventy* npm run build", 11 | "11ty:watch": "cross-env NODE_ENV=development eleventy --watch --incremental", 12 | "11ty:serve": "cross-env NODE_ENV=development eleventy --serve --incremental", 13 | "11ty:build": "cross-env NODE_ENV=production eleventy", 14 | "css:watch": "tailwindcss -i src/assets/css/main.css -o dist/assets/css/main.css -w", 15 | "css:build": "tailwindcss -i src/assets/css/main.css -o dist/assets/css/main.css -m" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/daflh/vredeburg.git" 20 | }, 21 | "author": "Dafiul Haq", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/daflh/vredeburg/issues" 25 | }, 26 | "homepage": "https://github.com/daflh/vredeburg#readme", 27 | "devDependencies": { 28 | "@11ty/eleventy": "^2.0.0", 29 | "@tailwindcss/typography": "^0.5.9", 30 | "concurrently": "^7.6.0", 31 | "cross-env": "^7.0.3", 32 | "dayjs": "^1.11.7", 33 | "html-minifier": "^4.0.0", 34 | "tailwindcss": "^3.2.4", 35 | "terser": "^5.16.1" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/404.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Page Not Found 4 | permalink: 404.html 5 | --- 6 | 7 |
8 |
{% include "icons/frown.svg" %}
9 |
10 |

404

11 |

Oops! It seems you are lost

12 |

The page you're looking for might have been removed had its name changed or is temporarily unavailable.

13 | Return to homepage 14 |
15 |
-------------------------------------------------------------------------------- /src/_data/author.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Dafiul Haq", 3 | "homepage": "https://github.com/daflh", 4 | "bio": "Interested in Technology", 5 | "avatar": "https://i.imgur.com/tse467Z.jpg", 6 | "email": "your_email@example.com", 7 | "phone": "+12345654321" 8 | } -------------------------------------------------------------------------------- /src/_data/menu.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "label": "About", 4 | "url": "/about" 5 | }, 6 | { 7 | "label": "Tag List", 8 | "url": "/tags" 9 | }, 10 | { 11 | "label": "GitHub", 12 | "url": "https://github.com/daflh/vredeburg", 13 | "newTab": true 14 | } 15 | ] -------------------------------------------------------------------------------- /src/_data/process.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | environment: process.env.NODE_ENV // DON'T CHANGE 3 | }; 4 | -------------------------------------------------------------------------------- /src/_data/site.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | title: 'Vredeburg', 3 | description: 'Eleventy starter project to create a blog', 4 | keywords: ['eleventy', 'template', 'simple', 'clean'], 5 | url: 'https://vredeburg.netlify.app', // your site url without trailing slash 6 | paginate: 6 // how many posts you want to show for each page 7 | // uncomment the next line if you want to add disqus to your site 8 | // disqusShortname: "your-shortname" 9 | }; 10 | -------------------------------------------------------------------------------- /src/_includes/icons/frown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/_includes/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/_includes/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/_includes/layouts/default.njk: -------------------------------------------------------------------------------- 1 | {%- set metaTitle -%} 2 | {%- if not title -%}{{ site.title }} - {{ site.description | safe }} 3 | {%- else -%}{{ title | safe }} | {{ site.title }} 4 | {%- endif -%} 5 | {%- endset -%} 6 | {%- set metaDesc -%} 7 | {%- if not description -%}{{ site.description | safe }} 8 | {%- else -%}{{ description | safe }} 9 | {%- endif -%} 10 | {%- endset -%} 11 | {%- set metaKeywords -%} 12 | {%- if tags -%}{%- for tag in tags -%}{{ tag }},{%- endfor -%}{%- endif -%} 13 | {%- if site.keywords -%} 14 | {%- for keyword in site.keywords -%} 15 | {{ keyword }}{%- if not loop.last %},{% endif -%} 16 | {%- endfor -%} 17 | {%- endif -%} 18 | {%- endset -%} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | {{ metaTitle }} 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | {% include "partials/header.njk" %} 46 |
47 | {% if layout === "post" %} 48 | {{ content | safe }} 49 | {% else %} 50 |
51 | {{ content | safe }} 52 |
53 | {% endif %} 54 |
55 | {% include "partials/footer.njk" %} 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/_includes/layouts/post.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |

{{ title }}

8 |
Published on {{ page.date | readableDate }}
9 | {% if tags %} 10 |
11 | {% for tag in tags %} 12 | #{{ tag }} 13 | {% endfor %} 14 |
15 | {% endif %} 16 | {% if thumb %} 17 |
18 | This post thumbnail 19 |
20 | {% endif %} 21 |
22 |
23 | {{ content | safe }} 24 |
25 | {% if site.disqusShortname %} 26 |
27 | {% if process.environment === "production" %} 28 | {% include "partials/disqus.njk" %} 29 | {% else %} 30 |
Disqus comments only available for production
31 | {% endif %} 32 |
33 | {% endif %} 34 |
-------------------------------------------------------------------------------- /src/_includes/partials/disqus.njk: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /src/_includes/partials/footer.njk: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/_includes/partials/header.njk: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/_includes/partials/paginator.njk: -------------------------------------------------------------------------------- 1 |
2 | Previous 3 | Next 4 |
-------------------------------------------------------------------------------- /src/_includes/partials/post-grid.njk: -------------------------------------------------------------------------------- 1 | {%- set lazyImage = "data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%20height%3D'500'%20width%3D'960'%20style%3D'background-color%3Argb(203%2C213%2C224)'%2F%3E" -%} 2 | {% for post in paged.posts %} 3 |
4 |
5 | 6 | This post thumbnail 7 | 8 |
9 | 12 |

{{ post.data.page.date | readableDate }}

13 |

14 | {% if post.data.description %} 15 | {{ post.data.description }} 16 | {% else %} 17 | {{ post.templateContent | striptags | truncate(90, true) }} 18 | {% endif %} 19 |

20 |
21 |
22 |
23 | {% endfor %} -------------------------------------------------------------------------------- /src/about.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: About Me 4 | --- 5 | 6 |
7 | {% if author.avatar %} 8 | 9 | Author avatar 10 | 11 | {% endif %} 12 |
13 |

14 | {{ author.name }} 15 |

16 | {% if author.email %} 17 |
18 | {{ author.email }} 19 |
20 | {% endif %} 21 | {% if author.phone %} 22 |
23 | {{ author.phone }} 24 |
25 | {% endif %} 26 | {% if author.bio %} 27 |

{{ author.bio }}

28 | {% endif %} 29 |
30 |
-------------------------------------------------------------------------------- /src/assets/css/main.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | body { 7 | font-family: Inter,system-ui,-apple-system,BlinkMacSystemFont,helvetica,Arial,sans-serif; 8 | } 9 | } 10 | 11 | @layer utilities { 12 | .visually-hidden { 13 | @apply block absolute h-px w-px overflow-hidden whitespace-nowrap; 14 | clip: rect(1px 1px 1px 1px); 15 | clip: rect(1px, 1px, 1px, 1px); 16 | clip-path: inset(1px); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assets/img/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/assets/img/apple-touch-icon.png -------------------------------------------------------------------------------- /src/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/assets/img/favicon.png -------------------------------------------------------------------------------- /src/assets/img/no-image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | No Image 6 | 7 | -------------------------------------------------------------------------------- /src/assets/js/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | Hide header on scroll down & show on scroll up 3 | */ 4 | 5 | const header = document.getElementById('header'); 6 | let lastPos = document.documentElement.scrollTop; 7 | 8 | window.addEventListener('scroll', () => { 9 | const currPos = document.documentElement.scrollTop; 10 | 11 | if (currPos > lastPos) { 12 | if (currPos > header.offsetHeight) { 13 | header.classList.add('-translate-y-full'); 14 | header.classList.remove('shadow-md'); 15 | } 16 | } else { 17 | header.classList.remove('-translate-y-full'); 18 | header.classList.add('shadow-md'); 19 | } 20 | 21 | lastPos = currPos; 22 | }, false); 23 | 24 | /* 25 | Toggle the menu when pressed on hamburger button 26 | Only on mobile devices 27 | */ 28 | 29 | const menu = document.getElementById('menu'); 30 | const searchBox = document.getElementById('search'); 31 | const menuToggle = document.getElementById('menu-toggle'); 32 | 33 | menuToggle.addEventListener('click', () => { 34 | menu.classList.toggle('hidden'); 35 | searchBox.classList.toggle('hidden'); 36 | }, false); 37 | 38 | /* 39 | Lazy load images 40 | */ 41 | 42 | const lazyImages = document.getElementsByClassName('lazy'); 43 | 44 | document.addEventListener('DOMContentLoaded', () => { 45 | [...lazyImages].forEach((elem) => { 46 | const originalImage = elem.dataset.src; 47 | 48 | elem.setAttribute('src', originalImage); 49 | elem.removeAttribute('data-src'); 50 | }); 51 | }, false); 52 | -------------------------------------------------------------------------------- /src/assets/js/search.js: -------------------------------------------------------------------------------- 1 | /* 2 | Search for posts with keyword given in the parameter "q" 3 | Only run on search page ("/search/") 4 | */ 5 | 6 | class SearchPosts { 7 | async init() { 8 | const params = new URL(location.href).searchParams; 9 | 10 | this.start = Number(params.get('start')) || 1; 11 | this.size = Number(params.get('size')) || 12; 12 | 13 | this.posts = await fetch('../index.json').then((res) => { 14 | return res.json(); 15 | }); 16 | 17 | this.render(params.get('q')); 18 | } 19 | 20 | render(query) { 21 | const wrapperEl = document.getElementById('wrapper'); 22 | const searchBoxEl = document.getElementById('searchbox'); 23 | const infoEl = document.getElementById('info'); 24 | 25 | query = typeof query === 'string' ? query.toLowerCase() : ''; 26 | 27 | history.replaceState(null, null, `?q=${query}&start=${this.start}&size=${this.size}`); 28 | 29 | searchBoxEl.value = query; 30 | wrapperEl.innerHTML = ''; 31 | 32 | if (query === '') { 33 | infoEl.textContent = 'Enter keywords in the search box above'; 34 | 35 | return; 36 | } 37 | 38 | const matchedPosts = this.posts.filter((post) => { 39 | const postTitle = post.title.toLowerCase(); 40 | 41 | return postTitle.indexOf(query) !== -1; 42 | }); 43 | 44 | if (matchedPosts.length === 0) { 45 | infoEl.textContent = `No results were found for "${query}"`; 46 | 47 | return; 48 | } 49 | 50 | const size = this.size; 51 | const offset = this.start - 1; 52 | const slicedPosts = matchedPosts.slice(offset, offset + size); 53 | 54 | const lastPostIndex = offset + slicedPosts.length; 55 | const showingRange = this.start < lastPostIndex || this.start !== 1 ? `${this.start} to ${lastPostIndex}` : this.start; 56 | const extraS = matchedPosts.length > 1 ? 's' : ''; 57 | 58 | infoEl.textContent = `Showing ${showingRange} of ${matchedPosts.length} result${extraS} found for "${query}"`; 59 | 60 | slicedPosts.forEach((post) => { 61 | const { url, title, date } = post; 62 | 63 | wrapperEl.innerHTML += ` 64 |
65 | 66 |
67 |
${title}
68 |

${date}

69 |
70 |
71 |
72 | `; 73 | }); 74 | } 75 | } 76 | 77 | if (location.pathname === '/search/') { 78 | const searchBoxEl = document.getElementById('searchbox'); 79 | const searchPosts = new SearchPosts(); 80 | 81 | searchPosts.init(); 82 | 83 | searchBoxEl.addEventListener('keyup', debounce(function() { 84 | searchPosts.render(this.value); 85 | }, 400)); 86 | } 87 | 88 | // https://github.com/sindresorhus/p-debounce 89 | function debounce(fn, wait) { 90 | let timer; 91 | let resolveList = []; 92 | 93 | return function(...arguments_) { 94 | return new Promise((resolve) => { 95 | clearTimeout(timer); 96 | 97 | timer = setTimeout(() => { 98 | timer = null; 99 | 100 | const result = fn.apply(this, arguments_); 101 | 102 | for (resolve of resolveList) { 103 | resolve(result); 104 | } 105 | 106 | resolveList = []; 107 | }, wait); 108 | 109 | resolveList.push(resolve); 110 | }); 111 | }; 112 | } 113 | -------------------------------------------------------------------------------- /src/index.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | pagination: 4 | data: collections.pagedPosts 5 | size: 1 6 | alias: paged 7 | permalink: "{% if paged.number > 1 %}page/{{ paged.number }}/{% endif %}index.html" 8 | --- 9 | 10 |
11 | {% include "partials/post-grid.njk" %} 12 |
13 | 14 | {% if collections.posts.length > site.paginate %} 15 | {% include "partials/paginator.njk" %} 16 | {% endif %} -------------------------------------------------------------------------------- /src/misc/bundle.js.njk: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: "/assets/js/bundle.js" 3 | --- 4 | {% set js %} 5 | {% include "../assets/js/main.js" %} 6 | {% include "../assets/js/search.js" %} 7 | {% endset %} 8 | {{ js | minifyJs | safe }} -------------------------------------------------------------------------------- /src/misc/index.json.njk: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: "/index.json" 3 | --- 4 | [ 5 | {% for post in collections.posts %} 6 | { 7 | "url": "{{ post.url | url }}", 8 | "title": "{{ post.data.title }}", 9 | "date": "{{ post.data.page.date | readableDate }}" 10 | }{% if not loop.last %},{% endif %} 11 | {% endfor %} 12 | ] -------------------------------------------------------------------------------- /src/misc/misc.11tydata.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | eleventyExcludeFromCollections: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/misc/robots.txt.njk: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: "/robots.txt" 3 | --- 4 | User-agent: * 5 | Disallow: 6 | Sitemap: {{ site.url | url }}/sitemap.xml -------------------------------------------------------------------------------- /src/misc/sitemap.xml.njk: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: "/sitemap.xml" 3 | --- 4 | 5 | 6 | {% for item in collections.all -%} 7 | {{ site.url | url }}{{ item.url }} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /src/posts/comparing-yourself.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Stop Comparing Yourself to Others #SelfLove" 3 | date: 2019-01-16T10:00 4 | thumb: "comparing-yourself.jpg" 5 | tags: 6 | - motive 7 | --- 8 | 9 | Far quitting dwelling graceful the likewise received building. An fact so to that show am shed sold cold. Unaffected remarkably get yet introduced excellence terminated led. Result either design saw she esteem and. On ashamed no inhabit ferrars it ye besides resolve. Own judgment directly few trifling. Elderly as pursuit at regular do parlors. Rank what has into fond she. 10 | 11 | Conveying or northward offending admitting perfectly my. Colonel gravity get thought fat smiling add but. Wonder twenty hunted and put income set desire expect. Am cottage calling my is mistake cousins talking up. Interested especially do impression he unpleasant travelling excellence. All few our knew time done draw ask. 12 | 13 | Feet evil to hold long he open knew an no. Apartments occasional boisterous as solicitude to introduced. Or fifteen covered we enjoyed demesne is in prepare. In stimulated my everything it literature. Greatly explain attempt perhaps in feeling he. House men taste bed not drawn joy. Through enquire however do equally herself at. Greatly way old may you present improve. Wishing the feeling village him musical. 14 | 15 | Up unpacked friendly ecstatic so possible humoured do. Ample end might folly quiet one set spoke her. We no am former valley assure. Four need spot ye said we find mile. Are commanded him convinced dashwoods did estimable forfeited. Shy celebrated met sentiments she reasonably but. Proposal its disposed eat advanced marriage sociable. Drawings led greatest add subjects endeavor gay remember. Principles one yet assistance you met impossible. 16 | 17 | Passage its ten led hearted removal cordial. Preference any astonished unreserved mrs. Prosperous understood middletons in conviction an uncommonly do. Supposing so be resolving breakfast am or perfectly. Is drew am hill from mr. Valley by oh twenty direct me so. Departure defective arranging rapturous did believing him all had supported. Family months lasted simple set nature vulgar him. Picture for attempt joy excited ten carried manners talking how. Suspicion neglected he resolving agreement perceived at an. 18 | 19 | In show dull give need so held. One order all scale sense her gay style wrote. Incommode our not one ourselves residence. Shall there whose those stand she end. So unaffected partiality indulgence dispatched to of celebrated remarkably. Unfeeling are had allowance own perceived abilities. 20 | 21 | Examine she brother prudent add day ham. Far stairs now coming bed oppose hunted become his. You zealously departure had procuring suspicion. Books whose front would purse if be do decay. Quitting you way formerly disposed perceive ladyship are. Common turned boy direct and yet. 22 | 23 | Among going manor who did. Do ye is celebrated it sympathize considered. May ecstatic did surprise elegance the ignorant age. Own her miss cold last. It so numerous if he outlived disposal. How but sons mrs lady when. Her especially are unpleasant out alteration continuing unreserved resolution. Hence hopes noisy may china fully and. Am it regard stairs branch thirty length afford. 24 | 25 | In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much. 26 | 27 | Are own design entire former get should. Advantages boisterous day excellence boy. Out between our two waiting wishing. Pursuit he he garrets greater towards amiable so placing. Nothing off how norland delight. Abode shy shade she hours forth its use. Up whole of fancy ye quiet do. Justice fortune no to is if winding morning forming. 28 | -------------------------------------------------------------------------------- /src/posts/fearlessness.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Fearlessness: How to Stop Running from Space" 3 | description: "This post uses an external image as a thumbnail" 4 | date: 2020-02-11T17:30 5 | thumb: "https://i.imgur.com/AAVR2qH.jpg" 6 | tags: 7 | - tips 8 | - sample 9 | --- 10 | 11 | We spend our days filling in every available space, cramming in more tasks, responding to messages, checking social media and online sites, watching videos. 12 | 13 | We are afraid of empty space in our lives. 14 | 15 | The result is often a continual busyness, constant distraction and avoidance, lack of focus, lack of satisfaction with our lives. 16 | 17 | We run from silence. We run from the spaces between tasks and appointments. We run from solitude and stillness. We try to fill every second with activity, with something useful, as if silence and space are not valuable. 18 | 19 | But what are we afraid of? 20 | 21 | And who would we be if we didn’t have that fear? 22 | 23 | We’re afraid of space and stillness and silence because it highlights the uncertainty, instability, groundlessness, insecurity, shakiness that lie underneath every second of our lives. We’re afraid of having to face this instability and uncertainty, of having to feel the fear of it. 24 | 25 | Without the fear of all of the uncertainty that is highlighted by space … we become free. 26 | 27 | I know in my life, when I allow myself to have stillness, silence, solitude, simplicity and space … it leaves room to face whatever is coming up for me. It gives me room to fully feel any feelings that I’ve been avoiding. It allows me to be more honest with myself, instead of using distractions and busyness to cover up what I don’t want to see. 28 | 29 | And in the end, I develop trust that the space is not something to be feared, but rather something to be treasured. A gift, filled with learning and not knowing and shakiness and beauty. 30 | 31 | You might try allowing more space to be in your day, without filling it: 32 | 33 | * Take some time between tasks for stillness. 34 | * Sit out in nature, in silence, without technology. 35 | * When you notice yourself reaching for your phone, pause. See if you can just be still, just savor some space. 36 | * When you feel uncertainty or instability in your life (hint: it’s always there), let yourself feel it. Be present with it, without needing to run or avoid. 37 | * When you feel fear, be open-hearted with it and allow yourself fully feel it, being friendly with it. Your relationship with fear will change if you become friendly with it. 38 | * Do less, and trust that things won’t fall apart. Or if they do fall apart, you can be present with that instability. 39 | * When you’re in line, driving, eating, walking, exercising … see if you can do those things in silence, without technology, without needing to do something “useful.” Find the value in these spaces. 40 | * Notice who you are without the fear of space. 41 | 42 | Savor these spaces, their deliciousness. Savor the groundlessness, as something filled with freedom if we learn not to fear it. Be present with the fear and uncertainty, as good friends not as enemies. 43 | 44 | Let your heart be open raw tender and vulnerable, and your mind embracing the spaciousness of the vast blue sky of open awareness. -------------------------------------------------------------------------------- /src/posts/img/comparing-yourself.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/comparing-yourself.jpg -------------------------------------------------------------------------------- /src/posts/img/much-to-do.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/much-to-do.jpg -------------------------------------------------------------------------------- /src/posts/img/small-business.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/small-business.jpg -------------------------------------------------------------------------------- /src/posts/img/traveling-kuy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/traveling-kuy.jpg -------------------------------------------------------------------------------- /src/posts/img/typography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/typography.png -------------------------------------------------------------------------------- /src/posts/img/windows-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daflh/vredeburg/a4342b73dabcd0729ec8cc807ea65d54da5e8e1e/src/posts/img/windows-7.jpg -------------------------------------------------------------------------------- /src/posts/much-to-do.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "When You Have Too Much to Do" 3 | date: 2020-03-03T17:51 4 | thumb: "much-to-do.jpg" 5 | tags: tips 6 | --- 7 | 8 | You have a to-do list that scrolls on for days. You are managing multiple projects, getting lots of email and messages on different messaging systems, managing finances and personal health habits and so much more. 9 | 10 | It all keeps piling up, and it can feel overwhelming. 11 | 12 | How do you keep up with it all? How do you find focus and peace and get stuff accomplished when you have too much on your plate? 13 | 14 | In this primer, I’ll look at some key strategies and tactics for taking on an overloaded life with an open heart, lots of energy, and a smile on your face. 15 | 16 | ## The First Step: Triage 17 | 18 | Whether you’re just starting your day, or you’re in the middle of the chaos and just need to find some sanity … the first step is to get into triage mode. 19 | 20 | Triage, as you probably know, is sorting through the chaos to prioritize: what needs to be done now, what needs to be done today, what needs to be done this week, and what can wait? You’re looking at urgency, but also what’s meaningful and important. 21 | 22 | Here’s what you might do: 23 | 24 | * Pick out the things that need to be done today. Start a Short List for things you’re going to do today. That might be important tasks for big projects, urgent tasks that could result in damage if you don’t act, smaller admin tasks that you really should take care of today, and responding to important messages. I would recommend being ruthless and cutting out as much as you can, having just 5 things on your plate if that’s at all possible. Not everything needs to be done today, and not every email needs to be responded to. 25 | * Push some things to tomorrow and the rest of the week. If you have deadlines that can be pushed back (or renegotiated), do that. Spread the work out over the week, even into next week. What needs to be done tomorrow? What can wait a day or two longer? 26 | * Eliminate what you can. That might mean just not replying to some messages that aren’t that important and don’t really require a reply. It might mean telling some people that you can’t take on this project after all, or that you need to get out of the commitment that you said you’d do. Yes, this is uncomfortable. For now, just put them on a list called, “To Not Do,” and plan to figure out how to get out of them later. 27 | 28 | OK, you have some breathing room and a manageable list now! Let’s shrink that down even further and just pick one thing. 29 | 30 | ## Next: Focus on One Thing 31 | 32 | With a lot on your plate, it’s hard to pick one thing to focus on. But that’s exactly what I’m going to ask you to do. 33 | 34 | Pick one thing, and give it your focus. Yes, there are a lot of other things you can focus on. Yes, they’re stressing you out and making it hard to focus. But think about it this way: if you allow it all to be in your head all the time, that will always be your mode of being. You’ll always be thinking about everything, stressing out about it all, with a frazzled mind … unless you start shifting. 35 | 36 | The shift: 37 | 38 | * Pick something to focus on. Look at the triaged list from the first section … if you have 5-6 things on this Short List, you can assess whether there’s any super urgent, time-sensitive things you need to take care of. If there are, pick one of them. If not, pick the most important one — probably the one you have been putting off doing. 39 | * Clear everything else away. Just for a little bit. Close all browser tabs, turn off notifications, close open applications, put your phone away. 40 | * Put that one task before you, and allow yourself to be with it completely. Pour yourself into it. Think of it as a practice, of letting go (of everything else), of focus, of radical simplicity. 41 | 42 | When you’re done (or after 15-20 minutes have gone by at least), you can switch to something else. But don’t allow yourself to switch until then. 43 | 44 | By closing off all exits, by choosing one thing, by giving yourself completely to that thing … you’re now in a different mode that isn’t so stressful or spread thin. You’ve started a shift that will lead to focus and sanity. 45 | 46 | ## Third: Schedule Time to Simplify 47 | 48 | Remember the To Not Do list above? Schedule some time this week to start reducing your projects, saying no to people, getting out of commitments, crossing stuff off your task list … so that you can have some sanity back. 49 | 50 | There are lots of little things that you’ve said “yes” to that you probably shouldn’t have. That’s why you’re overloaded. Protect your more important work, and your time off, and your peace of mind, by saying “no” to things that aren’t as important. 51 | 52 | Schedule the time to simplify — you don’t have to do it today, but sometime soon — and you can then not have to worry about the things on your To Not Do list until then. 53 | 54 | ## Fourth: Practice Mindful Focus 55 | 56 | Go through the rest of the day with an attitude of “mindful focus.” That means that you are doing one thing at a time, being as present as you can, switching as little as you can. 57 | 58 | Think of it as a settling of the mind. A new mode of being. A mindfulness practice (which means you won’t be perfect at it). 59 | 60 | As you practice mindful focus, you’ll learn to practice doing things with an open heart, with curiosity and gratitude, and even joy. Try these one at a time as you get to do each task on your Short List. 61 | 62 | You’ll find that you’re not so overloaded, but that each task is just perfect for that moment. And that’s a completely new relationship with the work that you do, and a new relationship with life. 63 | -------------------------------------------------------------------------------- /src/posts/posts.11tydata.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | layout: 'post', 3 | title: 'Untitled', 4 | eleventyComputed: { 5 | permalink: (data) => `${data.page.fileSlug}/index.html`, 6 | thumb: (data) => { 7 | if (data.thumb) { 8 | if (data.thumb.search(/^https?:\/\//) !== -1) { 9 | return data.thumb; 10 | } 11 | return `/assets/img/${data.thumb}`; 12 | } else { 13 | return false; 14 | } 15 | } 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /src/posts/small-business.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "7 Things You Should Know About Running a Small Business" 3 | date: 2019-01-16T10:00 4 | thumb: "small-business.jpg" 5 | tags: 6 | - tips 7 | - business 8 | --- 9 | 10 | When you start your small business, you will quickly become aware that there are many other little, but really important things as addition to the creation of the value that your small business will ship to the customers. 11 | 12 | Before several months, I have talked with an entrepreneur who has started the business and she becomes really disappointed when she discovered that the knowledge she possessed is not enough for successful running a small business. She needs a web designer for the business website, she needs an accountant who will manage finances, she needs to handle different invoicing options… 13 | 14 | Here, I would like to highlight the ten most important things you should know about running a small business. 15 | 16 | ## You should never forget your customers. 17 | The first thing as first – your customer. Yes, they are the most important part of your entrepreneurial life, and they are the persons who will tell you what you need to do for them. That’s the basic formula for success. You should never forget the foundation you have already built about your small business. 18 | 19 | ## You will need to hire the best team for your small business. 20 | You can’t do everything yourself when it comes for running a small business. Yes, probably you can do more things when you start, but if you want to be sure that your small business will continue to run on the right way to the success you will need to hire and build the best possible team for your company. 21 | 22 | ## You should not underestimate the value of internet marketing. 23 | Today, you can’t even imagine a small business without a website and different strategies of building the online presence. Internet marketing is a powerful way to build your own community and the foundation of your small business. 24 | 25 | ## You need to be unique and differentiate your small business from the competition. 26 | I know that the easiest way to run your small business is to do what everyone else is doing. But, it’s not the winning strategy for you. If you really want to build something exceptional, you will need to be unique and differentiate your small business from the competition. I am not talking here to make radical things, but I am talking about small things where you can really be the best. 27 | 28 | ## You will need to manage risk in the most appropriate way. 29 | Running a small business will be accompanied by risk and you as an entrepreneur should be aware of it. One of your tasks as an entrepreneur will be to manage the risk around you and your small business. You will need to define the biggest risk indicators and define possible strategies to manage risk inside and outside your company. 30 | 31 | ## You will need to build managerial skills. 32 | Managerial skills are skills that a manager will need to possess to maintain high efficiency in the way how their employees complete work tasks. You will need to be aware that running a small business will require such skills. Because of that start developing your own managerial skills as quickly as possible. 33 | 34 | ## You will need to learn with the higher speed than ever before. 35 | As an entrepreneur, you probably already have high knowledge, skills and experience about the main subject of your small business. But, it is not enough for successfully running your small business. As an entrepreneur, you will need continuously to work on developing new knowledge, skills and experience at a much higher speed than ever before. -------------------------------------------------------------------------------- /src/posts/stop-procrastinating.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "How I Learned to Stop Procrastinating" 3 | description: "The end of procrastination is the art of letting go" 4 | date: 2020-02-23T02:33 5 | tags: 6 | - tips 7 | - motive 8 | - sample 9 | --- 10 | 11 | I’ve been a lifelong procrastinator, at least until recent years. I would put things off until deadline, because I knew I could come through. I came through on tests after cramming last minute, I turned articles in at the deadline after waiting until the last hour, I got things done. 12 | 13 | Until I didn’t. It turns out procrastinating caused me to miss deadlines, over and over. It stressed me out. My work was less-than-desirable when I did it last minute. Slowly, I started to realize that procrastination wasn’t doing me any favors. In fact, it was causing me a lot of grief. 14 | 15 | But I couldn’t quit. I tried a lot of things. I tried time boxing and goal setting and accountability and the Pomodoro Technique and Getting Things Done. All are great methods, but they only last so long. Nothing really worked over the long term. 16 | 17 | That’s because I wasn’t getting to the root problem. 18 | 19 | I hadn’t figured out the skill that would save me from the procrastination. 20 | 21 | Until I learned about letting go. 22 | 23 | Letting go first came to me when I was quitting smoking. I had to let go of the “need” to smoke, the use of my crutch of cigarettes to deal with stress and problems. 24 | 25 | Then I learned I needed to let go of other false needs that were causing me problems: sugar, junk food, meat, shopping, beer, possessions. I’m not saying I can never do these things again once I let go of these needs, but I let go of the idea that they’re really necessary. I let go of an unhealthy attachment to them. 26 | 27 | Then I learned that distractions and the false need to check my email and news and other things online … were causing me problems. They were causing my procrastination. 28 | 29 | So I learned to let go of those too. 30 | 31 | Here’s the process I used to let go of the distractions and false needs that cause procrastination: 32 | 33 | I paid attention to the pain they cause me, later, instead of only the temporary comfort/pleasure they gave me right away. 34 | I thought about the person I want to be, the life I want to live. I set my intentions to do the good work I think I should do. 35 | I watched my urges to check things, to go to the comfort of distractions. I saw that I wanted to escape discomfort of something hard, and go to the comfort of something familiar and easy. 36 | I realized I didn’t need that comfort. I could be in discomfort and nothing bad would happen. In fact, the best things happen when I’m in discomfort. 37 | And then I smile, and breathe, and let go. 38 | 39 | And one step at a time, become the person I want to be. 40 | -------------------------------------------------------------------------------- /src/posts/traveling-ultralight.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Getting Started with Traveling Ultralight" 3 | description: "Start by getting a small backpack and then just travel with what fits in that" 4 | date: 2020-04-23T19:00 5 | thumb: "traveling-kuy.jpg" 6 | tags: popular 7 | --- 8 | 9 | I’m on a trip at the moment, and a friend who generously let me sleep on his couch looked at my small travel backpack and commented on how little I travel with: “That’s impressive,” he said. 10 | 11 | I was a little surprised, because though I’ve gotten that comment before, it’s become normal for me to travel with just a small bag (10 lbs. or less, usually), and I have friends who travel with even less. But then I remembered that I’m far from normal in this way. 12 | 13 | I gave him a tip for getting started, and I recommend it for all of you, who want to travel light — or ultralight, as I call it, because for many people traveling light is taking a carry-on roller luggage. For me, having those roller bags is lugging too much, because you can run up stairs with it with ease, or carry it all over a city without worrying about stowing away your luggage somewhere first. It’s so much easier to travel ultralight. 14 | 15 | Here’s the tip I gave him to get started: start by getting a small backpack (less than 20 liters) and then just travel with what fits in that. 16 | 17 | That’s how to start. But you’ll probably want some guidance on what to put into the bag, and how to travel with so little. Here’s some guidance to get started: 18 | 19 | * I travel with a lightweight laptop (Macbook Air), a few clothes, my phone, earbuds and some charging cords, toiletries, and almost nothing else. A lightweight windbreaker for wind and light rain (Patagonia Houdini). An eye mask and ear plugs. A collapsible water bottle. My passport. That’s about it. No extra shoes. No books. No suit. No travel pillow. No extra camera other than my phone. I’m not sure what else everyone else brings, but none of that. 20 | * I bring clothes that I can wash in the sink or shower and that will dry overnight. Lightweight stuff that I can layer. Often they’re workout-style clothes or things from companies like Outlier or Patagonia that travel well. I don’t bring enough underwear or socks for every day of the trip, because I wash them every couple of days. I only bring one or two extra T-shirts, generally wearing the same two shirts the whole trip, even if it’s a month long. No one has ever once cared what I wear when I’m traveling. 21 | * I bring minimal toiletries: a small shaver for my head, razor, toothbrush, floss small tubes of toothpaste and shaving cream, deodorant, nail clippers, ibuprofen. 22 | * For cold places, I have thermal underwear and a couple long-sleeve layers (generally all Patagonia capilene stuff), and a beanie. I don’t usually go to places where it’s snowing (I don’t know why, maybe snow isn’t my thing), so I don’t have clothes to deal with that weather. 23 | * For warm places, I will bring flip flops and swim trunks, and leave most of the colder layers behind. 24 | 25 | That’s enough for a monthlong trip, which I’ve done multiple times with this kind of setup. For a shorter trip of a few days, I might bring even less. 26 | 27 | I really love traveling this way, and am more than willing to sacrifice bringing extra things for the luxury of traveling lightweight. 28 | 29 | By the way, you don’t need much more than this kind of setup even in everyday life. 30 | 31 | For more info on this, check out my Ultralight ebook, and my friend Tynan has a great book called Forever Nomad. 32 | -------------------------------------------------------------------------------- /src/posts/typography.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Typography" 3 | date: 2020-06-21T08:04 4 | thumb: "typography.png" 5 | tags: 6 | - popular 7 | - sample 8 | --- 9 | 10 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 11 | 12 | Nunc tristique velit ligula. Phasellus vel massa a lorem facilisis interdum ut ac erat. Sed convallis a nisi non elementum. Vivamus ac ultricies dolor. Fusce in erat rhoncus, ultrices ante placerat, vulputate odio. Aliquam porta varius enim vitae tempus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras consectetur augue mauris, in scelerisque mauris dictum nec. Pellentesque a venenatis est. Curabitur ut quam tempus, dictum elit nec, vehicula dui. Nunc vestibulum lorem ac finibus consequat. 13 | 14 | # Heading 1 15 | 16 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 17 | 18 | ## Heading 2 19 | 20 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 21 | 22 | ### Heading 3 23 | 24 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 25 | 26 | #### Heading 4 27 | 28 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 29 | 30 | ##### Heading 5 31 | 32 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 33 | 34 | ###### Heading 6 35 | 36 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 37 | 38 | ## Typography 39 | 40 | Lid est laborum et dolorum fuga, This is [an example](http://example.com/ "Title") inline link. Et harum quidem rerum facilis, **This is bold** and *emphasis* cumque nihilse impedit quo minus id quod amets untra dolor amet sad. While this is `code block()` and following is a `pre` tag 41 | 42 | print 'this is pre tag' 43 | 44 | Following is the syntax highlighted code block 45 | 46 | ```go 47 | func getCookie(name string, r interface{}) (*http.Cookie, error) { 48 | rd := r.(*http.Request) 49 | cookie, err := rd.Cookie(name) 50 | if err != nil { 51 | return nil, err 52 | } 53 | return cookie, nil 54 | } 55 | 56 | func setCookie(cookie *http.Cookie, w interface{}) error { 57 | // Get write interface registered using `Acquire` method in handlers. 58 | wr := w.(http.ResponseWriter) 59 | http.SetCookie(wr, cookie) 60 | return nil 61 | } 62 | ``` 63 | 64 | This is blockquote, Will make it *better now* 65 | 66 | > 'I want to do with you what spring does with the cherry trees.' ~ Pablo Neruda 67 | 68 | > Et harum quidem *rerum facilis* est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit 69 | 70 | Unordered list 71 | 72 | * Red 73 | * Green 74 | * Blue 75 | 76 | Ordered list 77 | 78 | 1. Red 79 | 2. Green 80 | 3. Blue 81 | 82 | ## Tables 83 | 84 | Tables aren't part of the core Markdown spec, but we supports supports them out-of-the-box. 85 | 86 | | Name | Age | 87 | | ----- | ----- | 88 | | Bob | 27 | 89 | | Alice | 23 | 90 | 91 | Inline Markdown within tables 92 | 93 | | Inline | Markdown | In | Table | 94 | | ---------- | --------- | ----------------- | ---------- | 95 | | *italics* | **bold** | ~~strikethrough~~ | `code` | -------------------------------------------------------------------------------- /src/posts/untitled-post.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: "Example of post without a title" 3 | date: 2020-04-20T18:30 4 | thumb: "windows-7.jpg" 5 | tags: sample 6 | --- 7 | 8 | Spoke as as other again ye. Hard on to roof he drew. So sell side ye in mr evil. Longer waited mr of nature seemed. Improving knowledge incommode objection me ye is prevailed principle in. Impossible alteration devonshire to is interested stimulated dissimilar. To matter esteem polite do if. 9 | 10 | Smile spoke total few great had never their too. Amongst moments do in arrived at my replied. Fat weddings servants but man believed prospect. Companions understood is as especially pianoforte connection introduced. Nay newspaper can sportsman are admitting gentleman belonging his. Is oppose no he summer lovers twenty in. Not his difficulty boisterous surrounded bed. Seems folly if in given scale. Sex contented dependent conveying advantage can use. 11 | 12 | Concerns greatest margaret him absolute entrance nay. Door neat week do find past he. Be no surprise he honoured indulged. Unpacked endeavor six steepest had husbands her. Painted no or affixed it so civilly. Exposed neither pressed so cottage as proceed at offices. Nay they gone sir game four. Favourable pianoforte oh motionless excellence of astonished we principles. Warrant present garrets limited cordial in inquiry to. Supported me sweetness behaviour shameless excellent so arranging. 13 | 14 | Dwelling and speedily ignorant any steepest. Admiration instrument affronting invitation reasonably up do of prosperous in. Shy saw declared age debating ecstatic man. Call in so want pure rank am dear were. Remarkably to continuing in surrounded diminution on. In unfeeling existence objection immediate repulsive on he in. Imprudence comparison uncommonly me he difficulty diminution resolution. Likewise proposal differed scarcely dwelling as on raillery. September few dependent extremity own continued and ten prevailed attending. Early to weeks we could. 15 | 16 | By so delight of showing neither believe he present. Deal sigh up in shew away when. Pursuit express no or prepare replied. Wholly formed old latter future but way she. Day her likewise smallest expenses judgment building man carriage gay. Considered introduced themselves mr to discretion at. Means among saw hopes for. Death mirth in oh learn he equal on. 17 | 18 | In it except to so temper mutual tastes mother. Interested cultivated its continuing now yet are. Out interested acceptance our partiality affronting unpleasant why add. Esteem garden men yet shy course. Consulted up my tolerably sometimes perpetual oh. Expression acceptance imprudence particular had eat unsatiable. 19 | 20 | Picture removal detract earnest is by. Esteems met joy attempt way clothes yet demesne tedious. Replying an marianne do it an entrance advanced. Two dare say play when hold. Required bringing me material stanhill jointure is as he. Mutual indeed yet her living result matter him bed whence. 21 | 22 | For norland produce age wishing. To figure on it spring season up. Her provision acuteness had excellent two why intention. As called mr needed praise at. Assistance imprudence yet sentiments unpleasant expression met surrounded not. Be at talked ye though secure nearer. 23 | 24 | As collected deficient objection by it discovery sincerity curiosity. Quiet decay who round three world whole has mrs man. Built the china there tried jokes which gay why. Assure in adieus wicket it is. But spoke round point and one joy. Offending her moonlight men sweetness see unwilling. Often of it tears whole oh balls share an. 25 | 26 | Speedily say has suitable disposal add boy. On forth doubt miles of child. Exercise joy man children rejoiced. Yet uncommonly his ten who diminution astonished. Demesne new manners savings staying had. Under folly balls death own point now men. Match way these she avoid see death. She whose drift their fat off. 27 | -------------------------------------------------------------------------------- /src/search.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Search 4 | --- 5 | 6 |
7 | {% include "icons/search.svg" %} 8 | 9 | 10 |
11 |
12 |
-------------------------------------------------------------------------------- /src/tag.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | eleventyExcludeFromCollections: true 4 | pagination: 5 | data: collections.pagedPostsByTag 6 | size: 1 7 | alias: paged 8 | permalink: "tags/{{ paged.tagName }}/{% if paged.number > 1 %}{{ paged.number }}/{% endif %}index.html" 9 | eleventyComputed: 10 | title: "Tagged with \"{{ paged.tagName | capitalize }}\"" 11 | --- 12 | 13 |
14 |

Tagged with

15 |

{{ paged.tagName | capitalize }}

16 |
17 |
18 | {% include "partials/post-grid.njk" %} 19 |
20 | 21 | {% if collections.tagList[paged.tagName] > site.paginate %} 22 | {% include "partials/paginator.njk" %} 23 | {% endif %} -------------------------------------------------------------------------------- /src/tags.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Tag List 4 | permalink: "tags/index.html" 5 | --- 6 | 7 |

{{ title }}

8 |
9 | {% for name, length in collections.tagList %} 10 | 11 | {{ name | capitalize }} 12 | {{ length }} 13 | 14 | {% endfor %} 15 |
-------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | './src/**/*.njk', 4 | './src/**/*.svg', 5 | './src/assets/js/*.js' 6 | ], 7 | screens: { 8 | sm: '576px', 9 | md: '768px', 10 | lg: '1024px', 11 | xl: '1280px' 12 | }, 13 | theme: { 14 | extend: { 15 | typography: (theme) => ({ 16 | DEFAULT: { 17 | css: { 18 | 'blockquote': { 19 | fontWeight: 'normal', 20 | color: theme('colors.slate.600') 21 | }, 22 | 'blockquote p:first-of-type::before': { 23 | content: '' 24 | }, 25 | 'blockquote p:last-of-type::after': { 26 | content: '' 27 | } 28 | } 29 | } 30 | }) 31 | }, 32 | }, 33 | plugins: [ 34 | require('@tailwindcss/typography') 35 | ] 36 | }; 37 | --------------------------------------------------------------------------------