A static blog built with Astro featuring insights and analysis on healthcare interoperability, FHIR standards, EHR systems, and digital health innovation.
- Static Site Generation – Built with Astro for fast loading and great SEO.
- Responsive Design – Clean, professional layout that works on all devices.
- Content Collections – Markdown frontmatter drives post metadata and routing.
- GitHub Pages Integration – Automatic deployment on every push to
main. - Healthcare Focus – Specialized content covering policy, interoperability, and MCP/AI topics.
- Node.js 18 or higher
- npm
- Python 3.9+ (required for the LinkedIn import tooling)
git clone https://github.com/jmandel/blog.git
cd blog
npm installRun the Astro dev server and open http://localhost:4321/blog:
npm run devnpm run buildFor a full verification that includes banner normalization and the Astro build, run:
npm run test-buildThe production-ready site is emitted into the dist/ directory.
├── public/ # Static assets copied as-is (includes banner images)
├── src/
│ ├── content/
│ │ └── blog/ # Markdown posts with frontmatter
│ ├── layouts/
│ ├── pages/
│ └── components/
├── scripts/ # LinkedIn import + banner tooling
├── LinkedIn exports/ # Optional storage for raw LinkedIn ZIP files (ignored)
└── .github/workflows/ # GitHub Pages deployment workflow
Blog posts live in src/content/blog/ as Markdown files with frontmatter:
---
title: "Your Post Title"
date: 2025-01-01T00:00:00
slug: your-post-slug
banner: /images/linkedin/your-post-slug/banner.jpg
---
Post content here…Banner images should point at local paths under /images/linkedin/{slug}/ so the static site is self-contained.
Most content is generated from LinkedIn exports. The helper script will set everything up (including the uv environment) and validate the Astro build for you:
./scripts/local-import.sh "LinkedIn exports/2025-07-02-export.zip"The script handles:
- Creating/updating a
.venv-importuvenvironment and syncingscripts/requirements.txt. - Running
scripts/linkedin_import.pyto rewritesrc/content/blog/linkedin/{slug}/index.mdand download banners into the same folder (banner.png). - Re-running
scripts/download_banner_images.pyto catch any lingering remote banners. - Installing Node dependencies (if needed) and executing
npm run test-buildto ensure Astro still builds.
Afterward, review the git diff, commit src/content/, and push. GitHub Actions will build and deploy the already-generated static site.
If you need to run each step manually (for debugging, custom dirs, etc.), see scripts/README.md for the explicit commands.
Deployments are handled by GitHub Actions (.github/workflows/deploy.yml). The workflow checks out the repository, installs Node dependencies, runs npm run build, and publishes the resulting dist/ folder to GitHub Pages.
ISC License – see package.json for details.