Hermit is a personal blog built on the AstroPaper theme. It's a static site generator-based blog with SEO, performance, and modern features.
- Astro 5.12.0 — Static site generator with component islands
- TypeScript 5.8.3 — Type safety
- Tailwind CSS 4.1.11 — Utility-first CSS
- @tailwindcss/typography — Typography plugin
- Markdown — Blog posts in
src/data/blog/ - Shiki — Syntax highlighting with transformers (highlight, word highlight, diff notation)
- remark-toc — Table of contents
- remark-collapse — Collapsible sections
- @astrojs/rss — RSS feed generation
- @astrojs/sitemap — Automatic sitemap
- Pagefind 1.3.0 — Client-side search
- Satori — Dynamic OG image generation
- Sharp — Image processing
- Day.js — Date formatting
- ESLint — Code linting
- Prettier — Code formatting
- TypeScript ESLint — TypeScript linting
-
SEO
- Structured data (JSON-LD)
- Open Graph and Twitter Card meta tags
- Canonical URLs
- Sitemap generation
- Google Site Verification support
-
Content Management
- Markdown-based posts
- Frontmatter with author, dates, tags, featured status
- Draft posts
- Scheduled posts (15-minute margin)
- Tag system with tag pages
- Archives page
-
User Experience
- Dark/light mode toggle
- Responsive design
- Client-side search (Pagefind)
- Pagination (4 posts per page/index)
- Back to top button
- Breadcrumb navigation
- Social sharing links
-
Developer Experience
- TypeScript
- Component-based architecture (Astro components)
- Path aliases (
@/*) - Edit post links (GitHub)
- Code syntax highlighting with file names
-
Performance
- Static site generation
- Optimized images
- Minimal JavaScript
src/
├── components/ # Reusable Astro components
├── layouts/ # Page layouts
├── pages/ # Route pages (index, posts, tags, archives, etc.)
├── data/blog/ # Markdown blog posts
├── styles/ # Global CSS and typography
├── utils/ # Helper functions and utilities
└── config.ts # Site configuration
The build script (npm run build) performs:
- Type checking (
astro check) - Static site generation (
astro build) - Search index generation (
pagefind --site dist) - Copying search assets to public directory
Configured for static hosting. The site URL in src/config.ts can be updated to your deployed domain. You can deploy to:
- Cloudflare Pages
- Vercel
- Netlify
- GitHub Pages
- Any static hosting service
The build outputs to the dist/ directory, which can be deployed to any static host.
npm run dev— Start development servernpm run build— Build for production (includes type check, build, and search index)npm run preview— Preview production build locallynpm run format— Format code with Prettiernpm run lint— Lint code with ESLint
Main configuration is in src/config.ts, including:
- Site metadata (title, description, author)
- Posts per page settings
- Feature toggles (archives, back button, edit post links)
- Dynamic OG images
- Timezone settings
- Language and direction (LTR/RTL)
The project is ready for deployment and can be customized through the configuration file and by adding markdown posts to src/data/blog/.