├── .eleventy.js
├── .eleventyignore
├── .github
└── ISSUE_TEMPLATE
│ ├── feature_request.md
│ ├── i-have-a-question.md
│ └── i-m-having-trouble-with-this-template.md
├── .gitignore
├── .nvmrc
├── LICENSE
├── README.md
├── fernfolio-preview.jpeg
├── netlify.toml
├── package.json
└── src
├── 404.md
├── _11ty
├── filters
│ ├── date-filters.js
│ ├── markdown-filter.js
│ └── svg-filter.js
├── libraries
│ └── markdown-library.js
├── shortcodes
│ └── image-shortcode.js
└── utils
│ ├── browser-sync-config.js
│ └── minify-html.js
├── _data
├── global.json
├── home.json
└── metadata.json
├── _includes
├── macros
│ ├── articlelist.njk
│ └── projectlist.njk
└── partials
│ ├── drawer.njk
│ ├── footer.njk
│ ├── form.njk
│ ├── head.njk
│ ├── pagination.njk
│ └── site-header.njk
├── _layouts
├── base.njk
├── blog.njk
├── contact.njk
├── page.njk
├── post.njk
├── project.njk
└── projects.njk
├── admin
├── config.yml
├── index.html
└── preview-templates
│ ├── about.js
│ ├── article.js
│ ├── blog.js
│ ├── contact.js
│ ├── home.js
│ ├── index.js
│ ├── project.js
│ └── projects.js
├── assets
├── img
│ ├── 1177px-cat_august_2010-4.jpg
│ ├── fern-forest.jpeg
│ ├── fern-in-hand.jpeg
│ ├── icon-close.svg
│ ├── icon-fern.svg
│ ├── icon-hamburger.svg
│ ├── icon-sun.svg
│ └── logo.png
├── js
│ ├── dark-mode.js
│ ├── drawer.js
│ └── main.js
└── scss
│ ├── components
│ ├── drawer.scss
│ ├── site-footer.scss
│ └── site-header.scss
│ ├── global
│ ├── base-styles.scss
│ ├── utilites.scss
│ └── variables.scss
│ ├── layouts
│ ├── blog.scss
│ ├── contact.scss
│ ├── home.scss
│ └── projects.scss
│ ├── main.scss
│ └── third-party
│ ├── normalize.scss
│ └── prisma-theme.scss
├── favicon.ico
├── index.njk
├── pages
├── about.md
├── blog.md
├── contact.md
├── pages.json
└── projects.md
├── posts
├── code-sample.md
├── customizations.md
├── fourthpost.md
├── posts.json
├── secondpost.md
└── thirdpost.md
├── projects
├── first-project.md
├── projects.json
├── second-project.md
└── vue-component.md
└── tags
├── project-tags.njk
└── tags.njk
/.eleventy.js:
--------------------------------------------------------------------------------
1 | const eleventyNavigationPlugin = require('@11ty/eleventy-navigation');
2 | const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
3 | const imageShortcode = require('./src/_11ty/shortcodes/image-shortcode');
4 | const markdownLibrary = require('./src/_11ty/libraries/markdown-library');
5 | const minifyHtml = require('./src/_11ty/utils/minify-html');
6 | const markdownFilter = require('./src/_11ty/filters/markdown-filter');
7 | const svgFilter = require('./src/_11ty/filters/svg-filter');
8 | const browserSyncConfig = require('./src/_11ty/utils/browser-sync-config');
9 | const { readableDateFilter, machineDateFilter } = require('./src/_11ty/filters/date-filters');
10 |
11 | module.exports = function (eleventyConfig) {
12 | // Plugins
13 | eleventyConfig.addPlugin(eleventyNavigationPlugin);
14 | eleventyConfig.addPlugin(syntaxHighlight);
15 |
16 | // Filters
17 | eleventyConfig.addFilter('markdown', markdownFilter);
18 | eleventyConfig.addFilter('readableDate', readableDateFilter);
19 | eleventyConfig.addFilter('machineDate', machineDateFilter);
20 | eleventyConfig.addFilter('svg', svgFilter);
21 |
22 | // Shortcodes
23 | eleventyConfig.addNunjucksAsyncShortcode('image', imageShortcode);
24 |
25 | // Libraries
26 | eleventyConfig.setLibrary('md', markdownLibrary);
27 |
28 | // Merge data instead of overriding
29 | eleventyConfig.setDataDeepMerge(true);
30 |
31 | // Trigger a build when files in this directory change
32 | eleventyConfig.addWatchTarget('./src/assets/scss/');
33 |
34 | // Minify HTML output
35 | eleventyConfig.addTransform('htmlmin', minifyHtml);
36 |
37 | // Don't process folders with static assets
38 | eleventyConfig.addPassthroughCopy('./src/favicon.ico');
39 | eleventyConfig.addPassthroughCopy('./src/admin');
40 | eleventyConfig.addPassthroughCopy('./src/assets/img');
41 |
42 | // Allow Turbolinks to work in development mode
43 | eleventyConfig.setBrowserSyncConfig(browserSyncConfig);
44 |
45 | return {
46 | templateFormats: ['md', 'njk', 'html'],
47 | markdownTemplateEngine: 'njk',
48 | htmlTemplateEngine: 'njk',
49 | dataTemplateEngine: 'njk',
50 | passthroughFileCopy: true,
51 | dir: {
52 | input: 'src',
53 | layouts: "_layouts"
54 | },
55 | };
56 | };
57 |
--------------------------------------------------------------------------------
/.eleventyignore:
--------------------------------------------------------------------------------
1 | README.md
2 | .github/
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Enhancements. e.g. “I wish this template did this.” Suggest an idea!
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/i-have-a-question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: I have a question
3 | about: General education e.g. “How do I do this?” or “Can this template do this?”
4 | title: ''
5 | labels: question, education
6 | assignees: ''
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/i-m-having-trouble-with-this-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: I'm having trouble with this template
3 | about: Have a problem? It might be a bug! Create a report to help us improve.
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | node_modules/
3 | package-lock.json
4 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 16
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Tyler M. Roderick
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 | [](https://app.netlify.com/sites/fernfolio/deploys)
2 |
3 | # Fernfolio — An 11ty Portfolio Template
4 | Launch your personal portfolio in minutes and modify content without opening a code editor!
5 |
6 |
7 |
8 | ###
🖥 [Demo](https://fernfolio.netlify.app/)
9 |
10 | ## 🤔 What is this?
11 | An [Eleventy](https://www.11ty.io/) theme designed to simplify the process of creating a beautiful portfolio and blog. Tightly integrated with [Netlify CMS](https://www.netlifycms.org/) for flexible, Git-powered content management.
12 |
13 | ## ✨ Features
14 | * Deep integration with [Netlify CMS](https://www.netlifycms.org/). Modify content without opening a code editor.
15 | * Customizable blog and project pages with tag support
16 | * Working contact form powered by [Netlify Forms](https://www.netlify.com/products/forms/)
17 | * Fast page speeds and high lighthouse scores
18 | * Uses Markdown for content files and Nunjucks for layouts
19 | * 100% Javascript framework free
20 | * SCSS support with sane base styles
21 | * Continuous Deployment workflow via [Netlify](https://www.netlify.com/)
22 | * Responsive images generated at build time
23 | * Minified HTML with [HTMLMinifier](https://github.com/kangax/html-minifier)
24 | * Minified CSS with [cssnano](https://github.com/cssnano/cssnano)
25 | * [Turbolinks](https://github.com/turbolinks/turbolinks) integration to enable instant navigation without page refresh
26 | * Useful Nunjuck filters built in
27 |
28 |
29 | ## 🚀 Quick Start
30 | ### 1. Click the "Deploy to Netlify" button below
31 |
32 | [](https://app.netlify.com/start/deploy?repository=https://github.com/TylerMRoderick/fernfolio-11ty-template&stack=cms)
33 |
34 | This will clone this repo to your github account and will deploy a copy of the demo website to your Netlify
35 | account (you can create an account during this process if you don't have one).
36 |
37 | ### 2. Setup authentication
38 |
39 | After deploying this project, Netlify Identity will add you as a CMS user and
40 | will email you an invite. Open that email, hit the "Accept the invite" link, and that should redirect you to the deployed site. From there, you can add your password to finish user setup.
41 |
42 | ### 3. Edit some content
43 | Now that you are added as a CMS user, add `/admin` to the end of your site url, refesh the page, and log in using your new credentials. You should now see the content dashboard. Now you can start editing content!
44 |
45 | Any changes saved in the CMS will trigger a git commit in your repo. That new commit will then trigger an auto-deployplent on Netlify.
46 |
47 | ## 🏠 Local Development
48 | If you want to test things locally before deploying, follow the steps below:
49 |
50 | - open your terminal
51 | - Clone the repo locally `git clone https://github.com/TylerMRoderick/fernfolio-11ty-template.git`
52 | - Navigate to root folder: `cd fernfolio-11ty-template/`
53 | - Install the goods: `npm install`
54 | - Run it: `npm start`
55 | - You should now be able to see everything running on localhost:8080
56 |
57 | ## 💻 Development Scripts
58 |
59 | **`npm start`**
60 |
61 | > Run 11ty with hot reload at localhost:8080
62 |
63 | **`npm run build`**
64 |
65 | > Generate minified production build
66 |
67 | Use this as the "Publish command" if needed by hosting such as Netlify.
68 |
69 | ## 💡 Dark mode
70 |
71 | To enable switching from light to dark mode, `global.json` has some settings:
72 |
73 | - `enable_theme_switch`: set to `true` if you want your visitors to be able to switch theme
74 | - `default_theme`: set to `dark` or another value (which always means `light`)
75 | - `use_system_theme`: set to `true` if you want the system preference to be enforced
76 |
77 | ## 🎩 Common issues
78 |
79 | If you change the repo that was created at deploy time from public to private, you'll need to regenerate your token,
80 | as the token generated using the deploy to Netlify button can only access public repositories. To
81 | regenerate your token, head to "Settings" in your Netlify site dashboard, go to the "Identity"
82 | section, then scroll to "Services" where you'll see an "Edit settings" button. Click that and you'll
83 | see a text link to "Generate access token in GitHub".
84 |
85 | ## 🗣 Bug reports, feature requests, etc.
86 |
87 | This is a fun side project for me and I always welcome questions/comments. If you run into any problems or have a feature request, please open an issue. I try to read every one and will gladly assist you whenever possible.
88 |
89 | ## Credit
90 | *This project was originally forked from [eleventy-netlify-boilerplate](https://github.com/danurbanowicz/eleventy-netlify-boilerplate), but completely revamped to match the needs of a modern porfolio.*
91 |
--------------------------------------------------------------------------------
/fernfolio-preview.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TylerMRoderick/fernfolio-11ty-template/af491fe90e3030f8a9c08f13f9f808d7b4af2bb3/fernfolio-preview.jpeg
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "_site"
3 | command = "npm run build"
4 |
5 | # REDIRECT and HEADERS examples
6 |
7 | # Redirect rule example
8 | # For more information see:- https://www.netlify.com/docs/netlify-toml-reference/
9 |
10 | #[[redirects]]
11 | # from = "/*"
12 | # to = "/blog/:splat"
13 |
14 | # The default HTTP status code is 301, but you can define a different one e.g.
15 | # status = 302
16 |
17 | # Headers rule example
18 | # For more information see:- https://www.netlify.com/docs/netlify-toml-reference/
19 |
20 | #[[headers]]
21 | # Define which paths this specific [[headers]] block will cover.
22 | # for = "/*"
23 |
24 | #[headers.values]
25 | # X-Frame-Options = "DENY"
26 | # X-XSS-Protection = "1; mode=block"
27 | # Content-Security-Policy = "frame-ancestors https://www.facebook.com"
28 |
29 | # Redirects and headers are GLOBAL for all builds – they do not get scoped to
30 | # contexts no matter where you define them in the file.
31 | # For context-specific rules, use _headers or _redirects files, which are
32 | # applied on a PER-DEPLOY basis.
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fernfolio-11ty-template",
3 | "version": "1.0.0",
4 | "description": "The super simple portfolio template built with Eleventy and Netlify CMS",
5 | "scripts": {
6 | "start": "cross-env npm-run-all build:sass --parallel watch:*",
7 | "build": "cross-env npm-run-all build:sass build:scripts build:eleventy",
8 | "watch:scripts": "esbuild \"./src/assets/js/main.js\" --target=es6 --bundle --outfile=\"./_site/assets/js/main.bundle.js\"",
9 | "build:scripts": "esbuild \"./src/assets/js/main.js\" --target=es6 --bundle --minify --outfile=\"./_site/assets/js/main.bundle.js\"",
10 | "watch:sass": "sass --no-source-map --watch src/assets/scss:_site/assets/css/",
11 | "build:sass": "sass --no-source-map src/assets/scss/main.scss _site/assets/css/main.css",
12 | "watch:eleventy": "eleventy --serve --incremental",
13 | "build:eleventy": "eleventy",
14 | "postbuild": "postcss _site/assets/css/*.css -u autoprefixer cssnano -r --no-map",
15 | "clean": "rimraf './_site'"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "https://github.com/tylerMRoderick/fernfolio-11ty-template"
20 | },
21 | "author": {
22 | "name": "Tyler M. Roderick",
23 | "email": "troderick@protonmail.com",
24 | "url": "https://www.tylerroderick.com/"
25 | },
26 | "license": "MIT",
27 | "bugs": {
28 | "url": "https://github.com/tylerMRoderick/fernfolio-11ty-template/issues"
29 | },
30 | "homepage": "https://github.com/tylerMRoderick/fernfolio-11ty-template",
31 | "devDependencies": {
32 | "@11ty/eleventy": "^2.0.1",
33 | "@11ty/eleventy-img": "^2.0.1",
34 | "@11ty/eleventy-navigation": "^0.3.3",
35 | "@11ty/eleventy-plugin-syntaxhighlight": "^4.2.0",
36 | "autoprefixer": "^10.4.8",
37 | "cross-env": "^7.0.3",
38 | "cssnano": "^5.1.12",
39 | "esbuild": "^0.14.53",
40 | "html-minifier": "^4.0.0",
41 | "luxon": "^1.25.0",
42 | "markdown-it": "^13.0.1",
43 | "markdown-it-anchor": "^8.6.6",
44 | "npm-run-all": "^4.1.5",
45 | "path": "^0.12.7",
46 | "postcss": "^8.4.16",
47 | "postcss-cli": "^10.0.0",
48 | "postcss-scss": "^4.0.4",
49 | "rimraf": "^3.0.2",
50 | "sass": "^1.54.3",
51 | "turbolinks": "^5.2.0"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 404
3 | layout: page.njk
4 | permalink: /404.html
5 | ---
6 | Uh oh, the resource you requested isn't here. Sorry.
7 |
--------------------------------------------------------------------------------
/src/_11ty/filters/date-filters.js:
--------------------------------------------------------------------------------
1 | const { DateTime } = require('luxon');
2 |
3 | // Date formatting (human readable)
4 | function readableDateFilter (dateObj) {
5 | return DateTime.fromJSDate(dateObj).toFormat('DDD');
6 | };
7 |
8 | // Date formatting (machine readable)
9 | function machineDateFilter (dateObj) {
10 | return DateTime.fromJSDate(dateObj).toFormat('yyyy-MM-dd');
11 | }
12 |
13 | module.exports = {
14 | readableDateFilter,
15 | machineDateFilter,
16 | };
--------------------------------------------------------------------------------
/src/_11ty/filters/markdown-filter.js:
--------------------------------------------------------------------------------
1 | let markdownIt = require('markdown-it');
2 |
3 | module.exports = function (str) {
4 | return markdownIt().render(str);
5 | };
--------------------------------------------------------------------------------
/src/_11ty/filters/svg-filter.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | module.exports = function(filePath) {
5 | if (path.extname(filePath) !== '.svg') {
6 | throw new Error('svg filter requires .svg file extension');
7 | }
8 |
9 | const data = fs.readFileSync(filePath, function(err, contents) {
10 | if (err) {
11 | throw new Error(err) ;
12 | }
13 |
14 | return contents
15 | });
16 |
17 | return data.toString('utf8');
18 | }
19 |
--------------------------------------------------------------------------------
/src/_11ty/libraries/markdown-library.js:
--------------------------------------------------------------------------------
1 | let markdownIt = require('markdown-it');
2 | let anchor = require('markdown-it-anchor');
3 | const Image = require('@11ty/eleventy-img');
4 |
5 | // Customize Markdown library and settings
6 | let markdown = markdownIt({
7 | html: true,
8 | breaks: true,
9 | linkify: true
10 | }).use(anchor, {
11 | permalink: anchor.permalink.linkInsideHeader({
12 | symbol: '#',
13 | placement: 'before'
14 | })
15 | });
16 |
17 |
18 | // Add responsive image suppport to markdown files
19 | // borrowed from: https://tomichen.com/blog/posts/20220416-responsive-images-in-markdown-with-eleventy-image
20 | markdown.renderer.rules.image = function (tokens, idx) {
21 | const token = tokens[idx];
22 | const isRemoteImage = token.attrGet('src').startsWith('http');
23 | const imgSrc = isRemoteImage
24 | ? token.attrGet('src')
25 | : `.${token.attrGet('src')}`;
26 | const imgAlt = token.content;
27 | const imgTitle = token.attrGet('title');
28 | const htmlOpts = { alt: imgAlt, loading: 'lazy', decoding: 'async' };
29 | const parsed = (imgTitle || '').match(
30 | /^(?@skip(?:\[(?\d+)x(?\d+)\])? ?)?(?:\?\[(?.*?)\] ?)?(?
47 |
--------------------------------------------------------------------------------
/src/pages/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: About Me
3 | subtitle: ""
4 | metaDescription: This page is all about me
5 | date: 2017-01-01T00:00:00.000Z
6 | permalink: /about/index.html
7 | eleventyNavigation:
8 | key: About
9 | order: 1
10 | ---
11 |
12 | ### What is Fernfolio?
13 | An [Eleventy](https://www.11ty.io/) theme designed to simplify the process of creating a beautiful portfolio and blog. Tightly integrated with [Netlify CMS](https://www.netlifycms.org/) for flexible, Git-powered content management.
14 |
15 | ### Why create this?
16 |
17 | **Reason #1:** I wanted a portfolio that was simple, fast, accessible, and integrated with a git-powered cms. Existing templates didn't perfectly fit my needs, so I decided to build my own template.
18 |
19 | **Reason #2:** I wanted to learn more about [Eleventy](https://www.11ty.dev/) and static site generators in general. Building Fernfolio was a good excuse to dive deeper on that topic.
20 |
21 | ### How do I edit content?
22 | Once your site is deployed and configured, add `/admin` to the end of the url (not using localhost) and hit refresh. From there, you should be able to login and see see the content management dashboard. You should be able to change most content here (e.g. page text, images, logo, articles, projects, etc.).
23 |
24 | ### Further customizations
25 | If you want to take your customizations further, you will need to modify the project source code. Some customizations, like changing theme colors and fonts, are straightforward (those can be modified in the `variables.scss` file). Other customizations will require more in-depth solutions.
26 |
27 | If you get stuck or just have a question, feel free to create a [Github issue](https://github.com/TylerMRoderick/fernfolio-11ty-template/issues) and I will try to point you in the right direction.
28 |
29 | Thanks for checking out Fernfolio 👋 - [Tyler M. Roderick](https://www.tylerroderick.com/)
30 |
31 | 
--------------------------------------------------------------------------------
/src/pages/blog.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: blog.njk
3 | title: Articles
4 | date: 2017-01-01
5 | pagination:
6 | data: collections.post
7 | size: 20
8 | permalink: "blog{% if pagination.pageNumber > 0 %}/page/{{ pagination.pageNumber }}{% endif %}/index.html"
9 | metaDescription: A sample Blog page listing various posts.
10 | subtitle: A collection of technical blog posts and random thoughts
11 | eleventyNavigation:
12 | key: Blog
13 | order: 2
14 | ---
15 |
--------------------------------------------------------------------------------
/src/pages/contact.md:
--------------------------------------------------------------------------------
1 | ---
2 | section: contact
3 | layout: contact.njk
4 | title: Get in touch
5 | date: 2018-01-01
6 | permalink: /contact/index.html
7 | metaDescription: This is a sample meta description. If one is not present in
8 | your page/post's front matter, the default metadata.desciption will be used
9 | instead.
10 | subtitle: Contact Subtitle
11 | eleventyNavigation:
12 | key: Contact
13 | order: 4
14 | ---
15 |
16 | The contact form on this page uses [Netlify Forms](https://www.netlify.com/docs/form-handling/) to process submissions,
17 | and saves them in the connected Netlify account where notifications can
18 | optionally be configured. Each submission is passed through a spam filter and
19 | if flagged, will display a CAPTCHA challenge to the user.
20 |
--------------------------------------------------------------------------------
/src/pages/pages.json:
--------------------------------------------------------------------------------
1 | {
2 | "layout": "page.njk"
3 | }
4 |
--------------------------------------------------------------------------------
/src/pages/projects.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: projects.njk
3 | title: Projects
4 | date: 2021-01-01
5 | permalink: /projects/index.html
6 | metaDescription: A sample Projects page
7 | subtitle: This is the page where all projects will live
8 | emoji: 💻
9 | eleventyNavigation:
10 | key: Projects
11 | order: 3
12 | ---
13 |
--------------------------------------------------------------------------------
/src/posts/code-sample.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: This post contains a code sample
3 | metaDescription: Add code samples to your markdown files
4 | date: 2019-01-01T00:00:00.000Z
5 | summary: Add code samples to your markdown files
6 | tags:
7 | - tech
8 | - environment
9 | - politics
10 | - sport
11 | ---
12 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
13 |
14 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
15 |
16 | ## Section Header
17 |
18 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.
19 |
20 | ```js
21 | // this is a command
22 | function myCommand() {
23 | let counter = 0;
24 | counter++;
25 | }
26 | ```
27 | Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
28 |
--------------------------------------------------------------------------------
/src/posts/customizations.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Theme customizations
3 | date: 2020-10-15T12:23:39.598Z
4 | summary: Modify Fernfolio to meet your needs
5 | tags:
6 | - environment
7 | - sport
8 | ---
9 |
10 | ### How do I edit content?
11 | Once your site is deployed and configured, add `/admin` to the end of the url (not using localhost) and hit refresh. From there, you should be able to login and see see the content management dashboard. You should be able to change most content here (e.g. page text, images, logo, articles, projects, etc.).
12 |
13 | ### Further customizations
14 | If you want to take your customizations further, you will need to modify the project source code. Some customizations, like changing theme colors and fonts, are straightforward (those can be modified in the `variables.scss` file). Other customizations will require more in-depth solutions.
15 |
16 | If you get stuck or just have a question, feel free to create a [Github issue](https://github.com/TylerMRoderick/fernfolio-11ty-template/issues) and I will try to point you in the right direction.
17 |
--------------------------------------------------------------------------------
/src/posts/fourthpost.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Images can be added to posts
3 | date: 2020-02-03T08:00:00.000Z
4 | summary: Add an image to your post
5 | tags:
6 | - environment
7 | - politics
8 | ---
9 | The below image was added using Netlify CMS and is stored in your git repo.
10 |
11 | 
12 |
13 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
--------------------------------------------------------------------------------
/src/posts/posts.json:
--------------------------------------------------------------------------------
1 | {
2 | "layout": "post.njk",
3 | "permalink": "posts/{{ urlPath or title | slug }}/index.html",
4 | "tags": ["post"]
5 | }
6 |
--------------------------------------------------------------------------------
/src/posts/secondpost.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: This is the second example post
3 | date: 2020-01-01T08:00:00.000Z
4 | summary: Bring to the table win-win survival strategies to ensure proactive domination.
5 | tags:
6 | - sport
7 | ---
8 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
9 |
10 | ## Section Header
11 |
12 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
13 |
14 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.
15 |
--------------------------------------------------------------------------------
/src/posts/thirdpost.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: This is the third example post which has a slightly longer title than the
3 | others
4 | date: 2020-01-01T08:00:00.000Z
5 | summary: Organically grow the holistic world view of disruptive innovation
6 | tags:
7 | - tech
8 | - politics
9 | ---
10 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
11 |
12 | ```css
13 | pre,
14 | code {
15 | line-height: 1.5;
16 | }
17 | ```
18 |
19 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
20 |
21 | ## Section Header
22 |
23 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.
24 |
--------------------------------------------------------------------------------
/src/projects/first-project.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Cat Translation API
3 | emoji: 😺
4 | date: 2019-01-01T00:00:00.000Z
5 | summary: API to translate cat speech to english
6 | metaDescription: This is a sample meta description. If one is not present in
7 | your page/project's front matter, the default metadata.desciption will be used
8 | instead.
9 | tags:
10 | - golang
11 | - graphQL
12 | - aws
13 | ---
14 |
15 | ### Task
16 |
17 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
18 |
19 | ### Solution
20 |
21 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
22 |
23 | #### Image Uploaded to CMS:
24 | 
25 |
26 | #### Remote Image:
27 | 
28 |
29 |
--------------------------------------------------------------------------------
/src/projects/projects.json:
--------------------------------------------------------------------------------
1 | {
2 | "layout": "project.njk",
3 | "permalink": "projects/{{ title | slug }}/index.html",
4 | "tags": ["project"]
5 | }
6 |
--------------------------------------------------------------------------------
/src/projects/second-project.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Another NPM Package
3 | emoji: 💾
4 | metaDescription: This is a sample meta description. If one is not present in your page/project's front matter, the default metadata.desciption will be used instead.
5 | date: 2019-01-01T00:00:00.000Z
6 | summary: This is an NPM package I made
7 | tags:
8 | - javascript
9 | - node
10 | ---
11 |
12 | ### Task
13 |
14 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
15 |
16 | ### Solution
17 |
18 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
19 |
--------------------------------------------------------------------------------
/src/projects/vue-component.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vue Date Picker
3 | emoji: 🗓
4 | metaDescription: This is a sample meta description. If one is not present in your page/project's front matter, the default metadata.desciption will be used instead.
5 | date: 2019-01-01T00:00:00.000Z
6 | summary: This is a Vue component I made
7 | tags:
8 | - javascript
9 | - vue
10 | - aws
11 | ---
12 |
13 | ### Task
14 |
15 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
16 |
17 | ### Solution
18 |
19 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
20 |
--------------------------------------------------------------------------------
/src/tags/project-tags.njk:
--------------------------------------------------------------------------------
1 | ---
2 | pagination:
3 | data: collections
4 | size: 1
5 | alias: tag
6 | permalink: /project-tags/{{ tag }}/
7 | layout: base.njk
8 | renderData:
9 | title: "Projects tagged “{{ tag }}”"
10 | metaDescription: "All projects tagged with “{{ tag }}”"
11 | ---
12 |