Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 66 additions & 10 deletions src/collections/Projects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ import type { CollectionConfig } from 'payload'
export const Projects: CollectionConfig = {
slug: 'projects',
admin: {
useAsTitle: 'name',
defaultColumns: ['name', 'technologies', 'featured', 'order'],
useAsTitle: 'title',
defaultColumns: ['title', 'featured', 'order', 'createdAt'],
listSearchableFields: ['title', 'excerpt'],
},
fields: [
{
name: 'name',
name: 'title',
type: 'text',
required: true,
},
Expand All @@ -18,11 +19,20 @@ export const Projects: CollectionConfig = {
unique: true,
index: true,
},
{
name: 'excerpt',
type: 'text',
required: true,
admin: {
description: 'One-liner for project cards (keep it punchy)',
},
},
{
name: 'description',
type: 'textarea',
type: 'richText',
required: true,
admin: {
description: 'Brief description - 1-2 sentences for card views',
description: 'Problem, solution, outcome. What did you build and why does it matter?',
},
},
{
Expand All @@ -36,30 +46,76 @@ export const Projects: CollectionConfig = {
name: 'featuredImage',
type: 'upload',
relationTo: 'media',
required: true,
},
{
name: 'gallery',
type: 'array',
fields: [
{
name: 'image',
type: 'upload',
relationTo: 'media',
required: true,
},
{
name: 'caption',
type: 'text',
},
],
admin: {
description: 'Thumbnail image for project cards',
description: 'Additional screenshots/images for the project detail page',
},
},
{
name: 'liveUrl',
type: 'text',
admin: {
description: 'URL to the live project/demo',
},
},
{
name: 'sourceUrl',
type: 'text',
admin: {
description: 'URL to source code (GitHub, GitLab, etc.)',
},
},
{
name: 'technologies',
type: 'relationship',
relationTo: 'technologies',
hasMany: true,
required: true,
},
{
name: 'demoUrl',
type: 'text',
name: 'context',
type: 'select',
options: [
{ label: 'Personal Project', value: 'personal' },
{ label: 'Work Project', value: 'work' },
{ label: 'Learning Exercise', value: 'learning' },
{ label: 'Open Source Contribution', value: 'opensource' },
],
admin: {
description:
'Tells recruiters where this project came from without them navigating to Experience',
},
},
{
name: 'repoUrl',
name: 'company',
type: 'text',
admin: {
description: 'If work project, which company? (shown alongside context)',
condition: (data) => data?.context === 'work',
},
},
{
name: 'featured',
type: 'checkbox',
defaultValue: false,
admin: {
description: 'Enable to feature on homepage',
description: 'Featured projects appear on the homepage and get priority placement',
},
},
{
Expand Down
Loading