Skip to content
Open
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
6 changes: 3 additions & 3 deletions src/components/BentoTile.astro
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Image } from 'astro:assets';
import type { CollectionEntry } from 'astro:content';
interface Props { project: CollectionEntry<'projects'> }
const { project } = Astro.props;
const { title, tile, image, span, domain, years, summary } = project.data;
const { title, tileTitle, tile, image, span, domain, summary } = project.data;
---
<a href={`/projects/${project.id}/`} class={`tile tile-${tile} span-${span}`}>
{tile === 'image' && image && (
Expand All @@ -13,8 +13,8 @@ const { title, tile, image, span, domain, years, summary } = project.data;
<div class="logo-panel"><Image src={image} alt="" width={120} height={120} /></div>
)}
<div class="tile-text">
<h3>{title}</h3>
<p class="label">{domain} · {years}</p>
<h3>{tileTitle ?? title}</h3>
<p class="label">{domain}</p>
{span !== 'sm' && <p class="summary">{summary}</p>}
</div>
</a>
Expand Down
5 changes: 4 additions & 1 deletion src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@ const projects = defineCollection({
z
.object({
title: z.string(),
// Optional display title for the bento tiles on the home and /projects
// pages (e.g. "AI agent builder hub" for WaySpace); the project page
// itself always uses `title`.
tileTitle: z.string().optional(),
role: z.string(),
org: z.string(),
years: z.string(),
domain: z.string(),
summary: z.string(),
tile: z.enum(['image', 'logo', 'text']),
Expand Down
1 change: 0 additions & 1 deletion src/content/projects/placeholder-3.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "PLACEHOLDER — Third project"
role: "Role goes here"
org: "Organisation"
years: "2021–2023"
domain: "Blockchain"
summary: "One-line summary of the project and its outcome."
tile: logo
Expand Down
1 change: 0 additions & 1 deletion src/content/projects/placeholder-4.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "PLACEHOLDER — Fourth project"
role: "Role goes here"
org: "Organisation"
years: "2020"
domain: "Research"
summary: "One-line summary of the project and its outcome."
tile: text
Expand Down
1 change: 0 additions & 1 deletion src/content/projects/placeholder-5.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "PLACEHOLDER — Fifth project"
role: "Role goes here"
org: "Organisation"
years: "2019"
domain: "Fintech"
summary: "One-line summary of the project and its outcome."
tile: text
Expand Down
1 change: 0 additions & 1 deletion src/content/projects/placeholder-6.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "PLACEHOLDER — Sixth project"
role: "Role goes here"
org: "Organisation"
years: "2014"
domain: "Media"
summary: "One-line summary of the project and its outcome."
tile: logo
Expand Down
1 change: 0 additions & 1 deletion src/content/projects/wayid.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "WayID"
role: "Co-Founder"
org: "Lineage Labs"
years: "2026 – present"
domain: "Digital identity"
summary: "Provenance certificates for AI agents — WayID binds each agent's cryptographic identity to a verified human that anyone can check in one lookup."
tile: image
Expand Down
4 changes: 2 additions & 2 deletions src/content/projects/wayspace.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "AI agent builder hub"
title: "WaySpace"
tileTitle: "AI agent builder hub"
role: "Co-Founder"
org: "Lineage Labs"
years: "2026 – present"
domain: "AI agent ecosystem"
summary: "The anti-slop catalogue for AI agent builders: every tool human-reviewed before it's listed, scored on signals that can't be bought, and discussed only by verified builders and their agents."
tile: image
Expand Down
2 changes: 1 addition & 1 deletion src/pages/cv.txt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export async function GET(context: APIContext) {
if (projects.length > 0) {
lines.push(...rule('Selected projects'));
for (const p of projects) {
lines.push(`${p.data.title} — ${p.data.role}, ${p.data.org} (${p.data.years})`);
lines.push(`${p.data.title} — ${p.data.role}, ${p.data.org}`);
lines.push(` ${p.data.summary}`);
lines.push(` ${projectUrl(site, p)}`);
lines.push('');
Expand Down
2 changes: 1 addition & 1 deletion src/pages/llms-full.txt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export async function GET(context: APIContext) {
lines.push(
`### ${d.title}`,
'',
`- Role: ${d.role}, ${d.org} (${d.years})`,
`- Role: ${d.role}, ${d.org}`,
`- Domain: ${d.domain}`,
`- URL: ${projectUrl(site, project)}`,
...(d.links ?? []).map((l) => `- ${l.label}: ${l.url}`),
Expand Down
2 changes: 1 addition & 1 deletion src/pages/projects/[slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const d = project.data;
<Base title={d.title} description={d.summary}>
<article>
<header class="prose-width">
<p class="label">{d.domain} · {d.years}</p>
<p class="label">{d.domain}</p>
<h1>{d.title}</h1>
<p class="role">{d.role}, {d.org}</p>
</header>
Expand Down