Archivos Markdown
Cómo funcionan el blog y la documentación.
El proyecto incluye un blog y documentación construidos utilizando Contentlayer y MDX.
Contentlayer
Contentlayer es un CMS basado en Markdown que es flexible y extensible. Te permite organizar el contenido utilizando archivos Markdown y ofrece una API sencilla para acceder a los datos en tu aplicación.
Puedes crear modelos de datos reutilizables para varios tipos de contenido como entradas de blog, documentos y páginas con Contentlayer.
El frontmatter en los archivos Markdown te permite definir metadatos como título, descripción, autores e imágenes, simplificando la gestión del contenido.
contentlayer.config.js
Aquí tienes un ejemplo de un archivo contentlayer.config.js
para configurar Contentlayer en tu proyecto:
import { defineDocumentType, makeSource } from "contentlayer/source-files";
/** @type {import('contentlayer/source-files').ComputedFields} */
const computedFields = {
slug: {
type: "string",
resolve: (doc) => `/${doc._raw.flattenedPath}`,
},
slugAsParams: {
type: "string",
resolve: (doc) => doc._raw.flattenedPath.split("/").slice(1).join("/"),
},
};
export const Doc = defineDocumentType(() => ({
name: "Doc",
filePathPattern: `docs/**/*.mdx`,
contentType: "mdx",
fields: {
title: {
type: "string",
required: true,
},
description: {
type: "string",
},
published: {
type: "boolean",
default: true,
},
},
computedFields,
}));
export const Guide = defineDocumentType(() => ({
name: "Guide",
filePathPattern: `guides/**/*.mdx`,
contentType: "mdx",
fields: {
title: {
type: "string",
required: true,
},
description: {
type: "string",
},
date: {
type: "date",
required: true,
},
published: {
type: "boolean",
default: true,
},
featured: {
type: "boolean",
default: false,
},
},
computedFields,
}));
export const Post = defineDocumentType(() => ({
name: "Post",
filePathPattern: `blog/**/*.mdx`,
contentType: "mdx",
fields: {
title: {
type: "string",
required: true,
},
description: {
type: "string",
},
date: {
type: "date",
required: true,
},
published: {
type: "boolean",
default: true,
},
image: {
type: "string",
required: true,
},
authors: {
type: "list",
of: { type: "string" },
required: true,
},
},
computedFields,
}));
export const Page = defineDocumentType(() => ({
name: "Page",
filePathPattern: `pages/**/*.mdx`,
contentType: "mdx",
fields: {
title: {
type: "string",
required: true,
},
description: {
type: "string",
},
},
computedFields,
}));
export default makeSource({
contentDirPath: "./content",
documentTypes: [Page, Doc, Guide, Post],
mdx: {},
});
Este archivo configura Contentlayer para buscar archivos Markdown en los directorios especificados (content/blog
, content/authors
, content/docs
, content/guides
, content/pages
). También define los diferentes tipos de documentos que utilizas en tu proyecto junto con los campos asociados a cada tipo de documento.
Puedes personalizar este archivo de acuerdo a las necesidades de tu proyecto añadiendo nuevos tipos de documentos o ajustando los campos existentes según tus requisitos específicos.
Frontmatters
Aquí está la lista de todos los frontmatters disponibles para cada parte:
Autores
---
title: mickasmt
avatar: /_static/avatars/mickasmt.jpg
twitter: mickasmt
---
Blog
---
title: Deploying Next.js Apps
description: How to deploy your Next.js apps on Vercel.
image: /_static/blog/blog-post-3.jpg
date: "2023-01-02"
authors:
- mickasmt
---
Docs
---
title: Database
description: How to config your Neon database.
---
Guides
---
title: Build a blog using ContentLayer and MDX.
description: Learn how to use ContentLayer to build a blog with Next.js
date: 2022-11-18
---
Pages
---
title: Privacy
description: The Privacy Policy for your app.
---