Altair docs

Projects and lists

Add your projects as Markdown files and edit services, experience, testimonials and external articles in simple YAML files.

Altair keeps repeating content in content collections: one file per project, and one YAML file per list. Each entry is checked against the rules in src/content.config.ts, so a missing field gives you a clear error instead of a broken page.

Projects

Each project is a Markdown file in src/content/projects/. The file name doesn’t appear anywhere, so call it whatever helps you, such as ledger.md.

---
title: Ledger
summary: A finance dashboard that turned a 40-tab spreadsheet into one screen accountants enjoy opening.
role: Product design, React
year: "2025"
cover: ../../assets/work/ledger.svg
tone: "#e8f0e4"
url: https://example.com/ledger
order: 1
---
Field Required What it does
title Yes Project name.
summary Yes One or two sentences under the title.
role Yes What you did, shown with the arrow.
year Yes Shown next to the title. Keep the quotes so it stays text.
cover Yes Path to the cover image, relative to the Markdown file.
tone No Background color behind the cover. Defaults to a warm grey.
url No Where the card links: a live site, a case study or a Dribbble shot.
order No Lower numbers come first. Defaults to 99.
draft No true hides the project.

Cover images

Put covers in src/assets/work/. JPG, PNG, WebP and SVG all work. Photos and screenshots are resized and converted to AVIF and WebP automatically; SVGs are used as they are. Cards are cropped to 4:3, so a cover of at least 1200×900 pixels looks sharp on every screen.

Two cards sit side by side on wide screens, and every second card sits a little lower. An even number of projects, such as 4 or 6, gives the neatest grid.

Services

src/data/services.yaml. Shown in order, numbered automatically. Three items fill one row.

- id: product-design
  title: Product design
  text: Research, flows, wireframes and polished UI for web and mobile products.

Experience

src/data/experience.yaml. Put the newest role first.

- id: northwind
  period: 2019 — 2022
  role: Lead product designer
  company: Northwind
  text: Grew the design team from one to six and launched the Northwind design system.

Testimonials

src/data/testimonials.yaml. Two quotes sit side by side; more continue in rows of two.

- id: priya
  quote: Noa took a product nobody wanted to touch and made it the one our customers mention first.
  name: Priya Raman
  role: CEO, Ledger

Articles published elsewhere

src/data/writing.yaml lists articles on other sites, such as Medium, dev.to or a company blog. They appear in the Writing section next to your own blog posts, sorted by date, and open in a new tab.

- id: second-visit
  title: Designing for the second visit
  date: 2026-09-12
  url: https://medium.com/@you/designing-for-the-second-visit
  meta: Guest post

meta is optional: use it for the publication name or the reading time.

The id field

Every YAML entry needs an id that is unique within its file. It is never shown on the page; any short word works.

Removing a list

Delete every entry from a list to hide its section. An empty list must be written as [], for example:

[]

Astro then prints a warning that the collection is empty. That’s expected and harmless.

See Sections for more on hiding and reordering sections.