Card

Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque placeat maxime vero unde pariatur id illo repudiandae praesentium aperiam magni officia voluptates iure, ab earum repellendus voluptatum beatae. Nobis, impedit!

Instructions

  • Lorem ipsum dolor sit amet consectetur adipisicing elit.

  • Dolor sit amet consectetur adipisicing elit.

  • Atque placeat maxime vero unde pariatur id illo repudiandae.

  • Praesentium aperiam magni officia .

Enterprise

$299.99/month

For Enterprises

Lorem ipsum dolor sit amet consectetur adipisicing elit.

API

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ullam tempora, iure quidem iusto soluta cupiditate itaque. Libero repellat consequuntur soluta ducimus praesentium. Quo officia earum delectus perferendis iusto facilis rem nulla quisquam quibusdam quis rerum cumque dignissimos, reiciendis cupiditate, nisi porro corporis reprehenderit libero, vitae deleniti nostrum autem recusandae ullam?

import { format, parseISO } from 'date-fns'
import { allPosts } from 'contentlayer/generated'

export const generateStaticParams = async () => allPosts.map((post) => ({ slug: post._raw.flattenedPath }))

export const generateMetadata = ({ params }: { params: { slug: string } }) => {
  const post = allPosts.find((post) => post._raw.flattenedPath === params.slug)
  if (!post) throw new Error(`Post not found for slug: ${params.slug}`)
  return { title: post.title }
}

const PostLayout = ({ params }: { params: { slug: string } }) => {
  const post = allPosts.find((post) => post._raw.flattenedPath === params.slug)
  if (!post) throw new Error(`Post not found for slug: ${params.slug}`)

  return (
    <article className="mx-auto max-w-xl py-8">
      <div className="mb-8 text-center">
        <time dateTime={post.date} className="mb-1 text-xs text-gray-600">
          {format(parseISO(post.date), 'LLLL d, yyyy')}
        </time>
        <h1 className="text-3xl font-bold">{post.title}</h1>
      </div>
      <div className="[&>*]:mb-3 [&>*:last-child]:mb-0" dangerouslySetInnerHTML={{ __html: post.body.html }} />
    </article>
  )
}

export default PostLayout;

Custom components

Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque placeat maxime vero unde pariatur id illo repudiandae praesentium aperiam magni officia voluptates iure, ab earum repellendus voluptatum beatae. Nobis, impedit!

Free

$0/month

Enterprise

$8/month