Docs/Componenti
// componente
Blog
Un blog completo, senza CMS e senza database: articoli, categorie, pagine autore, meta tag e Schema Markup JSON-LD. Tutto il contenuto vive in un unico file TypeScript, quindi gli articoli sono JSX — puoi metterci componenti, immagini ottimizzate e blocchi di codice senza inventarti una pipeline markdown.
File
app/blog/_assets/content.tsx— categorie, autori e articoli. È l'unico file che tocchi davvero.app/blog/page.tsx— indice: gli ultimi 6 articoli per data + la griglia delle categorie.app/blog/[articleId]/page.tsx— pagina articolo, con indice laterale, autore, JSON-LD e articoli correlati.app/blog/category/[categoryId]/page.tsxeapp/blog/author/[authorId]/page.tsx— archivi generati dagli slug.app/blog/_assets/components/—CardArticle,CardCategory,BadgeCategory,Avatar,HeaderBlog.
Uso base
Il blog è già una rotta: vai su /blog e c'è. Aggiungere un articolo vuol dire aggiungere un oggetto all'array articles.
app/blog/_assets/content.tsx
tsx
export const articles: articleType[] = [
{
slug: "introducing-supabase",
title: "Introducing Supabase to ZeroToShip",
description: "Massimo 160 caratteri: finisce nella meta description.",
categories: [
categories.find((category) => category.slug === categorySlugs.feature),
],
author: authors.find((author) => author.slug === authorSlugs.alberto),
publishedAt: "2023-11-20",
image: {
src: introducingSupabaseImg,
urlRelative: "/blog/introducing-supabase/header.jpg",
alt: "Supabase and ZeroToShip logo combined",
},
content: (
<>
<h2 className={styles.h2}>Il titolo della sezione</h2>
<p className={styles.p}>Il corpo dell'articolo.</p>
</>
),
},
];Personalizzare
- Categorie: aggiungi una chiave a
categorySlugse poi l'oggetto corrispondente incategories. Servonotitle,titleShort(per i badge),descriptionedescriptionShort. Da lì nasce la pagina/blog/category/<slug>. - Autori: stessa logica con
authorSlugseauthors. Ogni autore haname,job,description, unavatarimportato daapp/blog/_assets/images/authors/e un arraysocialscostruito dasocialIcons(Twitter, LinkedIn, GitHub già pronti). - Stile del testo: l'oggetto
stylesincontent.tsxdefinisce le classi dih2,h3,p,ul,li,codeecodeInline. Cambi lì, cambiano tutti gli articoli insieme. Usa giàheadline-serife i token--ink/--cream-2. - Immagini: metti l'header in
public/blog/<slug>/, importalo in cima al file e passalo sia comeimage.src(per le card, conplaceholder="blur") sia comeimage.urlRelative(per Open Graph e JSON-LD). - Look: le card usano
.card-brutale i badge.tag-brutaldaapp/globals.css, con l'hover che sposta l'ombra di 2px. Il layout del blog forza sfondo--creame testo--ink.
Per il flusso completo, passo per passo, c'è il tutorial Scrivere un articolo del blog.