A static CVE and CTF writeup blog built with Astro, based on santisify/astro-theme-sify.
🖥️ Original Theme Demo / 📦 Source Theme
- Built with Astro and Tailwind CSS
- Markdown and MDX writeups
- CVE and CTF category pages
- Tag pages for filtering writeups
- Full-site search index
- Code highlighting with Shiki
- Math rendering with KaTeX
- Light / dark mode
- Responsive layout
- GitHub Pages deployment workflow
-
Clone this repository:
git clone <your-repo-url> cd <your-repo-name>
-
Install dependencies:
npm install
-
Edit the site configuration:
src/consts.tsfor title, description, author, avatar, navigation, and social links.astro.config.tsfor the final publicsiteURL before deployment.
-
Create or edit posts in
src/content/blog/. -
Run the site locally:
npm run dev
-
Deploy to GitHub Pages by pushing to the
mainbranch. The workflow in.github/workflows/deploy.ymlwill build and deploy the site.
---
title: "My First Blog Post"
description: "This is the first post of my new Astro blog."
date: 2026-05-17
updated: 2026-05-18
tags: [Foo, Bar]
category: "Front-end"
cover: ./cover.png
pinned: false
draft: false
---Supported fields:
| Field | Type | Required | Description |
|---|---|---|---|
title |
string |
Yes | Post title |
description |
string |
No | Short summary shown in post lists |
date |
date |
No | Publish date |
updated |
date |
No | Last update date |
tags |
string[] |
No | Tags used by tag pages |
category |
string |
No | Category used by category pages |
cover |
string |
No | Local relative image path or remote URL |
pinned |
boolean |
No | Marks a post as pinned |
draft |
boolean |
No | Excludes a draft post from normal publishing |
Recommended post structure:
src/content/blog/
`-- Ex Blog Post/
|-- index.md
|-- cover.png
Images can be referenced from the same post folder:
In addition to Astro's default Markdown support, this blog includes:
- Markdown and MDX posts
- Local images next to each post
- Syntax-highlighted code blocks
- Inline and block math through KaTeX
- Generated table of contents in post pages
Example math syntax:
Inline math: $E = mc^2$
Block math:
$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$All commands are run from the root of the project:
| Command | Action |
|---|---|
npm install |
Install dependencies |
npm run dev |
Start the local dev server at localhost:4321 |
npm run build |
Build the production site to ./dist/ |
npm run preview |
Preview the production build locally |
This repository is ready for GitHub Pages deployment.
-
Make sure
astro.config.tsuses the correct public URL:export default defineConfig({ site: 'https://your-username.github.io', });
-
Push the repository to GitHub.
-
In Settings -> Pages, set the build and deployment source to GitHub Actions.
-
Push to
mainand wait for the deploy workflow to finish.
For a personal GitHub Pages site, the repository name should normally be:
your-username.github.io
.
|-- .github/workflows/ # GitHub Pages workflow
|-- public/ # Static assets
|-- src/
| |-- components/ # Astro components
| |-- content/blog/ # Published posts
| |-- layouts/ # Page layouts
| |-- pages/ # Routes
| |-- styles/ # Global styles
| `-- utils/ # Utilities
|-- astro.config.ts # Astro configuration
|-- package.json # Project scripts and dependencies
`-- src/consts.ts # Site metadata and navigation
This blog is customized from santisify/astro-theme-sify.
This project follows the license declared in package.json.