Static Astro site for bwh.tech, styled with Tailwind CSS 4 and Frappe UI's Espresso design tokens. The
landing page is the site root and the blog lives under /blog.
Install dependencies:
npm installRun Astro in background mode:
npm run astro -- dev --backgroundManage the server with:
npm run astro -- dev status
npm run astro -- dev logs
npm run astro -- dev stopCreate a production build:
npm run buildPosts are local Markdown files in src/content/blog. Every post must reference an author and include at least one tag:
---
title: Example post
description: A short summary.
author: hussain-nagaria
tags: [Frappe Framework, Tutorial]
pubDate: 2026-11-13
image: /blog-media/example/cover.png
---Author records live in src/data/authors.json. Their id values are referenced from post frontmatter and validated by Astro's content schema.
Post media is stored under public/blog-media, and author avatars are stored under public/authors. The site does not fetch content or media from the original LMS at build time or runtime.
netlify.toml contains the build command, publish directory, caching rules, security headers, and redirects from the old /blog/<slug>/ paths.
Validate the production build locally without linking a Netlify project:
netlify build --dry --offline
netlify build --offlineWhen the Netlify project has been created, link this checkout once:
netlify linkDeployments can then run through the connected Git repository or manually with:
netlify deploy --prod