v0.1.0 commit

This commit is contained in:
2026-03-31 11:32:05 -04:00
parent 9ebf06a15a
commit fc6cbae2bb
5 changed files with 3335 additions and 3394 deletions
+3180 -3390
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -15,10 +15,10 @@
"sanity" "sanity"
], ],
"dependencies": { "dependencies": {
"@sanity/vision": "^5.14.1", "@sanity/vision": "^5.18.0",
"react": "^19.1", "react": "^19.1",
"react-dom": "^19.1", "react-dom": "^19.1",
"sanity": "^5.14.1", "sanity": "^5.18.0",
"styled-components": "^6.1.18" "styled-components": "^6.1.18"
}, },
"devDependencies": { "devDependencies": {
+83
View File
@@ -0,0 +1,83 @@
import {defineField, defineType} from 'sanity'
export default defineType({
name: 'changelogEntry',
title: 'Changelog Entry',
type: 'document',
fields: [
defineField({
name: 'version',
title: 'Version',
type: 'string',
description: 'e.g. v1.2.0',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required().max(120),
}),
defineField({
name: 'publishedAt',
title: 'Published At',
type: 'datetime',
initialValue: () => new Date().toISOString(),
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'tags',
title: 'Tags',
type: 'array',
of: [
{
type: 'string',
options: {
list: [
{title: 'Feature', value: 'feature'},
{title: 'Fix', value: 'fix'},
{title: 'Improvement', value: 'improvement'},
],
},
},
],
}),
defineField({
name: 'body',
title: 'Body',
type: 'array',
of: [
{type: 'block'},
{
type: 'image',
options: {hotspot: true},
fields: [
defineField({name: 'alt', title: 'Alt Text', type: 'string'}),
defineField({name: 'caption', title: 'Caption', type: 'string'}),
],
},
],
}),
],
orderings: [
{
title: 'Published Date, Newest',
name: 'publishedAtDesc',
by: [{field: 'publishedAt', direction: 'desc'}],
},
],
preview: {
select: {
title: 'title',
version: 'version',
publishedAt: 'publishedAt',
},
prepare({title, version, publishedAt}) {
const date = publishedAt ? new Date(publishedAt).toLocaleDateString() : 'Draft'
return {
title: `${version}${title}`,
subtitle: date,
}
},
},
})
+3 -1
View File
@@ -1,4 +1,6 @@
import author from './author' import author from './author'
import post from './post' import post from './post'
import changelogEntry from './changelogEntry'
import roadmapItem from './roadmapItem'
export const schemaTypes = [author, post] export const schemaTypes = [author, post, changelogEntry, roadmapItem]
+66
View File
@@ -0,0 +1,66 @@
import {defineField, defineType} from 'sanity'
export default defineType({
name: 'roadmapItem',
title: 'Roadmap Item',
type: 'document',
fields: [
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required().max(100),
}),
defineField({
name: 'description',
title: 'Description',
type: 'text',
rows: 2,
description: 'Short description shown on the roadmap card.',
validation: (Rule) => Rule.max(300),
}),
defineField({
name: 'status',
title: 'Status',
type: 'string',
options: {
list: [
{title: 'Planned', value: 'planned'},
{title: 'In Progress', value: 'in-progress'},
{title: 'Shipped', value: 'shipped'},
],
layout: 'radio',
},
initialValue: 'planned',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'order',
title: 'Sort Order',
type: 'number',
description: 'Lower numbers appear first within each status group.',
initialValue: 100,
}),
],
orderings: [
{
title: 'Sort Order',
name: 'orderAsc',
by: [{field: 'order', direction: 'asc'}],
},
],
preview: {
select: {
title: 'title',
status: 'status',
},
prepare({title, status}) {
const badge =
status === 'in-progress' ? '🔄' : status === 'shipped' ? '✅' : '📋'
return {
title,
subtitle: `${badge} ${status ?? 'planned'}`,
}
},
},
})