Astro 7 можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Astro превращает Markdown-файлы в типизированную коллекцию контента и заранее собирает быстрые HTML-страницы. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.
Новичку хочется добавить проекты через простой текстовый файл, но обычное копирование HTML-карточек быстро приводит к разным датам, ссылкам и разметке. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте портфолио с главной страницей, карточками проектов и отдельным URL для каждого Markdown-файла. Проверка: новый Markdown-файл появляется в списке, открывается по своему slug, а npm run build создаёт статические страницы без ошибок.
создать Astro-приложение и запустить dev-сервер. Не расширяйте проект до первого успешного запуска.
неверное поле frontmatter ловится при сборке. Проверяйте значение, а не отсутствие ошибки.
После успеха добавьте поле featured и отдельный блок только для избранных проектов. Так копирование станет практикой.
Как устроен учебный проект Astro 7
Файлы Markdown хранят данные и текст, content collection проверяет frontmatter, а шаблоны Astro отвечают за список и страницу проекта. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.
| Этап | Действие | Проверяемый результат |
|---|---|---|
| Проект | создать Astro-приложение и запустить dev-сервер | главная страница открывается локально |
| Контент | описать схему коллекции и добавить Markdown-проект | неверное поле frontmatter ловится при сборке |
| Маршруты | получить записи и создать статические пути | каждый slug открывает отдельную страницу |
| Сборка | выполнить astro check и astro build | каталог dist содержит готовые HTML-файлы |
Контрольные точки: проект, контент, маршруты и сборка. Следующий шаг начинается после совпадения с ожидаемым результатом.

От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.
src/content/projects и временно удалите обязательный title. Сборка должна показать точное место ошибки схемы. Сохраните команду запуска и ожидаемый вывод.Собираем рабочий пример шаг за шагом
Пример сверялся с актуальной документацией официального релиза Astro 7 на 19 октября 2026 года. Создайте проект командой npm create astro@latest, выберите пустой шаблон и установите зависимости. Для проверки типов добавьте @astrojs/check. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.
---
import { getCollection } from "astro:content"
const projects = await getCollection("projects")
projects.sort((a, b) => b.data.year - a.data.year)
---
<main>
<h1>Проекты Ангела</h1>
<div class="grid">
{projects.map((project) => (
<article>
<p>{project.data.year}</p>
<h2><a href={'/projects/' + project.id + '/'}>{project.data.title}</a></h2>
<p>{project.data.summary}</p>
<ul>{project.data.stack.map((item) => <li>{item}</li>)}</ul>
</article>
))}
</div>
</main>- Главная выводит карточки из Markdown и сортирует проекты по году.
- Ссылка карточки ведёт на статическую страницу проекта с тем же frontmatter.
- Повторный запуск даёт тот же предсказуемый результат.
- Пустой ввод получает понятное сообщение вместо падения.
Компонент не хранит проекты внутри разметки. Он запрашивает коллекцию и строит одинаковую карточку для каждой записи. Найдите в примере вход, проверку и место формирования результата.

Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.
Что происходит внутри и почему это работает
Content collection задаётся через loader и схему. Во время сборки Astro читает файлы, проверяет типы полей и передаёт записи шаблонам. Статический маршрут создаёт URL заранее, поэтому браузер получает готовый HTML. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. В Astro 7 старый Content Layer API удалён, поэтому новый проект следует строить на актуальной конфигурации коллекций, а не копировать пример для Astro 4.
| Часть | За что отвечает | Что проверить |
|---|---|---|
| Markdown | хранит title, year, stack, summary и основное описание | одна запись содержит все обязательные поля |
| Коллекция | загружает файлы и валидирует frontmatter | ошибка схемы останавливает сборку до публикации |
| Шаблоны | строят список и динамические страницы | URL и подписи формируются из одной записи |
Markdown удобен, пока структура материала проста. Не переносите в frontmatter сложное состояние интерфейса. Схема должна проверять только данные контента, а вычисления и отображение остаются в компонентах. Изображения храните предсказуемо и передавайте через поддерживаемый image API. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.
Проверяем проект и добавляем свою функцию
Добавьте фильтр по технологии через query-параметр или отдельные страницы тегов. Сначала вычислите список доступных тегов из коллекции. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.
- Сохраните ожидаемый результат: новый Markdown-файл появляется в списке, открывается по своему slug, а
npm run buildсоздаёт статические страницы без ошибок. - Измените правило: добавьте поле featured и отдельный блок только для избранных проектов. Сначала предскажите итог.
- Передайте граничное значение и убедитесь, что приложение не падает.
- Верните корректные данные и объясните роли трёх основных частей.
- главная страница открывается локально
- неверное поле frontmatter ловится при сборке
- каждый slug открывает отдельную страницу
- каталог dist содержит готовые HTML-файлы
Главная польза коллекции в одном источнике правды: карточка, страница и метаданные используют одну запись. Полезная правка проходит от нового ввода до видимого результата.

Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.
Что запомнить и куда двигаться дальше
Перед публикацией проверьте заголовки, description, абсолютные ссылки и страницу 404. Затем соберите production-версию и откройте файлы из dist локальным сервером. Для закрепления откройте в проекте React + Vite, в лендинге на Tailwind CSS и в базовом портфолио разработчика.
Как изучить тему в Кодике
Сначала закрепите HTML, массивы и map, затем переходите к коллекциям и статическим маршрутам. Сначала восстановите главную функцию и проверьте её на трёх значениях.
| Шаг | Что разобрать | Мини-проверка |
|---|---|---|
| 1. Основа | Семантическую разметку карточек и основы CSS Grid | Объясните вход и выход функции. |
| 2. Инструмент | Формат Markdown, frontmatter, Zod-схему и getCollection | Повторите команду по памяти. |
| 3. Проект | Список проектов и страницу по slug | Проверьте два сценария. |
| 4. Рефакторинг | SEO-шаблон, фильтры тегов и проверку сборки | Разделите ввод, логику и вывод. |
После портфолио добавьте один новый проект только через Markdown, не трогая компоненты. Это главный тест архитектуры. Базовый синтаксис закрепите через курс HTML.
Код для раннего Content Layer может не работать в Astro 7. Сверяйте импорты с текущей документацией.
Карточки снова расходятся с Markdown. Получайте все данные из коллекции.
Опечатка в year проявляется уже на странице. Валидируйте обязательные поля.
Динамический путь может отсутствовать в статической сборке. Всегда запускайте build.
Что получится в итоге

Так выглядит законченный учебный проект: есть понятный вход, видимый результат, защита от неверных данных и место для следующего улучшения.
Зачем коллекции нужна схема?
Она ловит отсутствующие и неверно типизированные поля до того, как страница попадёт пользователю.
Когда создаются страницы статического портфолио?
Во время сборки Astro получает записи и заранее формирует пути и HTML.
Что проверять первым, если Astro 7 не запускается?
Версию среды, текущую папку, команду запуска и первую строку ошибки.
Как понять, что проект Astro 7 работает?
Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.
Можно ли начать с готового кода?
Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.
Выберите одно улучшение и проведите его от ввода до результата.
Если не хватает основы, перейдите курс HTML, затем восстановите ключевую функцию без подсказки.