Skip to content

Commit cd2405f

Browse files
Merge pull request #4146 from ahmedhamidawan/cofest_blog_post_2026
GCC2026 Cofest project outcomes blog post
2 parents 6a1b0f8 + c63ef47 commit cd2405f

16 files changed

Lines changed: 291 additions & 41 deletions

astro/src/build/normalize-content.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ const KNOWN_COMPONENTS = [
456456
'ReleaseGuardiansLabelPill',
457457
'ReleaseGuardiansCoordination',
458458
'CofestBoard',
459+
'CofestProject',
459460
];
460461

461462
function bodyHasComponents(body) {
Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<script setup lang="ts">
22
import type { Project } from '@/utils/cofest-csv';
3-
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
4-
import { Badge } from '@/components/ui/badge';
3+
import CofestProject from '@/components/CofestProject.vue';
54
65
defineProps<{
76
projects: Project[];
@@ -20,45 +19,7 @@ defineProps<{
2019
No projects found yet — check back soon!
2120
</div>
2221
<div v-else class="gx-tile-grid not-prose">
23-
<Card v-for="p in projects" :key="p.project" class="gx-tile h-full border-galaxy-primary/10 py-0 gap-0">
24-
<CardHeader class="pt-4 pb-1">
25-
<CardTitle class="m-0 text-galaxy-dark text-base leading-tight">{{ p.project }}</CardTitle>
26-
</CardHeader>
27-
<CardContent class="flex flex-1 flex-col gap-2.5 pt-1 pb-4">
28-
<p v-if="p.description" class="text-sm text-galaxy-grey leading-relaxed">{{ p.description }}</p>
29-
<div v-if="p.lead" class="text-sm">
30-
<span class="text-galaxy-grey">Lead: </span>
31-
<span class="font-semibold text-galaxy-primary">{{ p.lead }}</span>
32-
</div>
33-
<div class="team-section">
34-
<span class="team-label">TEAM</span>
35-
<div v-if="p.assignees.length > 0" class="flex flex-wrap gap-1.5">
36-
<Badge v-for="name in p.assignees" :key="name" variant="default" class="text-xs font-normal">
37-
{{ name }}
38-
</Badge>
39-
</div>
40-
<p v-else class="text-xs text-galaxy-primary italic">✨ Open spot — come join this project!</p>
41-
</div>
42-
</CardContent>
43-
</Card>
22+
<CofestProject v-for="p in projects" :key="p.project" :project="p" />
4423
</div>
4524
</div>
4625
</template>
47-
48-
<style scoped>
49-
.team-section {
50-
margin-top: auto;
51-
padding-top: 0.45rem;
52-
border-top: 1px solid color-mix(in srgb, var(--color-galaxy-primary, #25537b) 12%, transparent);
53-
display: flex;
54-
flex-direction: column;
55-
gap: 0.35rem;
56-
}
57-
58-
.team-label {
59-
font-size: 0.7rem;
60-
font-weight: 700;
61-
letter-spacing: 0.08em;
62-
color: var(--color-galaxy-grey, #6b7280);
63-
}
64-
</style>
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<script setup lang="ts">
2+
import type { Project } from '@/utils/cofest-csv';
3+
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
4+
import { Badge } from '@/components/ui/badge';
5+
6+
defineProps<{
7+
project: Project;
8+
standalone?: boolean;
9+
postEvent?: boolean;
10+
hasOutcomes?: boolean;
11+
}>();
12+
</script>
13+
14+
<template>
15+
<Card :class="['gx-tile border-galaxy-primary/10 py-0 gap-0', { 'h-full': !standalone }]">
16+
<CardHeader class="pt-4 pb-1">
17+
<CardTitle class="m-0 text-galaxy-dark text-base leading-tight">{{ project.project }}</CardTitle>
18+
</CardHeader>
19+
<CardContent class="flex flex-1 flex-col gap-2.5 pt-1 pb-4">
20+
<p v-if="project.description" class="text-sm text-galaxy-grey leading-relaxed">{{ project.description }}</p>
21+
<div v-if="project.lead" class="text-sm">
22+
<span class="text-galaxy-grey">Lead: </span>
23+
<span class="font-semibold text-galaxy-primary">{{ project.lead }}</span>
24+
</div>
25+
<div v-if="project.assignees.length > 0 || !postEvent" class="team-section">
26+
<span class="section-label">TEAM</span>
27+
<div v-if="project.assignees.length > 0" class="flex flex-wrap gap-1.5">
28+
<Badge v-for="name in project.assignees" :key="name" variant="default" class="text-xs font-normal">
29+
{{ name }}
30+
</Badge>
31+
</div>
32+
<p v-else class="text-xs text-galaxy-primary italic">✨ Open spot — come join this project!</p>
33+
</div>
34+
<div v-if="postEvent && hasOutcomes" class="outcomes-section">
35+
<span class="section-label">HIGHLIGHTS</span>
36+
<slot />
37+
</div>
38+
</CardContent>
39+
</Card>
40+
</template>
41+
42+
<style scoped>
43+
.team-section {
44+
margin-top: auto;
45+
padding-top: 0.45rem;
46+
border-top: 1px solid color-mix(in srgb, var(--color-galaxy-primary, #25537b) 12%, transparent);
47+
display: flex;
48+
flex-direction: column;
49+
gap: 0.35rem;
50+
}
51+
52+
.section-label {
53+
font-size: 0.7rem;
54+
font-weight: 700;
55+
letter-spacing: 0.08em;
56+
color: var(--color-galaxy-grey, #6b7280);
57+
}
58+
59+
.outcomes-section {
60+
padding-top: 0.45rem;
61+
border-top: 1px solid color-mix(in srgb, var(--color-galaxy-primary, #25537b) 12%, transparent);
62+
display: flex;
63+
flex-direction: column;
64+
gap: 0.35rem;
65+
font-size: 0.875rem;
66+
line-height: 1.6;
67+
}
68+
</style>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
import CofestProject from '@/components/CofestProject.vue';
3+
4+
interface Props {
5+
name: string;
6+
description?: string;
7+
lead?: string;
8+
assignees?: string;
9+
}
10+
11+
const { name, description = '', lead = '', assignees = '' } = Astro.props;
12+
13+
const project = {
14+
project: name,
15+
description,
16+
lead,
17+
assignees: assignees
18+
? assignees
19+
.split(',')
20+
.map((s) => s.trim())
21+
.filter(Boolean)
22+
: [],
23+
};
24+
---
25+
26+
<CofestProject project={project} standalone postEvent hasOutcomes={Astro.slots.has('default')} client:load>
27+
<slot />
28+
</CofestProject>

astro/src/pages/news/[...slug].astro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import Supporters from '../../components/mdx/Supporters.astro';
1616
import Contacts from '../../components/mdx/Contacts.astro';
1717
import Icon from '../../components/mdx/Icon.astro';
1818
import Insert from '../../components/mdx/Insert.astro';
19+
import CofestProject from '../../components/mdx/CofestProject.astro';
1920
import { resolveSupporters } from '../../utils/supporters';
2021
import { extractAuthors, extractFunding, resolveAuthor } from '../../utils/contributors';
2122
@@ -62,6 +63,7 @@ const components = {
6263
Contacts,
6364
Icon,
6465
Insert,
66+
CofestProject,
6567
};
6668
6769
// Schema.org structured data
14.9 MB
Loading
548 KB
Loading
12 MB
Loading
14.6 MB
Loading
416 KB
Loading

0 commit comments

Comments
 (0)