Personal website and content-driven blog built with Astro.
The project is designed as a static site with a custom content model, a file-tree blog navigator, theme and font controls, code block enhancements, and GitHub Pages deployment behind the blinov.monster custom domain.
Live site: https://blinov.monster
Active personal project.
This repository is not an open source template or starter kit. Source code and content are published for operational use of the site only. See License.
- Static Astro site with content collections and typed frontmatter
- Homepage and About page sourced from markdown content entries
- Blog routing powered by a catch-all route for nested sections and article pages
- File-tree sidebar with search, active-state highlighting, and date sorting
- Theme toggle and article font-size controls stored in
localStorage - Mobile navigation with fixed top navbar and overlay sidebar
- Syntax highlighting with light/dark Chroma themes
- Copy-to-clipboard buttons for code blocks
- Mermaid diagram rendering with diagram/code toggle
- GitHub Pages deployment via GitHub Actions
- Custom domain configured through
public/CNAME
- Astro 5
- TypeScript
- Astro Content Collections with Zod schemas
- Pico CSS plus custom global styling
- Mermaid loaded on demand from CDN
- GitHub Actions for CI/CD
.
|- public/
| |- CNAME
| |- robots.txt
| |- theme.js
| `- css/
|- src/
| |- components/
| |- content/
| | |- blog/
| | `- pages/
| |- layouts/
| |- pages/
| |- styles/
| `- utils/
|- .github/workflows/deploy.yml
|- astro.config.mts
`- package.json
The current site structure is:
/fromsrc/pages/index.astro/about-me/fromsrc/pages/about-me/index.astro/blog/fromsrc/pages/blog/index.astro/blog/<path>/fromsrc/pages/blog/[...path].astro
The catch-all blog route handles both:
- final article pages
- intermediate folder pages inside the blog tree
The project uses two Astro content collections defined in src/content/config.ts:
pagesblog
Current page entries live in:
src/content/pages/main.mdsrc/content/pages/about-me.md
Required frontmatter:
title: string
date: dateOptional frontmatter:
summary: string
draft: booleanBlog entries live under src/content/blog/**.
Required frontmatter:
title: string
date: dateOptional frontmatter:
summary: string
draft: boolean
section: stringNotes:
- If
sectionis omitted, the physical directory structure is used as the section path. - If
sectionis present, it acts as a virtual path override for blog grouping and navigation. - Draft entries are excluded from the generated site.
---
title: "My New Article"
date: 2026-03-11
draft: false
summary: "Short description shown in lists and previews."
section: "dev"
---
Write your content in Markdown here.- Sidebar tree is generated from blog content paths
- Section overview files such as
about-*.mdare pinned to the top of their section - Search and sort state are restored from
localStorage
- Theme switching is handled in
public/theme.js - Font scale controls update
data-fonton the root element - Code blocks receive copy buttons at runtime
- Mermaid blocks are rendered lazily and can be toggled back to source code
Core site metadata is defined in src/config.ts:
- site title
- description
- author
- social links
- canonical site URL
- Node.js 20 or newer
- npm
npm installnpm run devDefault local URL:
http://localhost:4321
npm run buildnpm run previewDeployment is configured in .github/workflows/deploy.yml.
Current behavior:
- output target is static
- GitHub Pages deploy runs on pushes to the
masterbranch - workflow installs dependencies with
npm ci - build output is published from
dist/ - custom domain is set through
public/CNAME
Astro configuration lives in astro.config.mts and uses:
output: "static"- the sitemap integration
SITE.urlfromsrc/config.ts
- There is currently no automated test suite in the repository.
- The main verification step is a successful
npm run build. dist/is a generated artifact and should be treated as build output, not source of truth.- Site behavior is split across Astro templates,
public/theme.js, andsrc/styles/global.css.
Edit src/config.ts.
Edit markdown files in src/content/pages.
Create or update markdown files in src/content/blog.
Review:
- src/layouts/Layout.astro
- src/components/NavBar.astro
- src/components/Sidebar.astro
- src/styles/global.css
Edit public/theme.js.
This project is licensed under a proprietary, all-rights-reserved license.
No permission is granted to copy, modify, distribute, sublicense, reuse, or create derivative works from this repository without prior written permission from the copyright holder.
See LICENSE for the full text.