Skip to content

Commit 5cc609c

Browse files
committed
new pfp format
1 parent c2f6f3c commit 5cc609c

15 files changed

Lines changed: 51 additions & 33 deletions

File tree

src/components/BlogCard.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
isSubpost,
99
parsePeople,
1010
} from '@/lib/data-utils'
11-
import { formatDate } from '@/lib/utils'
11+
import { formatDate, getAvatarSrc } from '@/lib/utils'
1212
import { Icon } from 'astro-icon/components'
1313
import { Image } from 'astro:assets'
1414
import type { CollectionEntry } from 'astro:content'
@@ -61,7 +61,7 @@ const subpostCount = !isSubpost(entry.id) ? await getSubpostCount(entry.id) : 0
6161
<div class="flex items-center gap-x-1.5">
6262
<AvatarComponent
6363
client:load
64-
src={person.avatar}
64+
src={getAvatarSrc(person.avatar)}
6565
alt={person.name}
6666
fallback={person.name[0]}
6767
className="size-5 rounded-full"

src/components/PeopleAvatarGrid.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import * as React from 'react'
22
import { Tooltip } from '@/components/ui/tooltip'
33
import AvatarComponent from '@/components/ui/avatar'
44
import { Link } from '@/components/ui/link'
5-
import { cn, shuffleArray } from '@/lib/utils'
5+
import { cn, shuffleArray, getAvatarSrc } from '@/lib/utils'
66

77
interface Person {
88
id: string
99
data: {
1010
name: string
11-
avatar?: string
11+
avatar?: string | { src: string }
1212
}
1313
}
1414

@@ -76,7 +76,10 @@ export function PeopleAvatarGrid({
7676
<Tooltip key={person.id} content={person.data.name}>
7777
<Link href={`/people/${person.id}`} className="block">
7878
<AvatarComponent
79-
src={person.data.avatar || '/static/avatar-fallback.png'}
79+
src={
80+
getAvatarSrc(person.data.avatar) ||
81+
'/static/avatar-fallback.png'
82+
}
8083
alt={`Avatar of ${person.data.name}`}
8184
fallback={person.data.name[0]}
8285
className={cn(

src/components/PeopleList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { cn, shuffleArray } from '@/lib/utils'
44

55
interface PersonData {
66
name: string
7-
avatar?: string
7+
avatar?: string | { src: string }
88
title?: string
99
email?: string
1010
website?: string

src/components/PersonCard.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
import Link from '@/components/Link.astro'
33
import AvatarComponent from '@/components/ui/avatar'
4-
import { cn } from '@/lib/utils'
4+
import { cn, getAvatarSrc } from '@/lib/utils'
55
import type { SocialLink } from '@/types'
66
import type { CollectionEntry } from 'astro:content'
77
import SocialIcons from './SocialIcons.astro'
@@ -44,7 +44,7 @@ const socialLinks: SocialLink[] = [
4444
<div class="flex flex-wrap gap-4">
4545
<AvatarComponent
4646
client:load
47-
src={avatar || '/static/avatar-fallback.png'}
47+
src={getAvatarSrc(avatar)}
4848
alt={`Avatar of ${name}`}
4949
fallback={name[0]}
5050
className={cn(

src/components/ProjectCard.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Link from '@/components/Link.astro'
33
import AvatarComponent from '@/components/ui/avatar'
44
import { Badge } from '@/components/ui/badge'
55
import { parsePeople } from '@/lib/data-utils'
6-
import { formatDate } from '@/lib/utils'
6+
import { formatDate, getAvatarSrc } from '@/lib/utils'
77
import { Icon } from 'astro-icon/components'
88
import { Image } from 'astro:assets'
99
import type { CollectionEntry } from 'astro:content'
@@ -53,7 +53,7 @@ const people = await parsePeople(project.data.people ?? [])
5353
<div class="flex items-center gap-x-1.5">
5454
<AvatarComponent
5555
client:load
56-
src={person.avatar}
56+
src={getAvatarSrc(person.avatar)}
5757
alt={person.name}
5858
fallback={person.name[0]}
5959
className="size-5 rounded-full"

src/components/ui/person-card.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import * as React from 'react'
22
import { Link } from '@/components/ui/link'
33
import AvatarComponent from '@/components/ui/avatar'
44
import { SocialIcons } from '@/components/ui/social-icons'
5-
import { cn } from '@/lib/utils'
5+
import { cn, getAvatarSrc } from '@/lib/utils'
66
import type { SocialLink } from '@/types'
77

88
interface PersonData {
99
name: string
10-
avatar?: string
10+
avatar?: string | { src: string }
1111
title?: string
1212
email?: string
1313
website?: string
@@ -60,10 +60,10 @@ export function PersonCard({
6060
href={`/people/${person.id}`}
6161
className={cn('block', isPersonPage && 'pointer-events-none', className)}
6262
>
63-
<div className="bg-background transition-shadow overflow-hidden rounded-xl border p-4 duration-300 ease-in-out hover:cursor-pointer hover:ring-2">
63+
<div className="bg-background overflow-hidden rounded-xl border p-4 transition-shadow duration-300 ease-in-out hover:cursor-pointer hover:ring-2">
6464
<div className="flex flex-wrap gap-4">
6565
<AvatarComponent
66-
src={avatar || '/static/avatar-fallback.png'}
66+
src={getAvatarSrc(avatar) || '/static/avatar-fallback.png'}
6767
alt={`Avatar of ${name}`}
6868
fallback={name[0]}
6969
className={cn(

src/content.config.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,24 @@ const blog = defineCollection({
1717

1818
const people = defineCollection({
1919
loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/people' }),
20-
schema: z.object({
21-
name: z.string(),
22-
title: z.string(),
23-
avatar: z.string().url().or(z.string().startsWith('/')).optional(),
24-
email: z.string().email().optional(),
25-
website: z.string().url().optional(),
26-
github: z.string().url().optional(),
27-
linkedin: z.string().url().optional(),
28-
scholar: z.string().url().optional(),
29-
isPastMember: z.boolean().optional(),
30-
}),
20+
schema: ({ image }) =>
21+
z.object({
22+
name: z.string(),
23+
title: z.string(),
24+
avatar: z
25+
.union([
26+
z.string().url(), // External URLs
27+
z.string().startsWith('/'), // Public folder paths
28+
image(), // Local images (processed by Astro)
29+
])
30+
.optional(),
31+
email: z.string().email().optional(),
32+
website: z.string().url().optional(),
33+
github: z.string().url().optional(),
34+
linkedin: z.string().url().optional(),
35+
scholar: z.string().url().optional(),
36+
isPastMember: z.boolean().optional(),
37+
}),
3138
})
3239

3340
const projects = defineCollection({

src/content/group-photos/content.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
dome:
2-
image: "./images/dome.png"
3-
caption: "Group photo at the MIT Dome, 2024"
1+
# dome:
2+
# image: "./images/dome.png"
3+
# caption: "Group photo at the MIT Dome, 2024"
44
grad25:
55
image: "./images/grad25.png"
66
caption: "Group photo during MIT commencement 2025"

src/content/people/amanda.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
name: "Amanda Zwerling"
33
title: "Administrative assistant"
4-
avatar: "./amanda.png"
4+
avatar: "./images/amanda.png"
55
---

0 commit comments

Comments
 (0)