diff --git a/data/authors/ivy.mdx b/data/authors/ivy.mdx
new file mode 100644
index 0000000..3a86f3c
--- /dev/null
+++ b/data/authors/ivy.mdx
@@ -0,0 +1,16 @@
+---
+name: Ivy
+avatar: /static/images/avatar.png
+occupation: 喜歡樹懶的大學生
+company: NDHU
+email:
+twitter: https://twitter.com/Twitter
+linkedin: https://www.linkedin.com
+github: https://github.com
+---
+
+Tails Azimuth is a professor of atmospheric sciences at the Stanford AI Lab. His research interests includes complexity modelling of tailwinds, headwinds and crosswinds.
+
+He leads the clean energy group which develops 3D air pollution-climate models, writes differential equation solvers, and manufactures titanium plated air ballons. In his free time he bakes raspberry pi.
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.
diff --git a/data/authors/sparrowhawk.mdx b/data/authors/sparrowhawk.mdx
deleted file mode 100644
index 5cef90b..0000000
--- a/data/authors/sparrowhawk.mdx
+++ /dev/null
@@ -1,12 +0,0 @@
----
-name: Sparrow Hawk
-avatar: /static/images/sparrowhawk-avatar.jpg
-occupation: Wizard of Earthsea
-company: Earthsea
-twitter: https://twitter.com/sparrowhawk
-linkedin: https://www.linkedin.com/sparrowhawk
----
-
-At birth, Ged was given the child-name Duny by his mother. He was born on the island of Gont, as a son of a bronzesmith. His mother died before he reached the age of one. As a small boy, Ged had overheard the village witch, his maternal aunt, using various words of power to call goats. Ged later used the words without an understanding of their meanings, to surprising effect.
-
-The witch knew that using words of power effectively without understanding them required innate power, so she endeavored to teach him what little she knew. After learning more from her, he was able to call animals to him. Particularly, he was seen in the company of wild sparrowhawks so often that his "use name" became Sparrowhawk.
diff --git a/data/blog/code-sample.mdx b/data/blog/coding/code-sample.mdx
similarity index 95%
rename from data/blog/code-sample.mdx
rename to data/blog/coding/code-sample.mdx
index a293a84..8e11337 100644
--- a/data/blog/code-sample.mdx
+++ b/data/blog/coding/code-sample.mdx
@@ -1,7 +1,7 @@
---
title: Sample .md file
date: '2016-03-08'
-tags: ['markdown', 'code', 'features']
+tags: ['coding']
draft: false
summary: Example of a markdown file with code blocks and syntax highlighting
---
diff --git a/data/blog/github-markdown-guide.mdx b/data/blog/coding/github-markdown-guide.mdx
similarity index 99%
rename from data/blog/github-markdown-guide.mdx
rename to data/blog/coding/github-markdown-guide.mdx
index 0ce88bf..57cb5ec 100644
--- a/data/blog/github-markdown-guide.mdx
+++ b/data/blog/coding/github-markdown-guide.mdx
@@ -1,7 +1,7 @@
---
title: 'Markdown Guide'
date: '2019-10-11'
-tags: ['github', 'guide']
+tags: ['coding']
draft: false
summary: 'Markdown cheatsheet for all your blogging needs - headers, lists, images, tables and more! An illustrated guide based on GitHub Flavored Markdown.'
---
diff --git a/data/blog/deriving-ols-estimator.mdx b/data/blog/deriving-ols-estimator.mdx
deleted file mode 100644
index 4543c4c..0000000
--- a/data/blog/deriving-ols-estimator.mdx
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: Deriving the OLS Estimator
-date: '2020-12-21'
-tags: ['next js', 'math', 'ols']
-draft: false
-summary: 'How to derive the OLS Estimator with matrix notation and a tour of math typesetting using markdown with the help of KaTeX.'
----
-
-# Introduction
-
-Parsing and display of math equations is included in this blog template. Parsing of math is enabled by `remark-math` and `rehype-katex`.
-KaTeX and its associated font is included in `_document.js` so feel free to use it on any page.
-[^footnote]
-
-[^footnote]: For the full list of supported TeX functions, check out the [KaTeX documentation](https://katex.org/docs/supported.html)
-
-Inline math symbols can be included by enclosing the term between the `$` symbol.
-
-Math code blocks are denoted by `$$`.
-
-If you intend to use the `$` sign instead of math, you can escape it (`\$`), or specify the HTML entity (`$`) [^2]
-
-Inline or manually enumerated footnotes are also supported. Click on the links above to see them in action.
-
-[^2]: \$10 and $20.
-
-# Deriving the OLS Estimator
-
-Using matrix notation, let $n$ denote the number of observations and $k$ denote the number of regressors.
-
-The vector of outcome variables $\mathbf{Y}$ is a $n \times 1$ matrix,
-
-```tex
-\mathbf{Y} = \left[\begin{array}
- {c}
- y_1 \\
- . \\
- . \\
- . \\
- y_n
-\end{array}\right]
-```
-
-$$
-\mathbf{Y} = \left[\begin{array}
- {c}
- y_1 \\
- . \\
- . \\
- . \\
- y_n
-\end{array}\right]
-$$
-
-The matrix of regressors $\mathbf{X}$ is a $n \times k$ matrix (or each row is a $k \times 1$ vector),
-
-```latex
-\mathbf{X} = \left[\begin{array}
- {ccccc}
- x_{11} & . & . & . & x_{1k} \\
- . & . & . & . & . \\
- . & . & . & . & . \\
- . & . & . & . & . \\
- x_{n1} & . & . & . & x_{nn}
-\end{array}\right] =
-\left[\begin{array}
- {c}
- \mathbf{x}'_1 \\
- . \\
- . \\
- . \\
- \mathbf{x}'_n
-\end{array}\right]
-```
-
-$$
-\mathbf{X} = \left[\begin{array}
- {ccccc}
- x_{11} & . & . & . & x_{1k} \\
- . & . & . & . & . \\
- . & . & . & . & . \\
- . & . & . & . & . \\
- x_{n1} & . & . & . & x_{nn}
-\end{array}\right] =
-\left[\begin{array}
- {c}
- \mathbf{x}'_1 \\
- . \\
- . \\
- . \\
- \mathbf{x}'_n
-\end{array}\right]
-$$
-
-The vector of error terms $\mathbf{U}$ is also a $n \times 1$ matrix.
-
-At times it might be easier to use vector notation. For consistency, I will use the bold small x to denote a vector and capital letters to denote a matrix. Single observations are denoted by the subscript.
-
-## Least Squares
-
-**Start**:
-$$y_i = \mathbf{x}'_i \beta + u_i$$
-
-**Assumptions**:
-
-1. Linearity (given above)
-2. $E(\mathbf{U}|\mathbf{X}) = 0$ (conditional independence)
-3. rank($\mathbf{X}$) = $k$ (no multi-collinearity i.e. full rank)
-4. $Var(\mathbf{U}|\mathbf{X}) = \sigma^2 I_n$ (Homoskedascity)
-
-**Aim**:
-Find $\beta$ that minimises the sum of squared errors:
-
-$$
-Q = \sum_{i=1}^{n}{u_i^2} = \sum_{i=1}^{n}{(y_i - \mathbf{x}'_i\beta)^2} = (Y-X\beta)'(Y-X\beta)
-$$
-
-**Solution**:
-Hints: $Q$ is a $1 \times 1$ scalar, by symmetry $\frac{\partial b'Ab}{\partial b} = 2Ab$.
-
-Take matrix derivative w.r.t $\beta$:
-
-```tex
-\begin{aligned}
- \min Q & = \min_{\beta} \mathbf{Y}'\mathbf{Y} - 2\beta'\mathbf{X}'\mathbf{Y} +
- \beta'\mathbf{X}'\mathbf{X}\beta \\
- & = \min_{\beta} - 2\beta'\mathbf{X}'\mathbf{Y} + \beta'\mathbf{X}'\mathbf{X}\beta \\
- \text{[FOC]}~~~0 & = - 2\mathbf{X}'\mathbf{Y} + 2\mathbf{X}'\mathbf{X}\hat{\beta} \\
- \hat{\beta} & = (\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{Y} \\
- & = (\sum^{n} \mathbf{x}_i \mathbf{x}'_i)^{-1} \sum^{n} \mathbf{x}_i y_i
-\end{aligned}
-```
-
-$$
-\begin{aligned}
- \min Q & = \min_{\beta} \mathbf{Y}'\mathbf{Y} - 2\beta'\mathbf{X}'\mathbf{Y} +
- \beta'\mathbf{X}'\mathbf{X}\beta \\
- & = \min_{\beta} - 2\beta'\mathbf{X}'\mathbf{Y} + \beta'\mathbf{X}'\mathbf{X}\beta \\
- \text{[FOC]}~~~0 & = - 2\mathbf{X}'\mathbf{Y} + 2\mathbf{X}'\mathbf{X}\hat{\beta} \\
- \hat{\beta} & = (\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{Y} \\
- & = (\sum^{n} \mathbf{x}_i \mathbf{x}'_i)^{-1} \sum^{n} \mathbf{x}_i y_i
-\end{aligned}
-$$
diff --git a/data/blog/guide-to-using-images-in-nextjs.mdx b/data/blog/guide-to-using-images-in-nextjs.mdx
deleted file mode 100644
index 57c4c09..0000000
--- a/data/blog/guide-to-using-images-in-nextjs.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Images in Next.js
-date: '2020-11-11'
-tags: ['next js', 'guide']
-draft: false
-summary: 'In this article we introduce adding images in the tailwind starter blog and the benefits and limitations of the next/image component.'
-authors: ['sparrowhawk']
----
-
-# Introduction
-
-The tailwind starter blog has out of the box support for [Next.js's built-in image component](https://nextjs.org/docs/api-reference/next/image) and automatically swaps out default image tags in markdown or mdx documents to use the Image component provided.
-
-# Usage
-
-To use in a new page route / javascript file, simply import the image component and call it e.g.
-
-```js
-import Image from 'next/image'
-
-function Home() {
- return (
- <>
-
-
- )
-}
-```
-
-### Configuring a blog post frontmatter
-
-Use the `layout` frontmatter field to specify the template you want to map the markdown post to. Here's how the frontmatter of this post looks like:
-
-```
----
-title: 'New features in v1'
-date: '2021-05-26 '
-tags: ['next-js', 'tailwind', 'guide']
-draft: false
-summary: 'Introducing the new layout features - you can map mdx blog content to layout components by configuring the frontmatter field'
-layout: PostSimple
----
-```
-
-You can configure the default layout in the respective page section by modifying the `DEFAULT_LAYOUT` variable.
-The `DEFAULT_LAYOUT` for blog posts page is set to `PostLayout`.
-
-### Extend
-
-`layout` is mapped to wrapper which wraps the entire MDX content.
-
-```jsx
-export const MDXComponents = {
- Image,
- a: CustomLink,
- pre: Pre,
- wrapper: ({ components, layout, ...rest }) => {
- const Layout = require(`../layouts/${layout}`).default
- return
- },
-}
-
-export const MDXLayoutRenderer = ({ layout, mdxSource, ...rest }) => {
- const MDXLayout = useMemo(() => getMDXComponent(mdxSource), [mdxSource])
-
- return
-}
-```
-
-Use the `MDXLayoutRenderer` component on a page where you want to accept a layout name to map to the desired layout.
-You need to pass the layout name from the layout folder (it has to be an exact match).
-
-## Analytics
-
-The template now supports [plausible](https://plausible.io/), [simple analytics](https://simpleanalytics.com/) and google analytics.
-Configure `siteMetadata.js` with the settings that correspond with the desired analytics provider.
-
-```js
-analytics: {
- // supports plausible, simpleAnalytics or googleAnalytics
- plausibleDataDomain: '', // e.g. tailwind-nextjs-starter-blog.vercel.app
- simpleAnalytics: false, // true or false
- googleAnalyticsId: '', // e.g. UA-000000-2 or G-XXXXXXX
- },
-```
-
-Custom events are also supported. You can import the `logEvent` function from `@components/analytics/[ANALYTICS-PROVIDER]` file and call it when
-triggering certain events of interest. _Note_: Additional configuration might be required depending on the analytics provider, please check their official
-documentation for more information.
-
-## Blog comments system
-
-We have also added support for [giscus](https://github.com/laymonage/giscus), [utterances](https://github.com/utterance/utterances) or disqus.
-To enable, simply configure `siteMetadata.js` comments property with the desired provider and settings as specified in the config file.
-
-```js
-comment: {
- // Select a provider and use the environment variables associated to it
- // https://vercel.com/docs/environment-variables
- provider: 'giscus', // supported providers: giscus, utterances, disqus
- giscusConfig: {
- // Visit the link below, and follow the steps in the 'configuration' section
- // https://giscus.app/
- repo: process.env.NEXT_PUBLIC_GISCUS_REPO,
- repositoryId: process.env.NEXT_PUBLIC_GISCUS_REPOSITORY_ID,
- category: process.env.NEXT_PUBLIC_GISCUS_CATEGORY,
- categoryId: process.env.NEXT_PUBLIC_GISCUS_CATEGORY_ID,
- mapping: 'pathname', // supported options: pathname, url, title
- reactions: '1', // Emoji reactions: 1 = enable / 0 = disable
- // Send discussion metadata periodically to the parent window: 1 = enable / 0 = disable
- metadata: '0',
- // theme example: light, dark, dark_dimmed, dark_high_contrast
- // transparent_dark, preferred_color_scheme, custom
- theme: 'light',
- // theme when dark mode
- darkTheme: 'transparent_dark',
- // If the theme option above is set to 'custom`
- // please provide a link below to your custom theme css file.
- // example: https://giscus.app/themes/custom_example.css
- themeURL: '',
- },
- utterancesConfig: {
- // Visit the link below, and follow the steps in the 'configuration' section
- // https://utteranc.es/
- repo: process.env.NEXT_PUBLIC_UTTERANCES_REPO,
- issueTerm: '', // supported options: pathname, url, title
- label: '', // label (optional): Comment 💬
- // theme example: github-light, github-dark, preferred-color-scheme
- // github-dark-orange, icy-dark, dark-blue, photon-dark, boxy-light
- theme: '',
- // theme when dark mode
- darkTheme: '',
- },
- disqus: {
- // https://help.disqus.com/en/articles/1717111-what-s-a-shortname
- shortname: process.env.NEXT_PUBLIC_DISQUS_SHORTNAME,
- },
- },
-```
-
-## Multiple authors
-
-Information on authors is now split from `siteMetadata.js` and stored in its own `data/authors` folder as a markdown file. Minimally, you will need to have a `default.md` file with authorship information. You can create additional files as required and the file name will be used as the reference to the author.
-
-Here's how an author markdown file might look like:
-
-```md:default.md
----
-name: Tails Azimuth
-avatar: /static/images/avatar.png
-occupation: Professor of Atmospheric Science
-company: Stanford University
-email: address@yoursite.com
-twitter: https://twitter.com/Twitter
-linkedin: https://www.linkedin.com
-github: https://github.com
----
-
-A long description of yourself...
-```
-
-You can use this information in multiple places across the template. For example in the about section of the page, we grab the default author information with this line of code:
-
-```js
-const authorDetails = await getFileBySlug('authors', ['default'])
-```
-
-This is rendered in the `AuthorLayout` template.
-
-### Multiple authors in blog post
-
-The frontmatter of a blog post accepts an optional `authors` array field. If no field is specified, it is assumed that the default author is used. Simply pass in an array of authors to render multiple authors associated with a post.
-
-For example, the following frontmatter will display the authors given by `data/authors/default.md` and `data/authors/sparrowhawk.md`
-
-```yaml
-title: 'My first post'
-date: '2021-01-12'
-draft: false
-summary: 'My first post'
-authors: ['default', 'sparrowhawk']
-```
-
-A demo of a multiple authors post is shown in [Introducing Tailwind Nextjs Starter Blog post](/blog/introducing-tailwind-nextjs-starter-blog).
-
-## Copy button for code blocks
-
-Hover over a code block and you will notice a GitHub-inspired copy button! You can modify `./components/Pre.js` to further customise it.
-The component is passed to `MDXComponents` and modifies all `
` blocks.
-
-## Line highlighting and line numbers
-
-Line highlighting and line numbers are now supported out of the box thanks to the new [rehype-prism-plus plugin](https://github.com/timlrx/rehype-prism-plus)
-
-The following javascript code block:
-
-````
-```js {1, 3-4} showLineNumbers
-var num1, num2, sum
-num1 = prompt('Enter first number')
-num2 = prompt('Enter second number')
-sum = parseInt(num1) + parseInt(num2) // "+" means "add"
-alert('Sum = ' + sum) // "+" means combine into a string
-```
-````
-
-will appear as:
-
-```js {1,3-4} showLineNumbers
-var num1, num2, sum
-num1 = prompt('Enter first number')
-num2 = prompt('Enter second number')
-sum = parseInt(num1) + parseInt(num2) // "+" means "add"
-alert('Sum = ' + sum) // "+" means combine into a string
-```
-
-To modify the styles, change the following class selectors in the `prism.css` file:
-
-```css
-.code-highlight {
- @apply float-left min-w-full;
-}
-
-.code-line {
- @apply -mx-4 block border-l-4 border-opacity-0 pl-4 pr-4;
-}
-
-.code-line.inserted {
- @apply bg-green-500 bg-opacity-20;
-}
-
-.code-line.deleted {
- @apply bg-red-500 bg-opacity-20;
-}
-
-.highlight-line {
- @apply -mx-4 border-l-4 border-primary-500 bg-gray-700 bg-opacity-50;
-}
-
-.line-number::before {
- @apply -ml-2 mr-4 inline-block w-4 text-right text-gray-400;
- content: attr(line);
-}
-```
-
-## Newletter component (v1.1.3)
-
-Introduced in v1.1.3, the newsletter component gives you an easy way to build an audience. It integrates with the following providers:
-
-- [Mailchimp](https://mailchimp.com/)
-- [Buttondown](https://buttondown.email/)
-- [Convertkit](https://convertkit.com/)
-
-To use it, specify the provider which you are using in the config file and add the necessary environment variables to the `.env` file.
-For more information on the required variables, check out `.env.sample.`
-
-Two components are exported, a default `NewsletterForm` and a `BlogNewsletterForm` component, which is also passed in as an MDX component
-and can be used in a blog post:
-
-```jsx
-
-```
-
-
-
-The component relies on nextjs's [API routes](https://nextjs.org/docs/api-routes/introduction) which requires a server-side instance of nextjs to be setup
-and is not compatible with a 100% static site export. Users should either self-host or use a compatible platform like Vercel or Netlify which supports this functionality.
-
-A static site compatible alternative is to substitute the route in the newsletter component with a form API endpoint provider.
-
-## Bibliography and Citations (v1.2.1)
-
-`rehype-citation` plugin is added to the xdm processing pipeline in v1.2.1. This allows you to easily format citations and insert bibliography from an existing bibtex or CSL-json file.
-
-For example, the following markdown code sample:
-
-```md
-Standard citation [@Nash1950]
-In-text citations e.g. @Nash1951
-Multiple citations [see @Nash1950; @Nash1951, page 50]
-
-**References:**
-
-[^ref]
-```
-
-is rendered to the following:
-
-Standard citation [@Nash1950]
-In-text citations e.g. @Nash1951
-Multiple citations [see @Nash1950; @Nash1951, page 50]
-
-**References:**
-
-[^ref]
-
-A bibliography will be inserted at the end of the document, but this can be overwritten by specifying a `[^Ref]` tag at the intended location.
-The plugin uses APA citation formation, but also supports the following CSLs, 'apa', 'vancouver', 'harvard1', 'chicago', 'mla', or a path to a user-specified CSL file.
-
-See [rehype-citation readme](https://github.com/timlrx/rehype-citation) for more information on the configuration options.
-
-## Self-hosted font (v1.5.0)
-
-Google font has been replaced with self-hosted font from [Fontsource](https://fontsource.org/). This gives the following [advantages](https://fontsource.org/docs/introduction):
-
-> Self-hosting brings significant performance gains as loading fonts from hosted services, such as Google Fonts, lead to an extra (render blocking) network request. To provide perspective, for simple websites it has been seen to double visual load times.
->
-> Fonts remain version locked. Google often pushes updates to their fonts without notice, which may interfere with your live production projects. Manage your fonts like any other NPM dependency.
->
-> Commit to privacy. Google does track the usage of their fonts and for those who are extremely privacy concerned, self-hosting is an alternative.
-
-This leads to a smaller font bundle and a 0.1s faster load time ([webpagetest comparison](https://www.webpagetest.org/video/compare.php?tests=220201_AiDcFH_f68a69b758454dd52d8e67493fdef7da,220201_BiDcMC_bf2d53f14483814ba61e794311dfa771)).
-
-To change the default Inter font:
-
-1. Install the preferred [font](https://fontsource.org/fonts) - `npm install -save @fontsource/`
-2. Update the import at `pages/_app.js`- `import '@fontsource/.css'`
-3. Update the `fontfamily` property in the tailwind css config file
-
-## Upgrade guide
-
-There are significant portions of the code that has been changed from v0 to v1 including support for layouts and a new mdx engine.
-
-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 in 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 over to the new template.
-
-Another alternative would be to pull the latest template version with the following code:
-
-```bash
-git remote add template git@github.com:timlrx/tailwind-nextjs-starter-blog.git
-git pull template v1 --allow-unrelated-histories
-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`, to avoid some build issues with Vercel. If you are migrating you should add a redirect to `next.config.js` like so:
-
-```js
-async redirects() {
- return [
- {
- source: '/:path/index.xml',
- destination: '/:path/feed.xml',
- permanent: true,
- }
- ]
-}
-```
diff --git a/data/blog/pictures-of-canada.mdx b/data/blog/pictures-of-canada.mdx
deleted file mode 100644
index bd3d556..0000000
--- a/data/blog/pictures-of-canada.mdx
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: O Canada
-date: '2017-07-15'
-tags: ['holiday', 'canada', 'images']
-draft: false
-layout: PostBanner
-images: ['/static/images/canada/mountains.jpg']
-summary: The scenic lands of Canada featuring maple leaves, snow-capped mountains, turquoise lakes and Toronto. Take in the sights in this photo gallery exhibition and see how easy it is to replicate with some MDX magic and tailwind classes.
----
-
-The scenic lands of Canada featuring maple leaves, snow-capped mountains, turquoise lakes and Toronto. Take in the sights in this photo gallery exhibition and see how easy it is to replicate with some MDX magic and tailwind classes.
-
-Features images served using `next/image` component. The locally stored images are located in a folder with the following path: `/static/images/canada/[filename].jpg`
-
-Since we are using mdx, we can create a simple responsive flexbox grid to display our images with a few tailwind css classes.
-
----
-
-# Gallery
-
-
-```
-
-With MDX v2, one can interleave markdown in jsx as shown in the example code.
-
-### Photo Credits
-
-
- Maple photo by [Guillaume
- Jaillet](https://unsplash.com/@i_am_g?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
- on
- [Unsplash](https://unsplash.com/s/photos/canada?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
-
-
- Mountains photo by [John
- Lee](https://unsplash.com/@john_artifexfilms?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
- on
- [Unsplash](https://unsplash.com/s/photos/canada?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
-
-
- Lake photo by [Tj
- Holowaychuk](https://unsplash.com/@tjholowaychuk?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
- on
- [Unsplash](https://unsplash.com/s/photos/canada?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
-
-
- Toronto photo by [Matthew
- Henry](https://unsplash.com/@matthewhenry?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
- on
- [Unsplash](https://unsplash.com/s/photos/canada?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
-
{next.title}
@@ -156,7 +156,7 @@ export default function PostLayout({ content, authorDetails, next, prev, childre
className="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400"
aria-label="Back to the blog"
>
- ← Back to the blog
+ ← 返回部落格