diff --git a/app/Main.tsx b/app/Main.tsx index 4c091d2..45a8036 100644 --- a/app/Main.tsx +++ b/app/Main.tsx @@ -37,7 +37,7 @@ export default function Home({ posts }) {

{title} @@ -55,7 +55,7 @@ export default function Home({ posts }) {

@@ -73,7 +73,7 @@ export default function Home({ posts }) { {posts.length > MAX_DISPLAY && (
diff --git a/app/page.tsx b/app/page.tsx index c036ba2..8b36336 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,9 +1,9 @@ import { sortPosts, allCoreContent } from 'pliny/utils/contentlayer' -import { allBlogs } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' import HomePage from 'components/app/HomePage' export default async function Page() { - const sortedPosts = sortPosts(allBlogs) + const sortedPosts = sortPosts(allPosts) const posts = allCoreContent(sortedPosts) return } diff --git a/app/blog/[...slug]/page.tsx b/app/posts/[...slug]/page.tsx similarity index 89% rename from app/blog/[...slug]/page.tsx rename to app/posts/[...slug]/page.tsx index 858247f..cab0779 100644 --- a/app/blog/[...slug]/page.tsx +++ b/app/posts/[...slug]/page.tsx @@ -4,8 +4,8 @@ import 'katex/dist/katex.css' import { components } from '@/components/common/MDXComponents' import { MDXLayoutRenderer } from 'pliny/mdx-components' import { sortPosts, coreContent, allCoreContent } from 'pliny/utils/contentlayer' -import { allBlogs } from 'contentlayer/generated' -import type { Blog } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import PostSimple from '@/layouts/PostSimple' import PostLayout from '@/layouts/PostLayout' import PostBanner from '@/layouts/PostBanner' @@ -26,7 +26,7 @@ export async function generateMetadata({ params: { slug: string[] } }): Promise { const slug = decodeURI(params.slug.join('/')) - const post = allBlogs.find((p) => p.slug === slug) + const post = allPosts.find((p) => p.slug === slug) const authorList = post?.authors || ['default'] if (!post) { return @@ -69,13 +69,13 @@ export async function generateMetadata({ } export const generateStaticParams = async () => { - return allBlogs.map((p) => ({ slug: p.slug.split('/').map((name) => decodeURI(name)) })) + return allPosts.map((p) => ({ slug: p.slug.split('/').map((name) => decodeURI(name)) })) } export default async function Page({ params }: { params: { slug: string[] } }) { const slug = decodeURI(params.slug.join('/')) // Filter out drafts in production - const sortedCoreContents = allCoreContent(sortPosts(allBlogs)) + const sortedCoreContents = allCoreContent(sortPosts(allPosts)) const postIndex = sortedCoreContents.findIndex((p) => p.slug === slug) if (postIndex === -1) { return notFound() @@ -83,7 +83,7 @@ export default async function Page({ params }: { params: { slug: string[] } }) { const prev = sortedCoreContents[postIndex + 1] const next = sortedCoreContents[postIndex - 1] - const post = allBlogs.find((p) => p.slug === slug) as Blog + const post = allPosts.find((p) => p.slug === slug) as Post const authorList = post?.authors || ['default'] const mainContent = coreContent(post) const jsonLd = post.structuredData diff --git a/app/blog/page.tsx b/app/posts/page.tsx similarity index 87% rename from app/blog/page.tsx rename to app/posts/page.tsx index 4dcbddc..ee9a4b6 100644 --- a/app/blog/page.tsx +++ b/app/posts/page.tsx @@ -1,6 +1,6 @@ import ListLayout from '@/layouts/ListLayoutWithTags' import { allCoreContent, sortPosts } from 'pliny/utils/contentlayer' -import { allBlogs } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' import { genPageMetadata } from 'app/seo' const POSTS_PER_PAGE = 5 @@ -8,7 +8,7 @@ const POSTS_PER_PAGE = 5 export const metadata = genPageMetadata({ title: 'Blog' }) export default function BlogPage() { - const posts = allCoreContent(sortPosts(allBlogs)) + const posts = allCoreContent(sortPosts(allPosts)) const pageNumber = 1 const initialDisplayPosts = posts.slice( POSTS_PER_PAGE * (pageNumber - 1), diff --git a/app/blog/page/[page]/page.tsx b/app/posts/page/[page]/page.tsx similarity index 83% rename from app/blog/page/[page]/page.tsx rename to app/posts/page/[page]/page.tsx index a0a8b48..3075204 100644 --- a/app/blog/page/[page]/page.tsx +++ b/app/posts/page/[page]/page.tsx @@ -1,18 +1,18 @@ import ListLayout from '@/layouts/ListLayoutWithTags' import { allCoreContent, sortPosts } from 'pliny/utils/contentlayer' -import { allBlogs } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' const POSTS_PER_PAGE = 5 export const generateStaticParams = async () => { - const totalPages = Math.ceil(allBlogs.length / POSTS_PER_PAGE) + const totalPages = Math.ceil(allPosts.length / POSTS_PER_PAGE) const paths = Array.from({ length: totalPages }, (_, i) => ({ page: (i + 1).toString() })) return paths } export default function Page({ params }: { params: { page: string } }) { - const posts = allCoreContent(sortPosts(allBlogs)) + const posts = allCoreContent(sortPosts(allPosts)) const pageNumber = parseInt(params.page as string) const initialDisplayPosts = posts.slice( POSTS_PER_PAGE * (pageNumber - 1), diff --git a/app/sitemap.ts b/app/sitemap.ts index 74f176c..bad6647 100644 --- a/app/sitemap.ts +++ b/app/sitemap.ts @@ -1,18 +1,18 @@ import { MetadataRoute } from 'next' -import { allBlogs } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' import siteMetadata from '@/data/siteMetadata' export default function sitemap(): MetadataRoute.Sitemap { const siteUrl = siteMetadata.siteUrl - const blogRoutes = allBlogs + const blogRoutes = allPosts .filter((post) => !post.draft) .map((post) => ({ url: `${siteUrl}/${post.path}`, lastModified: post.lastmod || post.date, })) - const routes = ['', 'blog', 'projects', 'tags', 'members'].map((route) => ({ + const routes = ['', 'posts', 'projects', 'tags', 'members'].map((route) => ({ url: `${siteUrl}/${route}`, lastModified: new Date().toISOString().split('T')[0], })) diff --git a/app/tags/[tag]/page.tsx b/app/tags/[tag]/page.tsx index 94a3dd2..84652fa 100644 --- a/app/tags/[tag]/page.tsx +++ b/app/tags/[tag]/page.tsx @@ -2,7 +2,7 @@ import { slug } from 'github-slugger' import { allCoreContent, sortPosts } from 'pliny/utils/contentlayer' import siteMetadata from '@/data/siteMetadata' import ListLayout from '@/layouts/ListLayoutWithTags' -import { allBlogs } from 'contentlayer/generated' +import { allPosts } from 'contentlayer/generated' import tagData from 'app/tag-data.json' import { genPageMetadata } from 'app/seo' import { Metadata } from 'next' @@ -36,7 +36,7 @@ export default function TagPage({ params }: { params: { tag: string } }) { // Capitalize first letter and convert space to dash const title = tag[0].toUpperCase() + tag.split(' ').join('-').slice(1) const filteredPosts = allCoreContent( - sortPosts(allBlogs.filter((post) => post.tags && post.tags.map((t) => slug(t)).includes(tag))) + sortPosts(allPosts.filter((post) => post.tags && post.tags.map((t) => slug(t)).includes(tag))) ) if (filteredPosts.length === 0) { return notFound() diff --git a/app/tags/page.tsx b/app/tags/page.tsx index 4813e94..e890823 100644 --- a/app/tags/page.tsx +++ b/app/tags/page.tsx @@ -4,7 +4,7 @@ import { slug } from 'github-slugger' import tagData from 'app/tag-data.json' import { genPageMetadata } from 'app/seo' -export const metadata = genPageMetadata({ title: 'Tags', description: 'Things I blog about' }) +export const metadata = genPageMetadata({ title: 'Tags', description: 'Things This blog about' }) export default async function Page() { const tagCounts = tagData as Record diff --git a/contentlayer.config.ts b/contentlayer.config.ts index 75bf60c..7f9501b 100644 --- a/contentlayer.config.ts +++ b/contentlayer.config.ts @@ -60,9 +60,9 @@ const computedFields: ComputedFields = { /** * Count the occurrences of all tags across blog posts and write to json file */ -function createTagCount(allBlogs) { +function createTagCount(allPosts) { const tagCount: Record = {} - allBlogs.forEach((file) => { + allPosts.forEach((file) => { if (file.tags && (!isProduction || file.draft !== true)) { file.tags.forEach((tag) => { const formattedTag = slug(tag) @@ -77,22 +77,22 @@ function createTagCount(allBlogs) { writeFileSync('./app/tag-data.json', JSON.stringify(tagCount)) } -function createSearchIndex(allBlogs) { +function createSearchIndex(allPosts) { if ( siteMetadata?.search?.provider === 'kbar' && siteMetadata.search.kbarConfig.searchDocumentsPath ) { writeFileSync( `public/${path.basename(siteMetadata.search.kbarConfig.searchDocumentsPath)}`, - JSON.stringify(allCoreContent(sortPosts(allBlogs))) + JSON.stringify(allCoreContent(sortPosts(allPosts))) ) console.log('Local search index generated...') } } -export const Blog = defineDocumentType(() => ({ - name: 'Blog', - filePathPattern: 'blog/**/*.mdx', +export const Post = defineDocumentType(() => ({ + name: 'Post', + filePathPattern: 'posts/**/*.mdx', contentType: 'mdx', fields: { title: { type: 'string', required: true }, @@ -162,7 +162,7 @@ export const Project = defineDocumentType(() => ({ export default makeSource({ contentDirPath: 'data', - documentTypes: [Blog, Project], + documentTypes: [Post, Project], mdx: { cwd: process.cwd(), remarkPlugins: [ @@ -192,8 +192,8 @@ export default makeSource({ ], }, onSuccess: async (importData) => { - const { allBlogs } = await importData() - createTagCount(allBlogs) - createSearchIndex(allBlogs) + const { allPosts } = await importData() + createTagCount(allPosts) + createSearchIndex(allPosts) }, }) diff --git a/data/headerNavLinks.ts b/data/headerNavLinks.ts index 81adc5a..b4965a5 100644 --- a/data/headerNavLinks.ts +++ b/data/headerNavLinks.ts @@ -1,6 +1,6 @@ const headerNavLinks = [ { href: '/', title: 'Home' }, - // { href: '/blog', title: 'Blog' }, + { href: '/posts', title: 'Posts' }, { href: '/ideascale', title: 'Ideascale' }, { href: '/projects', title: 'Projects' }, { href: '/members', title: 'Members' }, diff --git a/data/memberData.ts b/data/memberData.ts index 2e13e7b..b4e0caa 100644 --- a/data/memberData.ts +++ b/data/memberData.ts @@ -2,7 +2,7 @@ import { Member } from '@/app/type' const membersData: Member[] = [ { - name: 'Phùng Tiến Dũng | Founder', + name: 'Phùng Tiến Dũng', github: 'tidvn', avatar: 'https://avatars.githubusercontent.com/u/74198018?v=4', company: '', @@ -29,7 +29,7 @@ const membersData: Member[] = [ ], }, { - name: 'Nguyễn Duy Khánh | Co-Founder', + name: 'Nguyễn Duy Khánh', github: 'independenceee', avatar: 'https://avatars.githubusercontent.com/u/108068667?v=4', email: 'nguyenkhanh17112003@gmail.com', @@ -51,7 +51,7 @@ const membersData: Member[] = [ }, { - name: 'Nguyễn Hồng Sơn | Co-Founder', + name: 'Nguyễn Hồng Sơn', github: 'sonson0910', avatar: 'https://avatars.githubusercontent.com/u/91943651?v=4', email: '', diff --git a/data/blog/github-markdown-guide.mdx b/data/posts/github-markdown-guide.mdx similarity index 100% rename from data/blog/github-markdown-guide.mdx rename to data/posts/github-markdown-guide.mdx diff --git a/faq/customize-kbar-search.md b/faq/customize-kbar-search.md index 6e3995e..77febe7 100644 --- a/faq/customize-kbar-search.md +++ b/faq/customize-kbar-search.md @@ -12,7 +12,7 @@ Add a `SearchProvider` component such as the one shown below and use it in place import { KBarSearchProvider } from 'pliny/search/KBar' import { useRouter } from 'next/navigation' import { CoreContent } from 'pliny/utils/contentlayer' -import { Blog } from 'contentlayer/generated' +import { Post } from 'contentlayer/generated' export const SearchProvider = ({ children }) => { const router = useRouter() @@ -59,21 +59,21 @@ export const SearchProvider = ({ children }) => { You can even choose to do a full text search over the entire generated blog content though this would come at the expense of a larger search index file by modifying the `createSearchIndex` function in `contentlayer.config.ts` to: ```tsx -function createSearchIndex(allBlogs) { +function createSearchIndex(allPosts) { if ( siteMetadata?.search?.provider === 'kbar' && siteMetadata.search.kbarConfig.searchDocumentsPath ) { writeFileSync( `public/${siteMetadata.search.kbarConfig.searchDocumentsPath}`, - JSON.stringify((sortPosts(allBlogs))) + JSON.stringify(sortPosts(allPosts)) ) console.log('Local search index generated...') } } ``` -Note the change from `JSON.stringify(allCoreContent(sortPosts(allBlogs)))` to `JSON.stringify((sortPosts(allBlogs)))`. +Note the change from `JSON.stringify(allCoreContent(sortPosts(allPosts)))` to `JSON.stringify((sortPosts(allPosts)))`. Next, in the modified `SearchProvider`, dump the raw content to the `keywords` field in the `onSearchDocumentsLoad` prop: diff --git a/layouts/ListLayout.tsx b/layouts/ListLayout.tsx index 8a71f02..70111bd 100644 --- a/layouts/ListLayout.tsx +++ b/layouts/ListLayout.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { usePathname } from 'next/navigation' import { formatDate } from 'pliny/utils/formatDate' import { CoreContent } from 'pliny/utils/contentlayer' -import type { Blog } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import Link from '@/components/common/Link' import Tag from '@/components/common/Tag' import siteMetadata from '@/data/siteMetadata' @@ -14,9 +14,9 @@ interface PaginationProps { currentPage: number } interface ListLayoutProps { - posts: CoreContent[] + posts: CoreContent[] title: string - initialDisplayPosts?: CoreContent[] + initialDisplayPosts?: CoreContent[] pagination?: PaginationProps } diff --git a/layouts/ListLayoutWithTags.tsx b/layouts/ListLayoutWithTags.tsx index fe9056a..2e5ac8b 100644 --- a/layouts/ListLayoutWithTags.tsx +++ b/layouts/ListLayoutWithTags.tsx @@ -5,7 +5,7 @@ import { usePathname } from 'next/navigation' import { slug } from 'github-slugger' import { formatDate } from 'pliny/utils/formatDate' import { CoreContent } from 'pliny/utils/contentlayer' -import type { Blog } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import Link from '@/components/common/Link' import Tag from '@/components/common/Tag' import siteMetadata from '@/data/siteMetadata' @@ -16,9 +16,9 @@ interface PaginationProps { currentPage: number } interface ListLayoutProps { - posts: CoreContent[] + posts: CoreContent[] title: string - initialDisplayPosts?: CoreContent[] + initialDisplayPosts?: CoreContent[] pagination?: PaginationProps } @@ -86,11 +86,11 @@ export default function ListLayoutWithTags({
- {pathname.startsWith('/blog') ? ( + {pathname.startsWith('/posts') ? (

All Posts

) : ( All Posts diff --git a/layouts/PostBanner.tsx b/layouts/PostBanner.tsx index f774cdf..010b85e 100644 --- a/layouts/PostBanner.tsx +++ b/layouts/PostBanner.tsx @@ -2,7 +2,7 @@ import { ReactNode } from 'react' import Image from 'next/image' import Bleed from 'pliny/ui/Bleed' import { CoreContent } from 'pliny/utils/contentlayer' -import type { Blog } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import Comments from '@/components/common/Comments' import Link from '@/components/common/Link' import PageTitle from '@/components/common/PageTitle' @@ -11,7 +11,7 @@ import siteMetadata from '@/data/siteMetadata' import ScrollTopAndComment from '@/components/common/ScrollTopAndComment' interface LayoutProps { - content: CoreContent + content: CoreContent children: ReactNode next?: { path: string; title: string } prev?: { path: string; title: string } diff --git a/layouts/PostLayout.tsx b/layouts/PostLayout.tsx index 849fdd9..cc4cdd1 100644 --- a/layouts/PostLayout.tsx +++ b/layouts/PostLayout.tsx @@ -1,6 +1,6 @@ import { ReactNode } from 'react' import { CoreContent } from 'pliny/utils/contentlayer' -import type { Blog } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import Link from '@/components/common/Link' import PageTitle from '@/components/common/PageTitle' import SectionContainer from '@/components/common/SectionContainer' @@ -15,7 +15,7 @@ import siteMetadata from '@/data/siteMetadata' import Comments from '@/components/common/Comments' interface LayoutProps { - content: CoreContent + content: CoreContent authorList: string[] next?: { path: string; title: string; url: string } prev?: { path: string; title: string; url: string } @@ -103,7 +103,7 @@ export default async function PostLayout({
{author.github && ( {author.github.replace('https://github.com/', '@')} diff --git a/layouts/PostSimple.tsx b/layouts/PostSimple.tsx index 53ed5bb..afc1aa2 100644 --- a/layouts/PostSimple.tsx +++ b/layouts/PostSimple.tsx @@ -1,7 +1,7 @@ import { ReactNode } from 'react' import { formatDate } from 'pliny/utils/formatDate' import { CoreContent } from 'pliny/utils/contentlayer' -import type { Blog } from 'contentlayer/generated' +import type { Post } from 'contentlayer/generated' import Comments from '@/components/common/Comments' import Link from '@/components/common/Link' import PageTitle from '@/components/common/PageTitle' @@ -10,7 +10,7 @@ import siteMetadata from '@/data/siteMetadata' import ScrollTopAndComment from '@/components/common/ScrollTopAndComment' interface LayoutProps { - content: CoreContent + content: CoreContent children: ReactNode next?: { path: string; title: string } prev?: { path: string; title: string } diff --git a/scripts/rss.mjs b/scripts/rss.mjs index 690ff4d..3d8be5b 100644 --- a/scripts/rss.mjs +++ b/scripts/rss.mjs @@ -4,14 +4,14 @@ import { slug } from 'github-slugger' import { escape } from 'pliny/utils/htmlEscaper.js' import siteMetadata from '../data/siteMetadata.js' import tagData from '../app/tag-data.json' assert { type: 'json' } -import { allBlogs } from '../.contentlayer/generated/index.mjs' +import { allPosts } from '../.contentlayer/generated/index.mjs' import { sortPosts } from 'pliny/utils/contentlayer.js' const generateRssItem = (config, post) => ` - ${config.siteUrl}/blog/${post.slug} + ${config.siteUrl}/posts/${post.slug} ${escape(post.title)} - ${config.siteUrl}/blog/${post.slug} + ${config.siteUrl}/posts/${post.slug} ${post.summary && `${escape(post.summary)}`} ${new Date(post.date).toUTCString()} ${config.email} (${config.author}) @@ -23,7 +23,7 @@ const generateRss = (config, posts, page = 'feed.xml') => ` ${escape(config.title)} - ${config.siteUrl}/blog + ${config.siteUrl}/posts ${escape(config.description)} ${config.language} ${config.email} (${config.author}) @@ -35,9 +35,9 @@ const generateRss = (config, posts, page = 'feed.xml') => ` ` -async function generateRSS(config, allBlogs, page = 'feed.xml') { - const publishPosts = allBlogs.filter((post) => post.draft !== true) - // RSS for blog post +async function generateRSS(config, allPosts, page = 'feed.xml') { + const publishPosts = allPosts.filter((post) => post.draft !== true) + // RSS for post post if (publishPosts.length > 0) { const rss = generateRss(config, sortPosts(publishPosts)) writeFileSync(`./public/${page}`, rss) @@ -45,7 +45,7 @@ async function generateRSS(config, allBlogs, page = 'feed.xml') { if (publishPosts.length > 0) { for (const tag of Object.keys(tagData)) { - const filteredPosts = allBlogs.filter((post) => post.tags.map((t) => slug(t)).includes(tag)) + const filteredPosts = allPosts.filter((post) => post.tags.map((t) => slug(t)).includes(tag)) const rss = generateRss(config, filteredPosts, `tags/${tag}/${page}`) const rssPath = path.join('public', 'tags', tag) mkdirSync(rssPath, { recursive: true }) @@ -55,7 +55,7 @@ async function generateRSS(config, allBlogs, page = 'feed.xml') { } const rss = () => { - generateRSS(siteMetadata, allBlogs) + generateRSS(siteMetadata, allPosts) console.log('RSS feed generated...') } export default rss