Personal security blog — pure static HTML. No Jekyll, no build step, no dependencies.
Terminal aesthetic inspired by the JFM hacker persona:
- Dark background (
#0d1117), IBM Plex Mono, phosphor-green headings - Two-column layout: left sidebar (nav + on-page TOC) + main content
- ASCII art JFM logo in header
.post-cardgrid on home page,.report-cardgrid for pentest reports
Shared stylesheet: assets/style.css
.
├── index.html # Home page — posts list + reports grid
├── posts/
│ ├── index.html # All posts listing
│ ├── 2026-05-23-claude-code-cli.html
│ ├── 2020-05-16-htb-heist.html
│ ├── 2020-02-07-htb-bastion.html
│ ├── 2019-12-01-shodan-cli.html
│ ├── 2019-02-05-cisa-ta18-074a.html
│ ├── 2018-11-21-kansa-powershell.html
│ ├── 2018-06-01-webapp-pentest.html
│ └── 2018-03-01-pentest-project.html
├── reports/
│ ├── index.html # Reports listing
│ └── lehack2024/
│ ├── report.html # Standard pentest report (LeHack 2024)
│ └── casebook.html # CRT-aesthetic operator casebook (LeHack 2024)
└── assets/
└── style.css # Global stylesheet
GitHub Actions deploys to GitHub Pages on push to main:
# .github/workflows/deploy.yml
- uses: actions/checkout@v4
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: '.'
- uses: actions/deploy-pages@v4No build step. The entire repo is uploaded as the artifact and served as-is. .nojekyll disables Jekyll processing.
- Create
posts/YYYY-MM-DD-slug.html— copy the header/sidebar structure from any existing post - Add an entry to
posts/index.htmland to the post list inindex.html - Update the sidebar "recent posts" in
index.htmlif it's one of the 4 most recent
- Create
reports/<slug>/report.html(and optionallycasebook.html) - Add an entry to
reports/index.htmland to the reports grid inindex.html