feat: update schema, add ProjectCard, readme

This commit is contained in:
enscribe 2024-09-13 15:18:47 -07:00
parent fbeab5a744
commit b93eddea6b
No known key found for this signature in database
GPG key ID: 9BBD5C4114E25322
24 changed files with 373 additions and 72 deletions

View file

@ -2,15 +2,31 @@ import { defineCollection, z } from 'astro:content'
const blog = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
date: z.coerce.date(),
draft: z.boolean().optional(),
image: z.string().optional(),
tags: z.array(z.string()).optional(),
authors: z.array(z.string()).optional(),
}),
schema: ({ image }) =>
z.object({
title: z
.string()
.max(
60,
'Title should be 60 characters or less for optimal Open Graph display.',
),
description: z
.string()
.max(
155,
'Description should be 155 characters or less for optimal Open Graph display.',
),
date: z.coerce.date(),
image: image()
.refine((img) => img.width === 1200 && img.height === 630, {
message:
'The image must be exactly 1200px × 630px for Open Graph requirements.',
})
.optional(),
tags: z.array(z.string()).optional(),
authors: z.array(z.string()).optional(),
draft: z.boolean().optional(),
}),
})
const authors = defineCollection({
@ -20,13 +36,28 @@ const authors = defineCollection({
pronouns: z.string().optional(),
avatar: z.string().url(),
bio: z.string().optional(),
website: z.string().url().optional(),
twitter: z.string().optional(),
github: z.string().optional(),
linkedin: z.string().optional(),
mail: z.string().email().optional(),
discord: z.string().optional(),
website: z.string().url().optional(),
twitter: z.string().url().optional(),
github: z.string().url().optional(),
linkedin: z.string().url().optional(),
discord: z.string().url().optional(),
}),
})
export const collections = { blog, authors }
const projects = defineCollection({
type: 'content',
schema: ({ image }) =>
z.object({
name: z.string(),
description: z.string(),
tags: z.array(z.string()),
image: image().refine((img) => img.width === 1200 && img.height === 630, {
message:
'The image must be exactly 1200px × 630px for Open Graph requirements.',
}),
link: z.string().url(),
}),
})
export const collections = { blog, authors, projects }