44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { defineCollection, z } from 'astro:content';
|
|
|
|
// AstroJS collection configuration
|
|
|
|
const blog = defineCollection({
|
|
type: 'content',
|
|
schema: z.object({
|
|
title: z.string(),
|
|
draft: z.boolean().optional(),
|
|
tags: z.array(z.string()).optional(),
|
|
published_at: z.coerce.date().optional(),
|
|
updated_at: z.coerce.date().optional(),
|
|
}),
|
|
});
|
|
|
|
const portafolio = defineCollection({
|
|
type: 'content',
|
|
schema: ({ image }) =>
|
|
z.object({
|
|
title: z.string(),
|
|
draft: z.boolean().optional(),
|
|
brief: z.string(),
|
|
status: z.enum(['Backlog', 'Activo', 'Fixes', 'Finalizado']),
|
|
tags: z.array(z.string()).optional(),
|
|
technologies: z.array(z.string()),
|
|
created_at: z.coerce.date().optional(),
|
|
updated_at: z.coerce.date().optional(),
|
|
thumbnail: image().refine((img) => img.width >= 1080, {
|
|
message: 'Cover image must be at least 1080 pixels wide!',
|
|
}),
|
|
timeframe: z.string().optional(),
|
|
links: z
|
|
.object({
|
|
repo: z.string().url(),
|
|
url: z.string().url(),
|
|
})
|
|
.optional(),
|
|
}),
|
|
});
|
|
|
|
export const collections = {
|
|
blog,
|
|
portafolio,
|
|
};
|