A thoughtful, minimalist blog template built with Astro, featuring multiple beautiful themes and a focus on readability and personal expression. Perfect for writers, developers, and creatives who want an elegant online presence.
- π¨ Multiple Themes: Six carefully crafted color themes to match your personality
- π MDX Support: Write blog posts with components inside markdown
- π± Fully Responsive: Beautiful on desktop, tablet, and mobile devices
- β‘ Blazing Fast: Built with Astro for optimal performance
- π SEO Optimized: Meta tags, Open Graph, sitemap, and RSS feed
- βΏ Accessible: WCAG compliant with proper contrast and semantic HTML
- π― Reading-Focused: Clean typography and distraction-free reading experience
- π Chinese Typography: Full support for Chinese content with optimized fonts and layout
- π Reading Time: Automatic reading time calculation
- π·οΈ Tag System: Organize posts with tags that adapt to your theme
- π Social Sharing: Built-in sharing buttons for social platforms
- Sage Green: Calming and natural, perfect for thoughtful writing
- Soft Lavender: Creative and thoughtful with artistic flair
- Warm Terracotta: Earthy and cozy with Mediterranean warmth
- Dusty Rose: Gentle and romantic with soft elegance
- Warm Honey: Golden and inviting with optimistic energy
- Warm Steel: Trustworthy and balanced with professional warmth
- Node.js 18+
- npm, yarn, or pnpm
- Clone or download the template:
git clone https://github.com/yourusername/reverie-blog-template.git
cd reverie-blog-template- Install dependencies:
npm install- Start the development server:
npm run dev- Open http://localhost:4321 in your browser
Blog posts are written in MDX format and stored in src/content/blog/. Each post should have frontmatter with the following structure:
---
title: 'Your Post Title'
description: 'A brief description of your post'
publishDate: 2024-01-15
updatedDate: 2024-01-20
heroImage: 'https://example.com/image.jpg'
tags: ['writing', 'thoughts', 'life']
draft: false
---
Your content here with full MDX support...
## You can use markdown
And even import components:
<CustomComponent />title(required): The title of your blog postdescription(required): A brief description for SEO and previewspublishDate(required): Publication date (YYYY-MM-DD format)updatedDate(optional): Last update dateheroImage(optional): Hero image URL for the posttags(optional): Array of tags for categorizationdraft(optional): Set totrueto hide the post from production
Edit src/config/site.ts to change the theme:
export const siteConfig = {
// ... other config
theme: 'softLavender', // Change to any theme name
};Available themes: sageGreen, softLavender, warmTerracotta, dustyRose, warmHoney, warmSteel
Add new themes to the themes object in src/styles/themes.ts:
customTheme: {
name: 'customTheme',
displayName: 'Custom Theme',
description: 'Your custom theme description',
colors: {
bg: '#your-bg-color',
surface: '#your-surface-color',
text: '#your-text-color',
textSecondary: '#your-secondary-text',
textTertiary: '#your-tertiary-text',
accent: '#your-accent-color',
accentLight: '#your-light-accent',
border: '#your-border-color',
borderLight: '#your-light-border',
},
},βββ public/
β βββ favicon.svg
β βββ og-image.png
βββ src/
β βββ components/
β β βββ BlogCard.astro # Blog post card component
β β βββ Navigation.astro # Site navigation
β β βββ ThemeProvider.astro # Theme system
β βββ config/
β β βββ site.ts # Site configuration
β βββ content/
β β βββ blog/ # Blog posts in MDX
β β βββ config.ts # Content collection config
β βββ layouts/
β β βββ BaseLayout.astro # Base layout with theme
β β βββ BlogPost.astro # Blog post layout
β βββ pages/
β β βββ blog/
β β β βββ [...slug].astro # Dynamic blog post pages
β β β βββ index.astro # Blog listing page
β β βββ about.astro # About page
β β βββ index.astro # Home page
β β βββ rss.xml.js # RSS feed
β β βββ themes.astro # Theme showcase
β βββ styles/
β β βββ global.css # Global styles and design system
β βββ utils/
β β βββ reading-time.ts # Reading time calculation
β βββ env.d.ts # TypeScript declarations
βββ astro.config.mjs # Astro configuration
βββ package.json
βββ tsconfig.json
| Command | Action |
|---|---|
npm run dev |
Start development server at localhost:4321 |
npm run build |
Build production site to ./dist/ |
npm run preview |
Preview production build locally |
npm run format |
Format all files with Prettier |
npm run format:check |
Check if files need formatting |
Reverie includes:
- Prettier for consistent code formatting
- TypeScript for type safety
- ESLint-ready structure for linting
- Build the site:
npm run build- Preview the production build:
npm run preview- Deploy the
dist/folder to your hosting provider
Update astro.config.mjs with your site details:
export default defineConfig({
site: 'https://yourusername.github.io',
base: '/your-repo-name', // Only needed for repo deployments
});Reverie is built for performance:
- 100/100 Lighthouse Score achievable
- Minimal JavaScript - mostly static HTML/CSS
- Optimized Images with Astro's built-in optimization
- Fast Navigation with prefetching
- Small Bundle Size - under 50KB of JavaScript
- Easy Customization - Config-driven approach
- β Chrome (latest)
- β Firefox (latest)
- β Safari (latest)
- β Edge (latest)
- β Mobile browsers
Contributions are welcome! Feel free to:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Astro - The web framework for content-driven websites
- Typography inspired by Medium and Ghost
- Color palettes designed for accessibility and beauty
- Icons from Feather Icons
If you find this template helpful, please consider:
- β Starring the repository
- π Reporting bugs via GitHub Issues
- π‘ Suggesting features via GitHub Discussions
- π Writing about your experience using Reverie
Reverie - A thoughtful space for your words
Built with β€οΈ for writers, creators, and dreamers.