← Back to site

Managing Projects

Projects are stored in src/content/projects/ as Markdown or MDX files, organized by locale.

Folder Structure

src/content/projects/
├── en/                                    ← English (default)
│   ├── autonomous-rover.mdx
│   └── ...
└── de/                                    ← German translations
    ├── autonomous-rover.mdx
    └── ...

Both folders use identical filenames. If a German translation is missing, the English version is displayed on the /de/ pages.

Creating a Project

Create a new file in src/content/projects/en/ (or de/ for German). The filename becomes the slug — use a short, URL-safe title (e.g. autonomous-rover.mdx). Sort order on the projects page is driven by the date frontmatter field, not the filename.

---
title: "Autonomous Rover Prototype"
description: "An AI-powered rover with autonomous navigation, computer vision, and obstacle avoidance."
date: 2025-11-20
categoryProject: "robotics"
coverImage: /autonomous-rover/cover.jpg
isProjectCompleted: false
isDraft: false              # Optional — defaults to false, set true to hide from production
displayMeetTheTeam: true    # Optional — show this project in the homepage "Meet the Team" section
person: "emma-watson"       # Optional — required when displayMeetTheTeam is true; slug of an entry in src/content/people/
---

import { Accordion, Button, Callout, Carousel, Center, ImageGrid, Img, Instagram, Marquee, YouTube, SideBySide, Left, Right } from '@mdx';

## Project Overview

<Callout title="Status: In Progress">
  Currently in the testing phase — stay tuned for updates!
</Callout>

The Autonomous Rover Prototype focuses on developing advanced navigation
algorithms for a Mars rover-inspired vehicle. Our goal is a fully
autonomous system capable of navigating challenging terrain while avoiding
obstacles and achieving mission objectives.

Required Fields

Field Type Description
title string Project title
description string Short summary shown on cards
date date Project date (YYYY-MM-DD)
categoryProject enum One of: experimental-rocketry, science-and-experiments, robotics, other
coverImage string Path to cover image under src/assets/projects/<slug>/, written as /<slug>/<filename>
isProjectCompleted boolean Set to true when the project is finished

Optional Fields

Field Type Description
isDraft boolean Set to true to hide in production (default: false)
displayMeetTheTeam boolean Show this project in the homepage “Meet the Team” section
person reference Slug of a person in src/content/people/ who leads this project (required if displayMeetTheTeam is true)
coverImageDescription string Caption shown over the cover image on /media. Use it for any combination of caption and photographer credit. Leave blank to show no caption. Inline <Img /> blocks in the project body are also pulled into the Projects accordion on /media — each block has its own displayInMedia toggle (default on, flip off to keep that image post-only).

Cover Images

Each project has its own asset subfolder under src/assets/projects/<slug>/, where <slug> matches the filename (without extension). Place the cover image and any inline MDX images there. The coverImage frontmatter is written as /<slug>/<filename> (e.g. /autonomous-rover/cover.jpg). Valid formats: .jpg, .jpeg, .png, .webp, .svg.

Meet the Team

If you set displayMeetTheTeam: true, you must also reference a person via the person field. The build will fail if person is missing or doesn’t resolve to a real entry under src/content/people/.

In the Keystatic admin, the Head of project field is a dropdown populated from the People collection — pick the person there. If they don’t exist yet, create them in the People group first. See Managing People for the people schema.

The same person record powers both the Faces of BEARS grid (when showInFaces: true) and the project Meet the Team callout — name, role, and photo come from the people entry, not from the project.