├── .gitignore
├── CHANGELOG.md
├── README.md
├── docs
├── .vuepress
│ ├── config.js
│ └── public
│ │ ├── android-icon-144x144.png
│ │ ├── android-icon-192x192.png
│ │ ├── android-icon-36x36.png
│ │ ├── android-icon-48x48.png
│ │ ├── android-icon-72x72.png
│ │ ├── android-icon-96x96.png
│ │ ├── apple-icon-114x114.png
│ │ ├── apple-icon-120x120.png
│ │ ├── apple-icon-144x144.png
│ │ ├── apple-icon-152x152.png
│ │ ├── apple-icon-180x180.png
│ │ ├── apple-icon-57x57.png
│ │ ├── apple-icon-60x60.png
│ │ ├── apple-icon-72x72.png
│ │ ├── apple-icon-76x76.png
│ │ ├── apple-icon-precomposed.png
│ │ ├── apple-icon.png
│ │ ├── browserconfig.xml
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon-96x96.png
│ │ ├── favicon.ico
│ │ ├── manifest.json
│ │ ├── ms-icon-144x144.png
│ │ ├── ms-icon-150x150.png
│ │ ├── ms-icon-310x310.png
│ │ ├── ms-icon-70x70.png
│ │ └── vuepress-blog-logo.png
├── README.md
└── learn
│ └── README.md
├── package.json
├── preview.png
├── src
├── .vuepress
│ ├── config.js
│ ├── public
│ │ ├── android-chrome-192x192.png
│ │ ├── apple-touch-icon.png
│ │ ├── browserconfig.xml
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ ├── mstile-150x150.png
│ │ ├── safari-pinned-tab.svg
│ │ ├── site.webmanifest
│ │ └── vuepress-blog-logo.png
│ └── theme
│ │ ├── components
│ │ ├── ArchiveList.vue
│ │ ├── Blog.vue
│ │ ├── Post.vue
│ │ ├── PostMeta.vue
│ │ ├── PostPreview.vue
│ │ └── TagList.vue
│ │ ├── index.js
│ │ ├── layouts
│ │ └── Layout.vue
│ │ └── util.js
├── README.md
├── archive
│ └── README.md
└── blog
│ ├── README.md
│ ├── my-first-post.md
│ ├── my-fourth-post.md
│ ├── my-second-post.md
│ └── my-third-post.md
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | # Project dependencies
2 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
3 | node_modules
4 | .cache/
5 | # Build directory
6 | /public
7 | .DS_Store
8 | yarn-error.log
9 | package-lock.json
10 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 |
8 | ## [1.0.0]
9 |
10 | - Project is now deprecated
11 | - For continued updates on Ben's opinions on a blogging boilerplate, see [Ben's Blog Boilerplate](https://github.com/bencodezen/bens-blog-boilerplate)
12 |
13 | ## [0.11.0-beta]
14 |
15 | ### Added
16 |
17 | - [#41](https://github.com/bencodezen/vuepress-blog-boilerplate/issues/41) Rerelease tagging feature
18 | - [#31](https://github.com/bencodezen/vuepress-blog-boilerplate/issues/31) Add repo config to docs
19 |
20 | ### Changed
21 |
22 | - [#37](https://github.com/bencodezen/vuepress-blog-boilerplate/issues/37) Improved favicon process
23 | - Archived posts page
24 |
25 | ## [0.10.0-beta]
26 |
27 | ### Added
28 |
29 | - Explanation for logos in docs
30 | - Feature to estimate reading time on blog posts
31 |
32 | ## [0.9.0-beta]
33 |
34 | ### Added
35 |
36 | - Configured VuePress Plugin Janitor
37 |
38 | ### Changed
39 |
40 | - Google Analytics is now a plugin and configured via plugin and not in the config object directly
41 |
42 | ### Fixed
43 |
44 | - Future blog posts will no longer be output in the build directory
45 | - RSS Feed filter will now compare identical UTC timezone
46 |
47 | ### Deprecated
48 |
49 | - Limited tagging UI functionality (i.e., sort posts by tags) was removed in order to allow for better integration of official blog plugin in the near future
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # VuePress Blog Boilerplate (Deprecated)
2 |
3 |  [](https://github.com/bencodezen/vuepress-blog-boilerplate/blob/master/CHANGELOG.md) [](https://app.netlify.com/sites/vuepress-blog-boilerplate/deploys)
4 |
5 | This is a **deprecated** opinionated architecture that uses [VuePress v1.0.0-alpha](https://vuepress.vuejs.org) to power a blogging platform.
6 |
7 | ## Purpose
8 |
9 | To provide a blueprint of how blogging is possible with [VuePress v1.0.0-alpha](https://vuepress.vuejs.org/) and empower you with enough boilerplate so you feel comfortable customizing it to your liking.
10 |
11 | ## Why is it deprecated?
12 |
13 | As my work with OSS expands, I wanted the flexibility to switch tech stacks as the requirements for my own blog / site requirements increase. As a result, I do not have the time to maintain this one since it would be a separate effort from my current OSS work.
14 |
15 | To follow the latest, you can follow the new repo at [Ben's Blog Boilerplate](https://github.com/bencodezen/bens-blog-boilerplate).
16 |
17 | ## Features
18 |
19 | - Write posts in Markdown
20 | - Basic pagination sorted by most recent posts
21 | - Ability to search for posts via headings within the post
22 | - Archived posts page
23 | - Basic scheduling for future publishing
24 | - Basic tagging for posts
25 | - Automatic RSS feed generation
26 | - Easily integrate Google Analytics
27 |
28 | ## Getting Started
29 |
30 | ### Prerequisites
31 |
32 | - [NodeJS 12](https://nodejs.org/)
33 | - [yarn](https://yarnpkg.com/lang/en/docs/install/) (Recommended)
34 | - Basic knowledge of navigating the terminal
35 |
36 | ### Installation
37 |
38 | > If your plan is follow the tutorial all the way through to deployment, make sure you fork this project instead of simply cloning it!
39 |
40 | In your terminal, navigate to the desired directory where you want this project to live.
41 |
42 | ```bash
43 | # Clone the repo for local development
44 | git clone https://github.com/bencodezen/vuepress-blog-boilerplate.git
45 |
46 | # Change directory into project
47 | cd vuepress-blog-boilerplate
48 |
49 | # Install dependencies
50 | yarn
51 |
52 | # Run local server
53 | yarn dev
54 | ```
55 |
56 | You should now be able to visit [http://localhost:8080](http://localhost:8080)!
57 |
58 | ## Documentation
59 |
60 | To check out the tutorial and docs, check out [the guide](https://vuepress-blog-boilerplate.bencodezen.io/).
61 |
62 | ## Examples
63 |
64 | - [VuePress Blog Boilerplate Demo](https://vigorous-lovelace-5c861d.netlify.com/)
65 | - [BenCodeZen Blog](https://www.bencodezen.io)
66 |
67 | ## Hat Tip
68 |
69 | For those familiar with the [Vue.js](https://www.vuejs.org) ecosystem, you might be reminded of [Chris Fritz's](https://www.twitter.com/chrisvfritz) [Vue Enterprise Boilerplate](https://github.com/chrisvfritz/vue-enterprise-boilerplate) and you would be absolutely right. I thought the concept was brilliant and wanted to do something similar for the [VuePress](https://vuepress.vuejs.org) ecosystem since blogging is something that still requires a fair amount of configuration and knowledge in order to get started.
70 |
71 | And in case you didn't know, Chris Fritz is one of the core contributors to the incredible [Vue.js docs](https://vuejs.org/v2/guide/) that we all love so much. So if you would like to help support him so he can spend more time on creating awesome content for the Vue.js community, please support him by [becoming a sponsor on Patreon](https://www.patreon.com/chrisvuefritz).
72 |
--------------------------------------------------------------------------------
/docs/.vuepress/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | title: 'VuePress Blog Boilerplate',
3 | dest: './public',
4 | themeConfig: {
5 | repo: 'https://github.com/bencodezen/vuepress-blog-boilerplate',
6 | repoLabel: 'Repo',
7 | docsDir: 'src',
8 | editLinks: true,
9 | logo: '/vuepress-blog-logo.png',
10 | editLinkText: 'Found a bug? Help me improve this page!',
11 | nav: [
12 | { text: 'Home', link: '/' },
13 | { text: 'Learn', link: '/learn/' }
14 | ],
15 | version: '0.11.0-beta'
16 | },
17 | plugins: [
18 | [
19 | '@vuepress/google-analytics',
20 | {
21 | ga: 'UA-92645815-3'
22 | }
23 | ],
24 | [
25 | 'vuepress-plugin-rss',
26 | {
27 | base_url: '/',
28 | site_url: 'https://www.bencodezen.io',
29 | filter: frontmatter => frontmatter.date <= new Date(),
30 | count: 20
31 | }
32 | ]
33 | ],
34 | head: [
35 | [
36 | 'link',
37 | { rel: 'apple-touch-icon', sizes: '57x57', href: '/apple-icon-57x57.png' }
38 | ],
39 | [
40 | 'link',
41 | { rel: 'apple-touch-icon', sizes: '60x60', href: '/apple-icon-60x60.png' }
42 | ],
43 | [
44 | 'link',
45 | { rel: 'apple-touch-icon', sizes: '72x72', href: '/apple-icon-72x72.png' }
46 | ],
47 | [
48 | 'link',
49 | { rel: 'apple-touch-icon', sizes: '76x76', href: '/apple-icon-76x76.png' }
50 | ],
51 | [
52 | 'link',
53 | {
54 | rel: 'apple-touch-icon',
55 | sizes: '114x114',
56 | href: '/apple-icon-114x114.png'
57 | }
58 | ],
59 | [
60 | 'link',
61 | {
62 | rel: 'apple-touch-icon',
63 | sizes: '120x120',
64 | href: '/apple-icon-120x120.png'
65 | }
66 | ],
67 | [
68 | 'link',
69 | {
70 | rel: 'apple-touch-icon',
71 | sizes: '144x144',
72 | href: '/apple-icon-144x144.png'
73 | }
74 | ],
75 | [
76 | 'link',
77 | {
78 | rel: 'apple-touch-icon',
79 | sizes: '152x152',
80 | href: '/apple-icon-152x152.png'
81 | }
82 | ],
83 | [
84 | 'link',
85 | {
86 | rel: 'apple-touch-icon',
87 | sizes: '180x180',
88 | href: '/apple-icon-180x180.png'
89 | }
90 | ],
91 | [
92 | 'link',
93 | {
94 | rel: 'icon',
95 | type: 'image/png',
96 | sizes: '192x192',
97 | href: '/android-icon-192x192.png'
98 | }
99 | ],
100 | [
101 | 'link',
102 | {
103 | rel: 'icon',
104 | type: 'image/png',
105 | sizes: '32x32',
106 | href: '/favicon-32x32.png'
107 | }
108 | ],
109 | [
110 | 'link',
111 | {
112 | rel: 'icon',
113 | type: 'image/png',
114 | sizes: '96x96',
115 | href: '/favicon-96x96.png'
116 | }
117 | ],
118 | [
119 | 'link',
120 | {
121 | rel: 'icon',
122 | type: 'image/png',
123 | sizes: '16x16',
124 | href: '/favicon-16x16.png'
125 | }
126 | ],
127 | ['link', { rel: 'manifest', href: '/manifest.json' }],
128 | ['meta', { name: 'msapplication-TileColor', content: '#ffffff' }],
129 | [
130 | 'meta',
131 | { name: 'msapplication-TileImage', content: '/ms-icon-144x144.png' }
132 | ],
133 | ['meta', { name: 'theme-color', content: '#ffffff' }]
134 | ]
135 | }
136 |
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-144x144.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-192x192.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-36x36.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-48x48.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-72x72.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/android-icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/android-icon-96x96.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-114x114.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-120x120.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-144x144.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-152x152.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-180x180.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-57x57.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-60x60.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-72x72.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-76x76.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon-precomposed.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/apple-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/apple-icon.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 | #ffffff
--------------------------------------------------------------------------------
/docs/.vuepress/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/favicon-16x16.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/favicon-32x32.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/favicon-96x96.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/favicon.ico
--------------------------------------------------------------------------------
/docs/.vuepress/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "App",
3 | "icons": [
4 | {
5 | "src": "\/android-icon-36x36.png",
6 | "sizes": "36x36",
7 | "type": "image\/png",
8 | "density": "0.75"
9 | },
10 | {
11 | "src": "\/android-icon-48x48.png",
12 | "sizes": "48x48",
13 | "type": "image\/png",
14 | "density": "1.0"
15 | },
16 | {
17 | "src": "\/android-icon-72x72.png",
18 | "sizes": "72x72",
19 | "type": "image\/png",
20 | "density": "1.5"
21 | },
22 | {
23 | "src": "\/android-icon-96x96.png",
24 | "sizes": "96x96",
25 | "type": "image\/png",
26 | "density": "2.0"
27 | },
28 | {
29 | "src": "\/android-icon-144x144.png",
30 | "sizes": "144x144",
31 | "type": "image\/png",
32 | "density": "3.0"
33 | },
34 | {
35 | "src": "\/android-icon-192x192.png",
36 | "sizes": "192x192",
37 | "type": "image\/png",
38 | "density": "4.0"
39 | }
40 | ]
41 | }
--------------------------------------------------------------------------------
/docs/.vuepress/public/ms-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/ms-icon-144x144.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/ms-icon-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/ms-icon-150x150.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/ms-icon-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/ms-icon-310x310.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/ms-icon-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/ms-icon-70x70.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/vuepress-blog-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/docs/.vuepress/public/vuepress-blog-logo.png
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | home: true
3 | heroImage: /vuepress-blog-logo.png
4 | heroText: VuePress Blog Boilerplate
5 | tagline: An ever-evolving and opinionated dev environment for people who want to use VuePress to power their blogs.
6 | actionText: Get Started →
7 | actionLink: /learn/
8 | features:
9 | - title: Blogger First
10 | details: This framework optimizes the VuePress engine for blogging first and foremost. Includes default features like RSS feed generation, list of recent posts, etc.
11 | - title: Simplicity First
12 | details: Minimal setup with markdown-centered project structure helps you focus on writing.
13 | - title: Vue.js Powered Engine
14 | details: Enjoy the dev experience of Vue + webpack, use Vue components in markdown, and develop your theme with Vue
15 | footer: MIT Licensed | Created by BenCodeZen
16 | ---
--------------------------------------------------------------------------------
/docs/learn/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar: auto
3 | type: guide
4 | ---
5 |
6 | # VuePress Blog Boilerplate
7 |
8 | ## Introduction
9 |
10 | Welcome to my guide on how to use the [VuePress Blog Boilerplate](https://github.com/bencodezen/vuepress-blog-boilerplate/)! This project was born out of a desire to use [VuePress](https://vuepress.vuejs.org) as my blogging engine and no clear path to do so.
11 |
12 | ### Version
13 |
14 | This project is currently at `version {{ $themeConfig.version }}`.
15 |
16 | ### Purpose
17 |
18 | The objective for this project is simple:
19 |
20 | > To provide a blueprint of how blogging is possible with [VuePress](https://vuepress.vuejs.org/) and empower you with enough boilerplate so you feel comfortable customizing it to your liking.
21 |
22 | ### Features
23 |
24 | By using this boilerplate, in addition to all the awesome things that already come with [VuePress](https://vuepress.vuejs.org), you get the following out of the box:
25 |
26 | - Automatically generated recent posts on the home page
27 | - Simple Google Analytics configuration
28 | - Automatic RSS Feed Generation
29 | - Easy favicon configuration
30 | - Simple pagination on the home page
31 | - Archived page of all posts sorted by date
32 |
33 | Piece of cake right? Well time's a wasting, let's get to it!
34 |
35 | ## Getting Started
36 |
37 | ### Prerequisites
38 |
39 | - [NodeJS >= 8](https://nodejs.org/)
40 | - [yarn](https://yarnpkg.com/lang/en/docs/install/) (Optional)
41 | - Basic knowledge of navigating the terminal
42 |
43 | ### Installation
44 |
45 | ::: tip
46 | If your plan is follow the tutorial all the way through to deployment, make sure you fork this project instead of simply cloning it!
47 | :::
48 |
49 | In your terminal, navigate to the desired directory where you want this project to live.
50 |
51 | ```bash
52 | # Clone the repo for local development
53 | git clone https://github.com/bencodezen/vuepress-blog-boilerplate.git
54 |
55 | # Change directory into project
56 | cd vuepress-blog-boilerplate
57 |
58 | # Install dependencies
59 | npm install # or yarn
60 |
61 | # Run local server
62 | npm run dev # OR yarn dev
63 | ```
64 |
65 | You should now be able to visit [http://localhost:8080](http://localhost:8080) to see your local server running!
66 |
67 | ## Tutorial
68 |
69 | ### Step 1: Create your first blog post
70 |
71 | 1. Create a new file called `my-fourth-post.md` in the `./src/blog` directory
72 |
73 | Your file explorer should now look like this:
74 |
75 | ```{8}
76 | .
77 | ├── src
78 | │ └── .vuepress
79 | │ └── blog
80 | │ └── my-first-post.md
81 | │ └── my-second-post.md
82 | │ └── my-third-post.md
83 | │ └── my-fourth-post.md
84 | │ └── README.md
85 | ├── .gitignore
86 | ├── package.json
87 | ├── README.md
88 | ```
89 |
90 | 2. Open `my-fourth-post.md` in your favorite text editor.
91 |
92 | 3. Copy and paste the following into your markdown file:
93 |
94 | ```
95 | ---
96 | title: My Fourth Post
97 | date: 2018-12-28 17:22:00
98 | type: post
99 | blog: true
100 | excerpt: I'm creating my first post!
101 | tags:
102 | - Blogging
103 | - Tutorials
104 | ---
105 |
106 | # Hello!
107 |
108 | This is pretty awesome!
109 |
110 | ::: tip
111 | Aren't custom containers cool?
112 | :::
113 |
114 | > "I have a big head... and little arms." - T-rex from 'Meet the Robinsons'
115 | ```
116 |
117 | 4. Once you save, you should now see the fourth post show up on your home page!
118 |
119 | 5. :confetti_ball: You now have the ability to write all the blog posts you want!
120 |
121 | ### Step 2: Create a new page
122 |
123 | Odds are you will also want to customize the top navigation with a couple pages of your own to personalize the site. So let's create a simple About page together!
124 |
125 | 1. Create a new directory in the `./src` directory called `about`
126 |
127 | 2. Create a new file in the new `about` directory called `README.md`
128 |
129 | ```{4-5}
130 | .
131 | ├── src
132 | │ └── .vuepress
133 | │ └── about
134 | │ └── README.md
135 | │ └── blog
136 | │ └── README.md
137 | ├── .gitignore
138 | ├── package.json
139 | ├── README.md
140 | ```
141 |
142 | ::: tip
143 | `README.md` files in directories get converted to `index.html` files at build time so don't worry if it looks weird right now.
144 | :::
145 |
146 | 3. Let's just paste something simple in the `about/README.md` file.
147 |
148 | ```md
149 | # About Me
150 |
151 | I'm a great developer who has a lot of great things to share with the world.
152 | Can't wait to start writing more about topics I love and am passionate about!
153 | ```
154 |
155 | 4. Now if you visit, `http://localhost:8080/about/`, you should see your page!
156 |
157 | ::: warning
158 | If you are getting an error, just restart your VuePress server and everything should be good to go!
159 | :::
160 |
161 | ### Step 3: Add an item to the main nav
162 |
163 | 1. Open the `./src/.vuepress/config.js` file in your favorite text editor
164 |
165 | 2. Locate the section under `themeConfig.nav`:
166 |
167 | ```js{12-15}
168 | module.exports = {
169 | title: 'My New VuePress Blog',
170 | ga: '',
171 | dest: './public',
172 | themeConfig: {
173 | repo: 'https://wwww.github.com',
174 | repoLabel: 'Custom Repo Label',
175 | docsDir: 'src',
176 | logo: '/vuepress-blog-logo.png',
177 | editLinks: true,
178 | editLinkText: 'Found a bug? Help me improve this page!',
179 | nav: [
180 | { text: 'Home', link: '/' },
181 | { text: 'RSS Feed', link: '/rss.xml' }
182 | ]
183 | },
184 | ```
185 |
186 | 3. Add a new object for the About page to the `nav` array like this:
187 |
188 | ```js{14}
189 | module.exports = {
190 | title: 'My New VuePress Blog',
191 | ga: '',
192 | dest: './public',
193 | themeConfig: {
194 | repo: 'https://wwww.github.com',
195 | repoLabel: 'Custom Repo Label',
196 | docsDir: 'src',
197 | logo: '/vuepress-blog-logo.png',
198 | editLinks: true,
199 | editLinkText: 'Found a bug? Help me improve this page!',
200 | nav: [
201 | { text: 'Home', link: '/' },
202 | { text: 'About', link: '/about/' },
203 | { text: 'RSS Feed', link: '/rss.xml' }
204 | ]
205 | },
206 | ```
207 |
208 | ::: warning
209 | When you want the user to go to the `index.html` of a directory, it's critical that you put a `/` at the end of the relative link because it will break otherwise.
210 |
211 | ```js
212 | // Good
213 | { text: 'About', link: '/about/' }
214 |
215 | // Bad
216 | { text: 'About', link: '/about' }
217 | ```
218 |
219 | :::
220 |
221 | ### Step 4: Deploy your site with Netlify
222 |
223 | 1. Create an account with Netlify if you don't already have one
224 | 1. Click `New site from Git` in the upper right corner
225 | 1. Choose your Git provider
226 | 1. Authorize Netlify to have access to your repos
227 | 1. Choose your VuePress blog repo
228 | 1. Configure the following "Build & deploy" settings:
229 | - **Branch to deploy**s: master
230 | - **Build command**: `npm run build`
231 | - **Publish directory**: `public/`
232 | 1. Click `Deploy site`
233 |
234 | Now your site will automatically deploy whenever you push updates to your repo!
235 |
236 | ### Step 5: You're ready to go!
237 |
238 | You have gone from zero to one! Congratulations! :confetti_ball:
239 |
240 | For more advanced blogging features, be sure to check out the rest of the docs!
241 |
242 | ## Blogging Features
243 |
244 | ### Tags
245 |
246 | You can tag your posts in frontmatter now.
247 |
248 | Here is an example from:
249 |
250 | ```yaml
251 | ---
252 | title: A Post with Tags
253 | ...
254 | tags:
255 | - HTML
256 | - CSS
257 | - JavaScript
258 | ---
259 | ```
260 |
261 | This will expose your tags in the `BlogPostList.vue` where it will filter down the displayed posts based on what tags are selected. Users will also be able to clear out the tags whenever tags are selected.
262 |
263 | ### Scheduling Posts for Future "Publishing"
264 |
265 | This blog theme currently allows you to set future "publish"\* dates via [ISO-8601 format](https://en.wikipedia.org/wiki/ISO_8601) (i.e., YYYY-MM-DD hh:mm:ss).
266 |
267 | ### Time to Read Snippet
268 |
269 | This is currently supported through [Darren Jenning's VuePress Plugin Reading Time](https://github.com/darrenjennings/vuepress-plugin-reading-time) and is configured in the `plugin` section of `config.js`.
270 |
271 | You can find examples of its usage in `BlogPostPreview.vue` and `BlogPostList.vue` with snippets such as:
272 |
273 | ```js
274 | $page.readingTime.text
275 | ```
276 |
277 | You can find more info about [options of the reading time plugin here](https://github.com/darrenjennings/vuepress-plugin-reading-time#usage).
278 |
279 | ## Site Configuration
280 |
281 | Like any other site, there's still some manual configuration to do to add the final touches to your site. Here are the most important configurations you should consider for you blog:
282 |
283 | ### Site & Page Title
284 |
285 | On most pages, VuePress uses the following pattern:
286 |
287 | ```html
288 |
{{ $page.title }} | {{ $siteTitle }}
289 | ```
290 |
291 | #### Site Title
292 |
293 | This attribute configures the site `` element on your site. It is what determines `$siteTitle` in the VuePress app.
294 |
295 | 1. Open `./src/.vuepress/config.js` in your favorite text editor
296 |
297 | ```js{2}
298 | module.exports = {
299 | title: 'My New VuePress Blog',
300 | ...
301 | }
302 | ```
303 |
304 | 2. Update the `title` key with your desired site title as a string
305 |
306 | #### Page Title
307 |
308 | By default, VuePress will assume that the h1 in your markdown file is the page title that you want:
309 |
310 | ```md
311 | # My Heading One That Turns into a Title
312 | ```
313 |
314 | If you would like to explicitly set a specific page title, use frontmatter to overwrite the default.
315 |
316 | ```
317 | ---
318 | title: My Custom Title to Override the H1
319 | ---
320 |
321 | # My Heading One That Turns into a Title
322 | ```
323 |
324 | ### Logo
325 |
326 | The logo is responsible for the image that you see in the upper left corner. The default is for it to be blank, but I found that most people like having their logo on their site and have turned included it in the boilerplate.
327 |
328 | In order to update your logo, this is controlled in your `config.js` file under the `themeConfig` key:
329 |
330 | ```js{6}
331 | module.exports = {
332 | title: 'My New VuePress Blog',
333 | dest: './public',
334 | themeConfig: {
335 | ...,
336 | logo: '/vuepress-blog-logo.png'
337 | }
338 | }
339 | ```
340 |
341 | The path to your image is based on `.vuepress/public` directory.
342 |
343 | #### Examples
344 |
345 | ```js
346 | // If your logo is in `.vuepress/public/your-logo.png`
347 | module.exports = {
348 | themeConfig: {
349 | logo: '/your-logo.png'
350 | }
351 | }
352 |
353 | // If your logo is in `.vuepress/public/img/your-logo.png`
354 | module.exports = {
355 | themeConfig: {
356 | logo: '/img/your-logo.png'
357 | }
358 | }
359 | ```
360 |
361 | ### Repo
362 |
363 | This is your repo link that will be used for features like [Edit this page](https://v1.vuepress.vuejs.org/theme/default-theme-config.html#git-repo-and-edit-links) and the repo link.
364 |
365 | This is controlled in `.vuepress/config.js` under `themeConfig`.
366 |
367 | ```js
368 | module.exports = {
369 | ...
370 | themeConfig: {
371 | ...
372 | // The URL used for generating any features related to the URL
373 | repo: 'https://wwww.github.com',
374 | // The label that is used in the top nav
375 | repoLabel: 'Repo',
376 | ...
377 | }
378 | }
379 | ```
380 |
381 | ### Google Analytics
382 |
383 | Odds are pretty good that you'd like to do some metric tracking for visitors to your blog and such. So luckily it's really easy to add your Google Analytics ID:
384 |
385 | 1. Login to your Google Analytics account
386 | 2. Create a new account for your site if you haven't already
387 | 3. Visit the `Admin` section of your account
388 | 4. Look for `Tracking Info` > `Tracking Code`
389 | 5. Copy the tracking ID to the clipboard:
390 | - It should look something like `UA-12345678-1`
391 | 6. Open `./src/.vuepress/config.js` in your favorite text editor
392 | 7. Update the `ga` property with your tracking ID
393 |
394 | ```js{4-9}
395 | module.exports = {
396 | title: 'My New VuePress Blog',
397 | ...
398 | plugins: [
399 | '@vuepress/google-analytics',
400 | {
401 | 'ga': '' // UA-00000000-0
402 | }
403 | ]
404 | ...
405 | }
406 | ```
407 |
408 | ### Favicon
409 |
410 | Everything is already configured for favicons on your page. All you need to do is:
411 |
412 | 1. Use [Favicon Generator](https://realfavicongenerator.net/) to generate the appropriate files for favicons
413 | - And if you're wondering, I just used the default settings for this boilerplate
414 | 2. Replace all the files in `./src/.vuepress/public` and your favicon should just show up!
415 |
416 | ::: tip
417 | In the event you need to manually modify the HTML elements related to favicon can be found in `./src/.vuepress/config.js` under the `head` key.
418 |
419 | ```js
420 | module.exports = {
421 | head: [
422 | ['link', { rel: 'icon', sizes: '32x32', href: '/favicon-32x32.png' }],
423 | ...
424 | ]
425 | }
426 | ```
427 |
428 | :::
429 |
430 | ### Site Repository
431 |
432 | Given that VuePress is designed to optimize for technical documentation, the default theme has a priority to make the repository as easy to as access as possible.
433 |
434 | #### Site Nav Item
435 |
436 | When you start up your environment, you'll notice that the main navigation has the repo in the upper right. It's configured in `./src/.vuepress/config.js`:
437 |
438 | ```js{6-7}
439 | module.exports = {
440 | title: 'My New VuePress Blog',
441 | ga: '',
442 | dest: './public',
443 | themeConfig: {
444 | repo: 'https://wwww.github.com',
445 | repoLabel: 'Repo'
446 | },
447 | ...
448 | }
449 | ```
450 |
451 | - `themeConfig.repo`: This is the link that (1) determines whether the nav item displays and (2) Serves as the foundation for the Edit Links feature.
452 | - `themeConfig.repoLabel`: The default is the hosting provider (i.e., GitLab or GitHub), but I think that's misleading from a semantic perspective since the user is going to your repo and not the company site "GitLab" or "GitHub". So I'm recommending "Repo" as an alternative.
453 |
454 | #### Edit Links
455 |
456 | Another great feature about VuePress is the ability to allow users to easily submit PRs to the page. That is configured here in `./src/.vuepress/config.js`:
457 |
458 | ```js{8-9}
459 | module.exports = {
460 | title: 'My New VuePress Blog',
461 | ga: '',
462 | dest: './public',
463 | themeConfig: {
464 | repo: 'https://wwww.github.com',
465 | repoLabel: 'Repo',
466 | editLinks: true,
467 | editLinkText: 'Found a bug? Help me improve this page!',
468 | },
469 | ...
470 | }
471 | ```
472 |
473 | - `themeConfig.editLinks`: This is turned off by default, but by adding this in with the boolean of true, it will generate the default text of "Edit this page" on the bottom of each page
474 | - `themeConfig.editLinkText`: This override the default text generated by `themeConfig.editLinks`
475 |
476 | ::: warning
477 | If the `themeConfig.repo` is not filled in, this feature will not work since it uses the repo link to generate the proper links.
478 | :::
479 |
480 | ## Architecture
481 |
482 | ### How BlogPostList generates the posts
483 |
484 | All blog posts are currently expected to live in the `./src/blog` directory in order for the `` component to render the preview of your post.
485 |
486 | ```{5-8}
487 | .
488 | ├── src
489 | │ └── .vuepress
490 | │ └── about
491 | │ └── blog
492 | │ └── my-first-post.md
493 | │ └── my-second-post.md
494 | │ └── my-third-post.md
495 | │ └── contact
496 | │ └── README.md
497 | ├── .gitignore
498 | ├── package.json
499 | ├── README.md
500 | ```
501 |
502 | ::: tip
503 | In case you're wondering, `` will automatically be sorted by date when the list is generated.
504 | :::
505 |
506 | ### How the RSS feed is generated
507 |
508 | The `rss.xml` file being generated at build time uses the [VuePress Plugin RSS](https://github.com/youngtailors/vuepress-plugin-rss) repo. Although not clear on the site, the determining factor for what determines whether something is added to the RSS feed is whether there is a frontend matter property of `type` with the value `post`.
509 |
510 | ```yaml
511 | # This will get picked up by the RSS plugin
512 | ---
513 | title: The Post I Want to Add to RSS
514 | type: post
515 | ---
516 | # This will not get picked up by the RSS plugin
517 | ---
518 | title: The Post I Want to Add to RSS But Will Be Missing
519 | ---
520 |
521 | ```
522 |
523 | In addition, I've configured an additional filter to check for posts that are set to be published in the future. After all, wouldn't that be weird to get a post in your RSS feed update that has a date in the future? :laughing:
524 |
525 | ## FAQs
526 |
527 | ### Why VuePress?
528 |
529 | Many are probably wondering why use VuePress? After all, there are a ton of tools out there already built and optimized for blogging aren't there? And you would be absolutely correct! But in my work with VuePress so far, I found the engine quite powerful and intuitive to how I wanted to be able to write:
530 |
531 | - Static site generator
532 | - Minimal setup with markdown-centered project to help you focus on writing
533 | - YAML Frontmatter for managing page specific meta data
534 | - Use Vue components in your markdown content
535 | - Develop custom themes with Vue
536 | - Integrated markdown extensions that make the writing experience even easier. Examples include:
537 | - [Custom containers](https://vuepress.vuejs.org/guide/markdown.html#custom-containers)
538 | - [Code syntax highlighting](https://vuepress.vuejs.org/guide/markdown.html#line-highlighting-in-code-blocks)
539 |
540 | And since it seemed like this was something other people wanted to do, I figured I would go ahead and see how far I could take this.
541 |
542 | ### Why is this separate from the VuePress repo?
543 |
544 | As many of you might have experienced in the past, getting PRs reviewed and integrated into an existing open-source project is fairly difficult to do. And this is by no means the fault of the maintainers, there's just a lot going on and people clamoring for attention. So rather than have my work hidden from the world while it sits in a PR, my goal is to:
545 |
546 | 1. Keep updating this repo and guide so that people can make use of it and create content
547 | 2. Integrate the latest changes from the core VuePress repo in order to ensure the work is not duplicated
548 | 3. Submit PRs until this page will become an artifact of the past and everything will live in the core VuePress docs itself.
549 |
550 | ### What if I want my home page to be my blog posts rather than the static content?
551 |
552 | The page that shows up on the home page (`/src/README.md`) is controlled via its `home` boolean property in the frontmatter. To add in your list of blog posts, you just need to delete this property and copy in the `BlogPostList` component.
553 |
554 | ```
555 |
560 | ```
561 |
562 | From there, you can customize the page as you see fit!
563 |
564 | ::: tip Note
565 | This is not a perfect solution from a configuration standpoint, but I will make sure this is easier in future interations on the boilerplate!
566 | :::
567 |
568 | ## Hat Tip
569 |
570 | For those familiar with the [Vue.js](https://www.vuejs.org) ecosystem, you might be reminded of [Chris Fritz's](https://www.twitter.com/chrisvfritz) [Vue Enterprise Boilerplate](https://github.com/chrisvfritz/vue-enterprise-boilerplate) and you would be absolutely right. I thought the concept was brilliant and wanted to do something similar for the [VuePress](https://vuepress.vuejs.org) ecosystem since blogging is something that still requires a fair amount of configuration and knowledge in order to get started.
571 |
572 | And in case you didn't know, Chris Fritz is one of the core contributors to the incredible [Vue.js docs](https://vuejs.org/v2/guide/) that we are love so much. So if you would like to help support him so he can spend more time on creating awesome content for the Vue.js community, please support him by [becoming a sponsor on Patreon](https://www.patreon.com/chrisvuefritz).
573 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vuepress-blog",
3 | "description": "This is a basic template to use VuePress as your blogging platform",
4 | "version": "0.11.0-beta",
5 | "license": "MIT",
6 | "scripts": {
7 | "dev": "vuepress dev src",
8 | "dev:docs": "vuepress dev docs",
9 | "build": "vuepress build src",
10 | "build:docs": "vuepress build docs"
11 | },
12 | "dependencies": {},
13 | "devDependencies": {
14 | "@vuepress/plugin-google-analytics": "~1.0.0-alpha.0",
15 | "@vuepress/theme-default": "^1.2.0",
16 | "vuepress": "~1.0.0-alpha.30",
17 | "vuepress-plugin-janitor": "1.0.0",
18 | "vuepress-plugin-reading-time": "0.1.1",
19 | "vuepress-plugin-rss": "2.0.0",
20 | "yaml-front-matter": "4.0.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/preview.png
--------------------------------------------------------------------------------
/src/.vuepress/config.js:
--------------------------------------------------------------------------------
1 | const currentDateUTC = new Date().toUTCString()
2 |
3 | module.exports = {
4 | title: 'My New VuePress Blog',
5 | dest: './public',
6 | themeConfig: {
7 | repo: 'https://wwww.github.com',
8 | repoLabel: 'Repo',
9 | editLinks: true,
10 | editLinkText: 'Found a bug? Help me improve this page!',
11 | nav: [
12 | { text: 'Home', link: '/' },
13 | { text: 'Blog', link: '/blog/' },
14 | { text: 'Archive', link: '/archive/' },
15 | { text: 'RSS Feed', link: '/rss.xml' }
16 | ],
17 | logo: '/vuepress-blog-logo.png',
18 | docsDir: 'src',
19 | pageSize: 5,
20 | startPage: 0,
21 | lastUpdated: 'Last updated'
22 | },
23 | plugins: [
24 | [
25 | '@vuepress/google-analytics',
26 | {
27 | ga: '' // UA-00000000-0
28 | }
29 | ],
30 | [
31 | 'vuepress-plugin-rss',
32 | {
33 | base_url: '/',
34 | site_url: 'https://vuepressblog.org',
35 | filter: frontmatter => frontmatter.date <= new Date(currentDateUTC),
36 | count: 20
37 | }
38 | ],
39 | 'vuepress-plugin-reading-time',
40 | 'vuepress-plugin-janitor'
41 | ],
42 | head: [
43 | ['link', { rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-icon.png' }],
44 | ['link', { rel: 'icon', sizes: '32x32', href: '/favicon-32x32.png' }],
45 | ['link', { rel: 'icon', sizes: '16x16', href: '/favicon-16x16.png' }],
46 | ['link', { rel: 'manifest', href: '/site.webmanifest' }],
47 | ['link', { rel: 'mask-icon', href: '/safari-pinned-tab.svg', color: '#5bbad5' }],
48 | ['meta', { name: 'msapplication-TileColor', content: '#da532c' }],
49 | ['meta', { name: 'theme-color', content: '#ffffff' }]
50 | ]
51 | }
52 |
--------------------------------------------------------------------------------
/src/.vuepress/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/src/.vuepress/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/.vuepress/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/.vuepress/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/favicon-16x16.png
--------------------------------------------------------------------------------
/src/.vuepress/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/favicon-32x32.png
--------------------------------------------------------------------------------
/src/.vuepress/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/favicon.ico
--------------------------------------------------------------------------------
/src/.vuepress/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/mstile-150x150.png
--------------------------------------------------------------------------------
/src/.vuepress/public/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
53 |
--------------------------------------------------------------------------------
/src/.vuepress/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "theme_color": "#ffffff",
12 | "background_color": "#ffffff",
13 | "display": "standalone"
14 | }
15 |
--------------------------------------------------------------------------------
/src/.vuepress/public/vuepress-blog-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bencodezen/vuepress-blog-boilerplate/c7c5fd9a2e26e055c4c580acb438b51dab89b405/src/.vuepress/public/vuepress-blog-logo.png
--------------------------------------------------------------------------------
/src/.vuepress/theme/components/ArchiveList.vue:
--------------------------------------------------------------------------------
1 |
2 |