Maia docs
Project structure
Where everything lives, and which files you'll actually edit.
Maia is a standard Astro project. For everyday changes you only need the config file, the content folders and your images.
maia-astro/
├── astro.config.mjs Your domain and the heading font
├── public/ Favicon and share image, copied as they are
└── src/
├── site.config.ts Your name, color, menu and the text of every page
├── content.config.ts The fields each program, recipe and post must have
├── content/
│ ├── programs/ One Markdown file per program
│ ├── recipes/ One Markdown file per recipe
│ └── posts/ One Markdown file per journal post
├── data/
│ ├── testimonials.yaml Client stories
│ └── faqs.yaml Frequently asked questions
├── assets/art/ Illustrations, portrait and covers
├── components/
│ ├── home/ Sections of the home page
│ ├── ui/ Cards, FAQ, forms, page header, icons
│ ├── Header.astro Logo, menu and booking button
│ ├── Footer.astro Footer links and disclaimer
│ └── SEO.astro Search and sharing tags, structured data
├── layouts/
│ ├── Base.astro The HTML shell of every page
│ └── Page.astro Layout for simple Markdown pages
├── lib/ Helpers for sorting and formatting content
├── pages/ Every page of the site (see below)
└── styles/global.css Colors, buttons and typography
Pages
| File | Address |
|---|---|
pages/index.astro |
/ |
pages/about.astro |
/about/ |
pages/programs/index.astro and [slug].astro |
/programs/ and one page per program |
pages/recipes/index.astro, [slug].astro, category/[category].astro |
/recipes/, each recipe, each category |
pages/journal/index.astro and [...slug].astro |
/journal/ and each post |
pages/contact.astro |
/contact/ |
pages/links.astro |
/links/, the link-in-bio page |
pages/privacy.md, pages/disclaimer.md |
Legal pages |
pages/404.astro |
Shown for addresses that don’t exist |
pages/rss.xml.ts, pages/robots.txt.ts |
RSS feed and robots.txt |
How content is checked
src/content.config.ts lists the fields every program, recipe, post, testimonial and FAQ needs. If one is missing or has the wrong type, npm run dev and npm run build stop with a message naming the file and the field, so you catch mistakes while editing rather than after publishing.