Skip to content

Commit 9a38d92

Browse files
committed
update readme
1 parent d94c31d commit 9a38d92

File tree

1 file changed

+49
-68
lines changed

1 file changed

+49
-68
lines changed

README.md

Lines changed: 49 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -9,62 +9,63 @@
99

1010
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/timlrx/tailwind-nextjs-starter-blog)
1111

12-
This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Probably the most feature-rich Next.js 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.
12+
This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Version 2 is based on Next App directory with [React Server Component](https://nextjs.org/docs/getting-started/react-essentials#server-components) and uses [Contentlayer](https://www.contentlayer.dev/) to manage markdown content.
13+
14+
Probably the most feature-rich Next.js markdown blogging template out there. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs.
1315

1416
Check out the documentation below to get started.
1517

1618
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.
1719

1820
Feature request? Check the past discussions to see if it has been brought up previously. Otherwise, feel free to start a new discussion thread. All ideas are welcomed!
1921

20-
## Examples
22+
## Examples V2
2123

2224
- [Demo Blog](https://tailwind-nextjs-starter-blog.vercel.app/) - this repo
25+
26+
Using the template? Feel free to create a PR and add your blog to this list.
27+
28+
## Examples V1
29+
30+
Many thanks to the community for sharing their blogs and contributing to the template in various ways. If you have updated from version 1 to version 2, feel free to remove your blog from this list and add it to the above one.
31+
2332
- [My personal blog](https://www.timlrx.com) - modified to auto-generate blog posts with dates
2433
- [Aloisdg's cookbook](https://tambouille.vercel.app/) - with pictures and recipes!
2534
- [GautierArcin'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)
2635
- [David Levai's digital garden](https://davidlevai.com/) - customized design and added email subscriptions
27-
- [Thinh's Corner](https://thinhcorner.com/) - [customized layout](https://github.com/Th1nhNg0/th1nhng0.vercel.app/blob/5e73a420828d82f01e7147512a2c3273c4ec19f8/layouts/PostLayout.js) with sticky side table of contents
2836
- [Leo's Blog](https://leohuynh.dev) - Tuan Anh Huynh's personal site. Add Snippets Page, Author Profile Card, Image Lightbox, ...
2937
- [thvu.dev](https://thvu.dev) - Added `mdx-embed`, view count, reading minutes and more.
3038
- [fiqrychoerudin.dev](https://www.fiqrychoerudin.dev/) - simple portfolio.
3139
- [irvin.dev](https://www.irvin.dev/) - Irvin Lin's personal site. Added YouTube embedding.
3240
- [KirillSo.com](https://www.kirillso.com/) - Personal blog & website.
3341
- [ghali.dev](https://ghali.dev) - Cyril's Blog
34-
- [DevBoy Blog](https://devboy.vercel.app/) - M.Reza's personal blog
3542
- [slightlysharpe.com](https://slightlysharpe.com) - [Tincre's](https://tincre.com) main company blog
3643
- [blog.b00st.com](https://blog.b00st.com) - [b00st.com's](https://b00st.com) main music promotion blog
3744
- [astrosaurus.me](https://astrosaurus.me/) - Ephraim Atta-Duncan's Personal Blog
3845
- [dhanrajsp.me](https://dhanrajsp.me/) - Dhanraj's personal site and blog.
3946
- [blog.r00ks.io](https://blog.r00ks.io/) - Austin Rooks's personal blog ([source code](https://github.com/Austionian/blog.r00ks)).
4047
- [honghong.me](https://honghong.me) - Tszhong's personal website ([source code](https://github.com/tszhong0411/home))
41-
- [alfoncode.com](https://alfoncode.com) - Alfonso García's personar website. Customized design ([source code](https://github.com/alfoncode/personal-web))
4248
- [marceloformentao.dev](https://marceloformentao.dev) - Marcelo Formentão personal website ([source code](https://github.com/marceloavf/marceloformentao.dev)).
4349
- [abiraja.com](https://www.abiraja.com/) - with a [runnable JS code snippet component!](https://www.abiraja.com/blog/querying-solana-blockchain)
4450
- [einargudni.com](https://www.einargudni.com) - with a customized theme, command pallette and more ([source code](https://github.com/einargudnig/einargudni.com))
4551
- [bpiggin.com](https://www.bpiggin.com) - Ben Piggin's personal blog
4652
- [maqib.cn](https://maqib.cn) - A blog of Chinese front-end developers 狂奔小马的博客 ([源码](https://github.com/maqi1520/nextjs-tailwind-blog))
4753
- [ambilena.com](https://ambilena.com/) - Electronic Music Blog & imprint for upcoming musicians.
4854
- [kittan.ru](https://www.kittan.ru/) - Kittanb's personal blog about linux ([source code](https://github.com/kittanb/blog))
49-
- [nchristopher.me](https://nchristopher.me) - Nicholas Christopher's personal website and blog ([source code](https://github.com/nchristopher/blog))
5055
- [dalelarroder.com](https://dalelarroder.com) - Dale Larroder's personal website and blog ([source code](https://github.com/dlarroder/dalelarroder))
51-
- [devahoy.com](https://devahoy.com) - Chai's personal blog (Thai language)
5256
- [0xchai.io](https://0xchai.io) - Chai's personal blog
5357
- [techipedia](https://techipedia.vercel.app) - Simple blogging progressive web app with custom installation button and top progress bar
5458
- [reubence.com](https://reubence.com) - Reuben Rapose's Digital Garden
5559
- [axolo.co/blog](https://axolo.co/blog) - Engineering management news & axolo.co updates (with image preview for article in the home page)
5660
- [musing.vercel.app](https://musing.vercel.app/) - Parth Desai's personal blog ([source code](https://github.com/pycoder2000/blog))
5761
- [onyourmental.com](https://www.onyourmental.com/) - [Curtis Warcup's](https://github.com/Cwarcup) website for the On Your Mental Podcast ([source code](https://github.com/Cwarcup/on-your-mental))
58-
- [cwarcup.com](https://www.cwarcup.com/) - Curtis Warcup's personal website and blog ([source code](https://github.com/Cwarcup/personal-blog).
62+
- [cwarcup.com](https://www.cwarcup.com/) - Curtis Warcup's personal website and blog ([source code](https://github.com/Cwarcup/personal-blog)).
5963
- [ondiek-elijah.me](https://www.ondiek-elijah.me/) - Ondiek Elijah's website and blog ([source code](https://github.com/Dev-Elie/ondiek-elijah)).
6064
- [jmalvarez.dev](https://www.jmalvarez.dev/) - José Miguel Álvarez's personal blog ([source code](https://github.com/josemiguel-alvarez/nextjs-blog))
6165
- [justingosses.com](https://justingosses.com/) - Justin Gosses's personal website and blog ([source code](https://github.com/JustinGOSSES/justingosses-website))
62-
- [sabare.me](https://sabare.me/) - Victor Sabare's personal website and blog ([source code](https://github.com/Sabareh/blog)
63-
- [https://bitoflearning-9a57.fly.dev/](https://bitoflearning-9a57.fly.dev/) - Sangeet Agarwal's personal blog, replatformed to [remix](https://remix.run/remix) using the [indie stack](https://github.com/remix-run/indie-stack) ([source code](https://github.com/SangeetAgarwal/bitoflearning)) WIP
66+
- [https://bitoflearning-9a57.fly.dev/](https://bitoflearning-9a57.fly.dev/) - Sangeet Agarwal's personal blog, replatformed to [remix](https://remix.run/remix) using the [indie stack](https://github.com/remix-run/indie-stack) ([source code](https://github.com/SangeetAgarwal/bitoflearning))
6467
- [raphaelchelly.com](https://www.raphaelchelly.com/) - Raphaël Chelly's personal website and blog ([source code](https://github.com/raphaelchelly/raph_www))
6568

66-
Using the template? Feel free to create a PR and add your blog to this list.
67-
6869
## Motivation
6970

7071
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).
@@ -73,26 +74,29 @@ I wanted it to be nearly as feature-rich as popular blogging templates like [bea
7374

7475
## Features
7576

77+
- Typescript first, including typed mdx files
78+
- [Contentlayer](https://www.contentlayer.dev/) to manage content logic
7679
- Easy styling customization with [Tailwind 3.0](https://tailwindcss.com/blog/tailwindcss-v3) and primary color attribute
80+
- [MDX - write JSX in markdown documents!](https://mdxjs.com/)
7781
- Near perfect lighthouse score - [Lighthouse report](https://www.webpagetest.org/result/221104_AiDc59_4WF/)
7882
- Lightweight, 45kB first load JS, uses Preact in production build
7983
- Mobile-friendly view
8084
- Light and dark theme
81-
- Self-hosted font with [Fontsource](https://fontsource.org/)
82-
- Supports [plausible](https://plausible.io/), [simple analytics](https://simpleanalytics.com/) and google analytics
83-
- [MDX - write JSX in markdown documents!](https://mdxjs.com/)
85+
- Font optimization with [next/font](https://nextjs.org/docs/app/api-reference/components/font)
86+
- Integration with [pliny](https://github.com/timlrx/pliny) that provides:
87+
- Multiple analytics options including [Umami](https://umami.is/), [Plausible](https://plausible.io/), [Simple Analytics](https://simpleanalytics.com/), Posthog and Google Analytics
88+
- Comments via [Giscus](https://github.com/laymonage/giscus), [Utterances](https://github.com/utterance/utterances) or Disqus
89+
- Newsletter API and component with support for Mailchimp, Buttondown, Convertkit, Klaviyo, Revue, and Emailoctopus
90+
- Command palette search with [Kbar](https://github.com/timc1/kbar) or Algolia
8491
- Server-side syntax highlighting with line numbers and line highlighting via [rehype-prism-plus](https://github.com/timlrx/rehype-prism-plus)
8592
- Math display supported via [KaTeX](https://katex.org/)
8693
- Citation and bibliography support via [rehype-citation](https://github.com/timlrx/rehype-citation)
8794
- Automatic image optimization via [next/image](https://nextjs.org/docs/basic-features/image-optimization)
88-
- Flexible data retrieval with [mdx-bundler](https://github.com/kentcdodds/mdx-bundler)
8995
- Support for tags - each unique tag will be its own page
9096
- Support for multiple authors
91-
- Blog templates
92-
- TOC component
97+
- 3 different blog layouts
98+
- 2 different blog listing layouts
9399
- Support for nested routing of blog posts
94-
- Newsletter component with support for mailchimp, buttondown, convertkit, klaviyo, revue, and emailoctopus
95-
- Supports [giscus](https://github.com/laymonage/giscus), [utterances](https://github.com/utterance/utterances) or disqus
96100
- Projects page
97101
- Preconfigured security headers
98102
- SEO friendly with RSS feed, sitemaps and more!
@@ -108,30 +112,15 @@ I wanted it to be nearly as feature-rich as popular blogging templates like [bea
108112

109113
## Quick Start Guide
110114

111-
1. Try installing the starter using the new [Pliny project CLI](https://github.com/timlrx/pliny):
112-
113-
```bash
114-
npm i -g @pliny/cli
115-
pliny new --template=starter-blog my-blog
116-
```
117-
118-
It supports the updated version of the blog with Contentlayer, optional choice of TS/JS and different package managers as well as more modularized components which will be the basis of the template going forward.
119-
120-
Alternatively to stick with the current version, TypeScript and Contentlayer:
115+
1. Clone the repo
121116

122117
```bash
123-
npx degit 'timlrx/tailwind-nextjs-starter-blog#contentlayer'
124-
```
125-
126-
or JS (official support)
127-
128-
```bash
129-
npx degit https://github.com/timlrx/tailwind-nextjs-starter-blog.git
118+
npx degit 'timlrx/tailwind-nextjs-starter-blog'
130119
```
131120

132121
2. Personalize `siteMetadata.js` (site related information)
133122
3. Modify the content security policy in `next.config.js` if you want to use
134-
any analytics provider or a commenting solution other than giscus.
123+
other analytics provider or a commenting solution other than giscus.
135124
4. Personalize `authors/default.md` (main author)
136125
5. Modify `projectsData.js`
137126
6. Modify `headerNavLinks.js` to customize navigation links
@@ -141,26 +130,20 @@ npx degit https://github.com/timlrx/tailwind-nextjs-starter-blog.git
141130
## Installation
142131

143132
```bash
144-
npm install
133+
yarn
145134
```
146135

147136
## Development
148137

149138
First, run the development server:
150139

151140
```bash
152-
npm start
153-
```
154-
155-
or
156-
157-
```bash
158-
npm run dev
141+
yarn dev
159142
```
160143

161144
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
162145

163-
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
146+
Edit the layout in `app` or content in `data`. With live reloading, the pages auto-updates as you edit them.
164147

165148
## Extend / Customize
166149

@@ -178,36 +161,41 @@ You can start editing the page by modifying `pages/index.js`. The page auto-upda
178161

179162
`public/static` - store assets such as images and favicons.
180163

181-
`tailwind.config.js` and `css/tailwind.css` - contain the tailwind stylesheet which can be modified to change the overall look and feel of the site.
164+
`tailwind.config.js` and `css/tailwind.css` - tailwind configuration and stylesheet which can be modified to change the overall look and feel of the site.
182165

183166
`css/prism.css` - controls the styles associated with the code blocks. Feel free to customize it and use your preferred prismjs theme e.g. [prism themes](https://github.com/PrismJS/prism-themes).
184167

185-
`components/social-icons` - to add other icons, simply copy an svg file from [Simple Icons](https://simpleicons.org/) and map them in `index.js`. Other icons use [heroicons](https://heroicons.com/).
168+
`contentlayer.config.ts` - configuration for Contentlayer, including definition of content sources and MDX plugins used. See [Contentlayer documentation](https://www.contentlayer.dev/docs/getting-started) for more information.
169+
170+
`components/MDXComponents.js` - pass your own JSX code or React component by specifying it over here. You can then use them directly in the `.mdx` or `.md` file. By default, a custom link, `next/image` component, table of contents component and Newsletter form are passed down. Note that the components should be default exported to avoid [existing issues with Next.js](https://github.com/vercel/next.js/issues/51593).
186171

187-
`components/MDXComponents.js` - pass your own JSX code or React component by specifying it over here. You can then call them directly in the `.mdx` or `.md` file. By default, a custom link and image component is passed.
172+
`layouts` - main templates used in pages:
188173

189-
`layouts` - main templates used in pages.
174+
- There are currently 3 post layouts available: `PostLayout`, `PostSimple` and `PostBanner`. `PostLayout` is the default 2 column layout with meta and author information. `PostSimple` is a simplified version of `PostLayout`, while `PostBanner` features a banner image.
175+
- There are 2 blog listing layouts: `ListLayout`, the layout used in version 1 of the template with a search bar and `ListLayoutWithTags`, currently used in version 2, which omits the search bar but includes a sidebar with information on the tags.
190176

191-
`pages` - pages to route to. Read the [Next.js documentation](https://nextjs.org/docs) for more information.
177+
`app` - pages to route to. Read the [Next.js documentation](https://nextjs.org/docs/app) for more information.
192178

193179
`next.config.js` - configuration related to Next.js. You need to adapt the Content Security Policy if you want to load scripts, images etc. from other domains.
194180

195181
## Post
196182

183+
Content is modelled using [Contentlayer](https://www.contentlayer.dev/), which allows you to define your own content schema and use it to generate typed content objects. See [Contentlayer documentation](https://www.contentlayer.dev/docs/getting-started) for more information.
184+
197185
### Frontmatter
198186

199187
Frontmatter follows [Hugo's standards](https://gohugo.io/content-management/front-matter/).
200188

201-
Currently 7 fields are supported.
189+
Please refer to `contentlayer.config.ts` for an up to date list of supported fields. The following fields are supported:
202190

203191
```
204192
title (required)
205193
date (required)
206-
tags (required, can be empty array)
194+
tags (optional)
207195
lastmod (optional)
208196
draft (optional)
209197
summary (optional)
210-
images (optional, if none provided defaults to socialBanner in siteMetadata config)
198+
images (optional)
211199
authors (optional list which should correspond to the file names in `data/authors`. Uses `default` if none is specified)
212200
layout (optional list which should correspond to the file names in `data/layouts`)
213201
canonicalUrl (optional, canonical url for the post for SEO)
@@ -230,29 +218,22 @@ canonicalUrl: https://tailwind-nextjs-starter-blog.vercel.app/blog/introducing-t
230218
---
231219
```
232220

233-
### Compose
234-
235-
Run `node ./scripts/compose.js` to bootstrap a new post.
236-
237-
Follow the interactive prompt to generate a post with pre-filled front matter.
238-
239221
## Deploy
240222

241223
**Vercel**
242-
The easiest way to deploy the template is to use the [Vercel Platform](https://vercel.com) from the creators of Next.js. Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
224+
The easiest way to deploy the template is to deploy on [Vercel](https://vercel.com). Check out the [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
243225

244226
**Netlify**
245227
[Netlify](https://www.netlify.com/)’s Next.js runtime configures enables key Next.js functionality on your website without the need for additional configurations. Netlify generates serverless functions that will handle Next.js functionalities such as server-side rendered (SSR) pages, incremental static regeneration (ISR), `next/images`, etc.
246228

247229
See [Next.js on Netlify](https://docs.netlify.com/integrations/frameworks/next-js/overview/#next-js-runtime) for suggested configuration values and more details.
248230

249-
**GitHub Pages / Firebase etc.**
250-
As the template uses `next/image` for image optimization, additional configurations have to be made to deploy on other popular static hosting websites like [Firebase](https://firebase.google.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.
251-
252-
The API routes used in the newsletter component cannot be used in a static site export. You will need to use a form API endpoint provider and substitute the route in the newsletter component accordingly. Other hosting platforms such as Netlify also offer alternative solutions - please refer to their docs for more information.
231+
**Static hosting services / GitHub Pages / S3 / Firebase etc.**
253232

254-
**Google App Engine**
255-
Apart from changes mentioned above for `next/image`, configurations should be changed based on recommendations [here](https://github.com/vercel/next.js/discussions/12474#discussioncomment-17844) in order to set up the project for GAE deployment.
233+
1. Add `output: 'export'` in `next.config.js`. See [static exports documentation](https://nextjs.org/docs/app/building-your-application/deploying/static-exports#configuration) for more information.
234+
2. Change `components/Image.tsx` to use a standard `<img>` tag instead of `next/image`. Alternatively, to continue using `next/image`, you can use an alternative image optimization provider such as Imgix, Cloudinary or Akamai. See [image optimization documentation](https://nextjs.org/docs/app/building-your-application/deploying/static-exports#image-optimization) for more details.
235+
3. Remove `api` folder and components which call the server-side function such as the Newsletter component.
236+
4. Run `yarn build`. The generated static content is in the `out` folder.
256237

257238
## Support
258239

0 commit comments

Comments
 (0)