Personal site and blog of Abu Hasnat Abdullah, built with Astro as a fully static site and deployed to GitHub Pages.
Requires Node 22.12+.
npm install
npm run dev # http://localhost:4321
npm run build # type-check (astro check) + static build into dist/
npm run preview # serve the production build (CSP active)-
Portfolio (hero stats, projects, experience, skills, credentials):
src/data/site.ts -
Blog posts: Markdown in
src/content/blog/. Frontmatter is validated at build time (src/content.config.ts):--- slug: my-post # URL: /blog/my-post title: My post description: One-line excerpt shown in listings and meta tags. date: 2026-10-03 tags: [Programming] # first tag = category on the blog index references: # optional, rendered under the article - label: Some source url: https://example.com draft: false ---
Body headings start at
##. For the numbered heading style use### <span class="num">01</span> Title; for an example call-out use<aside class="example">…</aside>(seemonkey-management.md). -
CV download: replace
public/cv.pdf.
- Zero framework JS: the only client scripts are the project filter, blog filter/pagination and reading progress (
src/scripts/), and pages work without them. - A strict Content-Security-Policy is emitted as a meta tag in production builds (
src/layouts/Base.astro). Fonts are self-hosted, so there are no third-party requests. - Pages build as
*.htmlfiles so existing/blog/<slug>URLs keep working. - RSS:
/blog/rss.xml· Sitemap:/sitemap-index.xml.
Pushing to main deploys via .github/workflows/deploy.yml.