25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @@ -5,25 +5,30 @@ | ||||
| [](https://GitHub.com/timlrx/tailwind-nextjs-starter-blog/stargazers/) | ||||
| [](https://GitHub.com/timlrx/tailwind-nextjs-starter-blog/network/) | ||||
| [](https://twitter.com/timlrxx) | ||||
| [](https://github.com/sponsors/timlrx) | ||||
|  | ||||
| [](https://vercel.com/new/git/external?repository-url=https://github.com/timlrx/tailwind-nextjs-starter-blog) | ||||
|  | ||||
| This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Comes out of the box configured with the latest technologies to make technical writing a breeze. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs. | ||||
| This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Probably the most feature rich nextjs markdown blogging template out there. Comes out of the box configured with the latest technologies to make technical writing a breeze. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs. | ||||
|  | ||||
| Check out the documentation below to get started. Facing issues? Checkout of the [FAQ page](https://github.com/timlrx/tailwind-nextjs-starter-blog/wiki) and do a search on past issues. Feel free to open a new issue if none has been posted previously. | ||||
| Check out the documentation below to get started. | ||||
|  | ||||
| Facing issues? Check the [FAQ page](https://github.com/timlrx/tailwind-nextjs-starter-blog/wiki) and do a search on past issues. Feel free to open a new issue if none has been posted previously. | ||||
|  | ||||
| Feature request? Check the past discussions to see if it has been brough up previously. Otherwise, feel free to start a new discussion thread. All ideas are welcomed! | ||||
|  | ||||
| ## Examples | ||||
|  | ||||
| - [Demo Blog](https://tailwind-nextjs-starter-blog.vercel.app/) - this repo | ||||
| - [My personal blog](https://www.timlrx.com) - modified to auto-generate blog posts with dates | ||||
| - [Aloisdg's cookbook](https://tambouille.vercel.app/) - with pictures and recipes! | ||||
| - [GauthierArcin's demo with next translate](https://tailwind-nextjs-starter-blog-seven.vercel.app/) - includes translation of mdx posts, [source code](https://github.com/GautierArcin/tailwind-nextjs-starter-blog/tree/demo/next-translate) | ||||
|  | ||||
| Using the template? Happy to accept any PR with modifications made e.g. sub-paths, localization or multiple authors | ||||
| Using the template? Feel free to create a PR and add your blog to this list. | ||||
|  | ||||
| ## Motivation | ||||
|  | ||||
| I wanted to port my existing blog to Nextjs and Tailwind CSS but there was no easy out of the box template to use so I decided to create one. | ||||
|  | ||||
| It is inspired by [Lee Robinson's blog](https://github.com/leerob/leerob.io), but focuses only on static site generation. Design is adapted from [Tailwindlabs blog](https://github.com/tailwindlabs/blog.tailwindcss.com). | ||||
| I wanted to port my existing blog to Nextjs and Tailwind CSS but there was no easy out of the box template to use so I decided to create one. Design is adapted from [Tailwindlabs blog](https://github.com/tailwindlabs/blog.tailwindcss.com). | ||||
|  | ||||
| I wanted it to be nearly as feature-rich as popular blogging templates like [beautiful-jekyll](https://github.com/daattali/beautiful-jekyll) and [Hugo Academic](https://github.com/wowchemy/wowchemy-hugo-modules) but with the best of React's ecosystem and current web development's best practices. | ||||
|  | ||||
| @@ -157,3 +162,11 @@ The easiest way to deploy the template is to use the [Vercel Platform](https://v | ||||
|  | ||||
| **Netlify / Github Pages / Firebase etc.**   | ||||
| As the template uses `next/image` for image optimization, additional configurations has to be made to deploy on other popular static hosting websites like [Netlify](https://www.netlify.com/) or [Github Pages](https://pages.github.com/). An alternative image optimization provider such as Imgix, Cloudinary or Akamai has to be used. Alternatively, replace the `next/image` component with a standard `<img>` tag. See [`next/image` documentation](https://nextjs.org/docs/basic-features/image-optimization) for more details. | ||||
|  | ||||
| ## Support | ||||
|  | ||||
| Using the template? Support this effort by giving a star on Github, sharing your own blog and giving a shoutout on Twitter or be a project [sponsor](https://github.com/sponsors/timlrx). | ||||
|  | ||||
| ## Licence | ||||
|  | ||||
| [MIT](https://github.com/timlrx/tailwind-nextjs-starter-blog/blob/master/LICENSE) © [Timothy Lin](https://www.timrlx.com) | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| --- | ||||
| title: 'Introducing Tailwind Nextjs Starter Blog' | ||||
| date: '2021-01-12' | ||||
| lastmod: '2021-08-07' | ||||
| lastmod: '2021-08-08' | ||||
| tags: ['next-js', 'tailwind', 'guide'] | ||||
| draft: false | ||||
| summary: 'Looking for a performant, out of the box template, with all the best in web technology to support your blogging needs? Checkout the Tailwind Nextjs Starter Blog template.' | ||||
| @@ -15,20 +15,26 @@ authors: ['default', 'sparrowhawk'] | ||||
|  | ||||
| [](https://vercel.com/new/git/external?repository-url=https://github.com/timlrx/tailwind-nextjs-starter-blog) | ||||
|  | ||||
| This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Comes out of the box configured with the latest technologies to make technical writing a breeze. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs. | ||||
| This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Probably the most feature rich nextjs markdown blogging template out there. Comes out of the box configured with the latest technologies to make technical writing a breeze. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs. | ||||
|  | ||||
| Check out the documentation below to get started. | ||||
|  | ||||
| Facing issues? Check the [FAQ page](https://github.com/timlrx/tailwind-nextjs-starter-blog/wiki) and do a search on past issues. Feel free to open a new issue if none has been posted previously. | ||||
|  | ||||
| Feature request? Check the past discussions to see if it has been brough up previously. Otherwise, feel free to start a new discussion thread. All ideas are welcomed! | ||||
|  | ||||
| ## Examples | ||||
|  | ||||
| - [Demo Blog](https://tailwind-nextjs-starter-blog.vercel.app/) - this repo | ||||
| - [My personal blog](https://www.timlrx.com) - modified to auto-generate blog posts with dates | ||||
| - [Aloisdg's cookbook](https://tambouille.vercel.app/) - with pictures and recipes! | ||||
| - [GauthierArcin's demo with next translate](https://tailwind-nextjs-starter-blog-seven.vercel.app/) - includes translation of mdx posts, [source code](https://github.com/GautierArcin/tailwind-nextjs-starter-blog/tree/demo/next-translate) | ||||
|  | ||||
| Using the template? Happy to accept any PR with modifications made e.g. sub-paths, localization or multiple authors | ||||
| Using the template? Feel free to create a PR and add your blog to this list. | ||||
|  | ||||
| ## Motivation | ||||
|  | ||||
| I wanted to port my existing blog to Nextjs and Tailwind CSS but there was no easy out of the box template to use so I decided to create one. | ||||
|  | ||||
| It is inspired by [Lee Robinson's blog](https://github.com/leerob/leerob.io), but focuses only on static site generation. Design is adapted from [Tailwindlabs blog](https://github.com/tailwindlabs/blog.tailwindcss.com). | ||||
| I wanted to port my existing blog to Nextjs and Tailwind CSS but there was no easy out of the box template to use so I decided to create one. Design is adapted from [Tailwindlabs blog](https://github.com/tailwindlabs/blog.tailwindcss.com). | ||||
|  | ||||
| I wanted it to be nearly as feature-rich as popular blogging templates like [beautiful-jekyll](https://github.com/daattali/beautiful-jekyll) and [Hugo Academic](https://github.com/wowchemy/wowchemy-hugo-modules) but with the best of React's ecosystem and current web development's best practices. | ||||
|  | ||||
| @@ -56,12 +62,12 @@ I wanted it to be nearly as feature-rich as popular blogging templates like [bea | ||||
|  | ||||
| ## Sample posts | ||||
|  | ||||
| - [A markdown guide](/blog/github-markdown-guide) | ||||
| - [Learn more about images in Next.js](/blog/guide-to-using-images-in-nextjs) | ||||
| - [A tour of math typesetting](/blog/deriving-ols-estimator) | ||||
| - [Simple MDX image grid](/blog/pictures-of-canada) | ||||
| - [Example of long prose](/blog/the-time-machine) | ||||
| - [Example of Nested Route Post](/blog/nested-route/introducing-multi-part-posts-with-nested-routing) | ||||
| - [A markdown guide](https://tailwind-nextjs-starter-blog.vercel.app/blog/github-markdown-guide) | ||||
| - [Learn more about images in Next.js](https://tailwind-nextjs-starter-blog.vercel.app/blog/guide-to-using-images-in-nextjs) | ||||
| - [A tour of math typesetting](https://tailwind-nextjs-starter-blog.vercel.app/blog/deriving-ols-estimator) | ||||
| - [Simple MDX image grid](https://tailwind-nextjs-starter-blog.vercel.app/blog/pictures-of-canada) | ||||
| - [Example of long prose](https://tailwind-nextjs-starter-blog.vercel.app/blog/the-time-machine) | ||||
| - [Example of Nested Route Post](https://tailwind-nextjs-starter-blog.vercel.app/blog/nested-route/introducing-multi-part-posts-with-nested-routing) | ||||
|  | ||||
| ## Quick Start Guide | ||||
|  | ||||
| @@ -162,3 +168,11 @@ The easiest way to deploy the template is to use the [Vercel Platform](https://v | ||||
|  | ||||
| **Netlify / Github Pages / Firebase etc.**   | ||||
| As the template uses `next/image` for image optimization, additional configurations has to be made to deploy on other popular static hosting websites like [Netlify](https://www.netlify.com/) or [Github Pages](https://pages.github.com/). An alternative image optimization provider such as Imgix, Cloudinary or Akamai has to be used. Alternatively, replace the `next/image` component with a standard `<img>` tag. See [`next/image` documentation](https://nextjs.org/docs/basic-features/image-optimization) for more details. | ||||
|  | ||||
| ## Support | ||||
|  | ||||
| Using the template? Support this effort by giving a star on Github, sharing your own blog and giving a shoutout on Twitter or be a project [sponsor](https://github.com/sponsors/timlrx). | ||||
|  | ||||
| ## Licence | ||||
|  | ||||
| [MIT](https://github.com/timlrx/tailwind-nextjs-starter-blog/blob/master/LICENSE) © [Timothy Lin](https://www.timrlx.com) | ||||
|   | ||||
| @@ -40,15 +40,15 @@ Migrating from v1? You can revert to the previous theme by setting `primary` to | ||||
|  | ||||
| ## Xdm MDX compiler | ||||
|  | ||||
| We switch the MDX bundler from [next-mdx-remote](https://github.com/hashicorp/next-mdx-remote) to [mdx-bundler](https://github.com/kentcdodds/mdx-bundler). | ||||
| This uses [xdm](https://github.com/wooorm/xdm) under the hood uses the latest micromark 3 and remark, rehype libraries. | ||||
| We switched the MDX bundler from [next-mdx-remote](https://github.com/hashicorp/next-mdx-remote) to [mdx-bundler](https://github.com/kentcdodds/mdx-bundler). | ||||
| This uses [xdm](https://github.com/wooorm/xdm) under the hood, the latest micromark 3 and remark, rehype libraries. | ||||
|  | ||||
| **Warning:** If you were using custom remark or rehype libraries, please upgrade to micromark 3 compatible ones. If you are upgrading, please delete `node_modules` and `package-lock.json` to avoid having past dependencies related issues. | ||||
|  | ||||
| [xdm](https://github.com/wooorm/xdm) contains multiple improvements over [@mdx-js/mdx](https://github.com/mdx-js/mdx), the compiler used internally by next-mdx-remote, but there might be some breaking behaviour changes. | ||||
| Please check your markdown output to verify. | ||||
|  | ||||
| Some new possibilities include loading components directly in the mdx file using the import syntax and including js code which could be compiled at the build step. | ||||
| Some new possibilities include loading components directly in the mdx file using the import syntax and including js code which could be compiled and bundled at the build step. | ||||
|  | ||||
| For example, the following jsx snippet can be used directly in an MDX file to render the page title component: | ||||
|  | ||||
| @@ -64,7 +64,7 @@ import PageTitle from './PageTitle.js' | ||||
| The default configuration resolves all components relative to the `components` directory. | ||||
|  | ||||
| **Note**: | ||||
| Components which require external image loaders would require additional esbuild configuration. | ||||
| Components which require external image loaders also require additional esbuild configuration. | ||||
| Components which are dependent on global application state on lifecycle like the Nextjs `Link` component would also not work with this setup as each mdx file is built indepedently. | ||||
| For such cases, it is better to use component substitution. | ||||
|  | ||||
| @@ -72,7 +72,7 @@ For such cases, it is better to use component substitution. | ||||
|  | ||||
| Inspired by [Docusaurus](https://docusaurus.io/docs/next/markdown-features/inline-toc) and Gatsby's [gatsby-remark-table-of-contents](https://www.gatsbyjs.com/plugins/gatsby-remark-table-of-contents/), | ||||
| the `toc` variable containing all the top level headings of the document is passed to the MDX file and can be styled accordingly. | ||||
| To make generating a TOC simple, you can use the existing `TOCInline` component. | ||||
| To make generating a table of contents (TOC) simple, you can use the existing `TOCInline` component. | ||||
|  | ||||
| For example, the TOC in this post was generated with the following code: | ||||
|  | ||||
| @@ -80,8 +80,8 @@ For example, the TOC in this post was generated with the following code: | ||||
| <TOCInline toc={props.toc} exclude="Overview" toHeading={2} /> | ||||
| ``` | ||||
|  | ||||
| You can customise the headings to be generated by configuring the `fromHeading` and `toHeading` props as well as exclude particular headings | ||||
| by passing a string or a string array. By default, all headings that are of depth 3 or smaller are indented. This can be configured by changing the `indentDepth` property. | ||||
| You can customise the headings that are displayed by configuring the `fromHeading` and `toHeading` props, or exclude particular headings | ||||
| by passing a string or a string array to the `exclude` prop. By default, all headings that are of depth 3 or smaller are indented. This can be configured by changing the `indentDepth` property. | ||||
| A `asDisclosure` prop can be used to render the TOC within an expandable disclosure element. | ||||
|  | ||||
| Here's the full TOC rendered in a disclosure element. | ||||
| @@ -98,7 +98,7 @@ You can map mdx blog content to layout components by configuring the frontmatter | ||||
|  | ||||
| ### Adding new templates | ||||
|  | ||||
| layout templates are stored in the `./layouts` folder. You can add add your React components that you want to map to markdown content in this folder. | ||||
| layout templates are stored in the `./layouts` folder. You can add your React components that you want to map to markdown content in this folder. | ||||
| The component file name must match that specified in the markdown frontmatter `layout` field. | ||||
|  | ||||
| The only required field is `children` which contains the rendered MDX content, though you would probably want to pass in the frontMatter contents and render it in the template. | ||||
| @@ -275,7 +275,7 @@ summary: 'My first post' | ||||
| authors: ['default', 'sparrowhawk'] | ||||
| ``` | ||||
|  | ||||
| A demo of a multiple author post is shown in the [Introducing Tailwind Nextjs Starter Blog post](/blog/introducing-tailwind-nextjs-starter-blog). | ||||
| A demo of a multiple author post is shown in [Introducing Tailwind Nextjs Starter Blog post](/blog/introducing-tailwind-nextjs-starter-blog). | ||||
|  | ||||
| ## Copy button for code blocks | ||||
|  | ||||
| @@ -332,7 +332,7 @@ There are significant portions of the code that has been changed from v0 to v1 i | ||||
| There's also no real reason to change if the previous one serves your needs and it might be easier to copy | ||||
| the component changes you are interested to your existing blog rather than migrating everything over. | ||||
|  | ||||
| Nonetheless if you want to do so and have not changed much of the template, you could clone the new version and copy over the blog post instead. | ||||
| Nonetheless, if you want to do so and have not changed much of the template, you could clone the new version and copy over the blog post over to the new template. | ||||
|  | ||||
| Another alternative would be to pull the latest tempate version with the following code: | ||||
|  | ||||
| @@ -344,7 +344,7 @@ rm -rf node_modules | ||||
|  | ||||
| You can see an example of such a migration in this [commit](https://github.com/timlrx/timlrx.com/commit/bba1c185384fd6d5cdaac15abf802fdcff027286) for my personal blog. | ||||
|  | ||||
| v1 also uses `feed.xml` rather than `index.xml`. If you are migrating you should add a redirect to `next.config.js` like so: | ||||
| v1 also uses `feed.xml` rather than `index.xml`, to avoid some build issues with vercel. If you are migrating you should add a redirect to `next.config.js` like so: | ||||
|  | ||||
| ``` | ||||
| async redirects() { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "tailwind-nextjs-starter-blog", | ||||
|   "version": "1.0.0-canary.2", | ||||
|   "version": "1.0.0", | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "start": "next-remote-watch ./data", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user