Open-Source
TypeScript
Next.js
CMS
NetlifyCMS

@egvelho/next-cms

Um CMS para sites estáticos utilizando Next.js e NetlifyCMS.

Eduardo Velho
Eduardo Velho

Professor e pesquisador, PhD

Compartilhar em

Descrição

O objetivo deste projeto é provisionar uma camada de abstração entre Next.js e NetlifyCMS, de forma a proporcionar uma melhor experiência para o desenvolvedor. Além disso, também estão disponíveis ferramentas para gerenciar assets (gerador de sitemap, otimização de imagens, criação automática de PWA) e metadados das páginas. O projeto não é mantido ativamente, e também não possui documentação. Para utilizar esse código, sugiro realizar um fork ao invés de adicioná-lo diretamente como dependência no package.json. Para um exemplo de utilização, existe um projeto demo que pode ser utilizado como ponto de partida.

Funcionalidades gerais

  • Gerar ícones para PWA baseados em um arquivo SVG;
  • Experiência de desenvolvimento otimizada para NetlifyCMS e Next.js;
  • Utilitários para trabalhar com arquivos JSON.

Exemplo de utilização

import {
  collectionFolder,
  GetCollectionType,
} from "@egvelho/next-meta/cms/collection";

export type BlogPost = GetCollectionType<typeof blogPost>;

export const blogPost = collectionFolder({
  folder: "app/blog/posts",
  label: "Blog posts",
  labelSingular: "post",
  slug: "{{title}}",
  sortableFields: ["publishDate"],
}).fields((data) => ({
  title: data.string({
    label: "Title",
  }),
  description: data.string({
    label: "Description",
  }),
  image: data.image({
    label: "Image",
  }),
  publishDate: data.datetime<"optional">({
    label: "Publish date",
    dateFormat: "MM/YYYY",
    timeFormat: "HH:mm",
    required: false,
  }),
  tags: data.keywords({
    label: "Tags",
    min: 1,
    max: 5,
  }),
  authorName: data.string<"optional">({
    label: "Author name",
    required: false,
  }),
  authorDescription: data.string<"optional">({
    label: "Author description",
    required: false,
  }),
  authorPicture: data.image<"optional">({
    label: "Author picture",
    required: false,
  }),
  titleColor: data.color<"optional">({
    label: "Title color",
    required: false,
    allowInput: true,
  }),
  backgroundColor: data.color<"optional">({
    label: "Background color",
    required: false,
    allowInput: true,
  }),
  backgroundImage: data.image<"optional">({
    label: "Background image",
    required: false,
  }),
  content: data.markdown({
    label: "Content",
  }),
}));

Código-fonte

Esse projeto é software livre e de código aberto, estando disponível no GitHub (@egvelho/next-cms) sob licença GPL 3.0. Também está disponível na plataforma NPM para ser utilizado como dependência em projetos Node.js.

Entrar em contato