An Astro-powered static blog for Disney parks tips.
npm install
npm run devnpm run dev– Start the Astro dev server on http://localhost:4321npm run lint– Run code lint + markdown content lintnpm run lint:code– Run ESLint across Astro/TypeScript filesnpm run lint:md– Run markdownlint onREADME.md,AGENTS.md, posts, and.githubdocsnpm run lint:fix– Auto-fix lint issues where possiblenpm run format– Format the repo with Prettiernpm run format:check– Validate formatting without changing filesnpm run test:unit– Validate post frontmatter/body invariantsnpm run test:artifacts– Validate generated files indist/npm run test:smoke– Smoke-check rendered routes indist/npm run test:links– Validate internal links in built HTMLnpm run test:seo– Verify canonical/OG/JSON-LD/robots/manifest metadata indist/npm run test:all– Run unit tests, build, then all post-build test suitesnpm run check– Type-check and validate content collectionsnpm run build– Generate the production build indist/npm run preview– Preview the production build locallynpm run verify– Full quality gate: lint + format check + Astro check + tests
Run npm run verify before handoff or deployment. Vercel also runs the same command during builds via vercel.json (buildCommand: "npm run verify"), so deploys fail on lint, formatting, Astro check, unit regressions, route smoke failures, link breakage, SEO regressions, or broken build artifacts.
This repo uses Husky + lint-staged. After npm install, staged files are auto-linted/formatted on commit via .husky/pre-commit.
Markdown posts live under src/content/posts/<slug>/index.md with colocated cover.jpg files for optimized images.
- Location:
src/content/posts/<slug>/index.md - Cover image:
src/content/posts/<slug>/cover.jpg - Keep one folder per post slug.
---
title: 'Post title'
excerpt: 'Short summary used in SEO and feeds'
date: '2026-02-07'
author:
name: 'Tytus Planck'
coverImage: ./cover.jpg
---Optional frontmatter:
updatedDate: e.g.'2026-02-10'(used for article modified metadata)draft:trueorfalse(draft posts are excluded from home/feed/sitemap/routes)keywords: list of SEO keywordsogImage: custom social image objecturl: absolute or site-relative image URLwidth: optional numberheight: optional number
- Set
draft: truewhile writing. - Run
npm run verifyand confirm all checks pass. - Flip to
draft: falsewhen ready to publish. - Run
npm run verifyagain before deploy.
- Start section headings at
##inside posts (do not jump directly to###). - Keep links valid; internal link checks run in
test:links. - Keep excerpt and title clean, since they are used in metadata and feed output.