biagiojs

Content collections

File Markdown in content/<nome>/ con frontmatter YAML. Usa getCollection() in getStaticPaths() per generare le route — stesso pattern delle content collection di Astro.

Uso base

---
title: Il mio articolo
date: 2026-07-09
slug: mio-articolo
---

# Ciao

Corpo in **Markdown**.
export function getStaticPaths({ getCollection }) {
  return getCollection('content/blog').map(post => ({
    params: { slug: post.slug },
    props: { post },
  }));
}

export default function ({ props: { post } }) {
  // post.data.title, post.html, post.slug
}

Genera lo scheletro con:

biagio new collection blog

Schema tipizzato (content.config.js)

Valida il frontmatter a build e documenta i campi attesi:

import { defineCollection } from 'biagiojs/content';

export const collections = {
  blog: defineCollection({
    schema: {
      title: { type: 'string', required: true },
      date: { type: 'string' },
      draft: { type: 'boolean', default: false },
      order: { type: 'number' },
    },
  }),
};

Tipi supportati: string, number, boolean, date. Usa required: true e default dove serve. Errori di validazione indicano il file.

Draft mode

---
title: Bozza in lavorazione
draft: true
---
AmbienteComportamento
SviluppoI post draft sono inclusi in getCollection()
Produzione (NODE_ENV=production)I draft sono esclusi dalle route

Utile per workflow editoriali senza CMS separato.

Contenuti per lingua

Con site.locales, metti le traduzioni in content/blog/it/ (fallback su content/blog/ se assente).

Scaffold

biagio new collection posts    # → content/posts/hello.md + snippet content.config.js
biagio new page blog/[slug]    # → pages/blog/[slug].page.js con getStaticPaths