The official website for Ledger Donjon, the security research team at Ledger.
🌐 Live Site: donjon.ledger.com
- Framework: Astro v5
- Styling: SCSS with CSS Custom Properties
- Hosting: GitHub Pages
- Deployment: GitHub Actions
- Node.js 22+
- npm
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewThe development server runs at http://localhost:4321.
├── public/ # Static assets (images, fonts, etc.)
├── src/
│ ├── components/ # Reusable Astro components
│ ├── content/ # Content collections (LSB, threat-model)
│ ├── layouts/ # Page layouts
│ ├── pages/ # Route pages
│ └── styles/ # Global styles
├── astro.config.mjs # Astro configuration
└── package.json
Security bulletins are located in src/content/lsb/. Each bulletin is a Markdown file with frontmatter:
---
title: Ledger Security Bulletin XXX
summary: Brief description of the issue
---Threat model documentation is in src/content/threat-model/.
The blog index merges two sources:
-
Corporate blog (external) — Fetched from the Donjon category into
src/data/donjon-blog.json(npm run fetch:donjon-blog, also runs beforenpm run build). List entries link to ledger.com in a new tab.To hide an external post, add its URL to
src/data/donjon-blog-hidden.json(optionalnote). Do not remove entries fromdonjon-blog.jsonby hand—they reappear on the next fetch unless listed as hidden. -
On-site posts (local) — Markdown in
src/content/blog/. Each file is served at/blog/{filename-without-md}/. Required frontmatter:title: "Article title" date: 2026-05-20 excerpt: "Summary shown on the blog index" draft: false
Set
draft: trueto exclude a post from production builds while editing (astro devstill shows drafts).
The site automatically deploys to GitHub Pages when changes are pushed to the main or master branch. The deployment workflow is defined in .github/workflows/deploy.yml.
MIT License - see LICENSE.txt