<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Your Site Name</title><description>Your site description</description><link>https://yourdomain.com/</link><language>en</language><item><title>Complete Guide to Astro Shibui Template: Build Your Blog from Scratch</title><link>https://yourdomain.com/en/blog/complete-guide/</link><guid isPermaLink="true">https://yourdomain.com/en/blog/complete-guide/</guid><description>A comprehensive guide on using the Astro Shibui template, covering environment setup, feature enablement, content management, and more.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;img src=&quot;https://images.unsplash.com/photo-1770983438675-b188d9276ba0?auto=format&amp;fit=crop&amp;w=1200&amp;h=630&amp;q=80&amp;fm=jpg&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&amp;v=989471eb6bd3&quot; alt=&quot;Complete Guide to Astro Shibui Template: Build Your Blog from Scratch&quot; /&gt;&lt;br/&gt;&lt;p&gt;Welcome to Astro Shibui Template! This is an elegant, minimalist Astro blog template with multilingual support, podcast features, and search functionality. This guide will walk you through using this template to build your blog from scratch.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;/h2&gt;
&lt;h3&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;Make sure you have installed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt; &amp;gt;= 18.x&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pnpm&lt;/strong&gt; &amp;gt;= 8.x (npm/yarn also supported)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Install Project&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Clone or download the project
cd astro-shibui-template

# Install dependencies
pnpm install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configure Environment Variables&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cp .env.example .env
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edit &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Site information
PUBLIC_SITE_URL=http://localhost:4321
PUBLIC_SITE_NAME=&quot;My Blog&quot;
PUBLIC_SITE_DESCRIPTION=&quot;My personal blog&quot;

# Algolia search (optional, configure later)
# ALGOLIA_APP_ID=your_app_id
# ALGOLIA_SEARCH_KEY=your_search_key
# ALGOLIA_INDEX_NAME=your_index_name

# Podcast feature (optional, configure later)
# PUBLIC_PODCAST_ENABLED=false
# PUBLIC_PODCAST_AUDIO_BASE_URL=https://your-cdn.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Start Development Server&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Visit http://localhost:4321/ to see your blog!&lt;/p&gt;
&lt;h2&gt;Project Structure&lt;/h2&gt;
&lt;p&gt;Understanding the project structure helps you customize the template better:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;astro-shibui-template/
├── src/
│   ├── lib/
│   │   └── config.ts          # Core configuration ⭐
│   ├── content/
│   │   ├── blog-zh/           # Chinese posts
│   │   └── blog-en/           # English posts
│   ├── layouts/
│   │   ├── BaseLayout.astro    # Base layout
│   │   └── CoverLayout.astro   # Cover layout
│   ├── components/
│   │   ├── Search.astro       # Search component
│   │   ├── PodcastPlayer.tsx  # Podcast player
│   │   └── ...
│   ├── pages/
│   │   ├── index.astro        # Homepage
│   │   ├── blog/              # Blog pages
│   │   └── ...
│   └── styles/
│       ├── global.css         # Global styles
│       └── podcast-player.css # Podcast styles
├── public/
│   └── images/               # Static image assets
├── .env.example              # Environment variable template
└── astro.config.mjs          # Astro configuration
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Core Configuration&lt;/h2&gt;
&lt;h3&gt;Site Information&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/lib/config.ts&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig = {
  // Basic info
  name: &quot;My Blog&quot;,
  description: &quot;My learning and thoughts&quot;,
  author: &quot;Your Name&quot;,
  url: &quot;http://localhost:4321&quot;,  // Change to your domain in production

  // Multilingual
  locales: {
    default: &quot;zh-cn&quot;,
    available: [&quot;zh-cn&quot;, &quot;en&quot;],
  },

  // Feature toggles
  features: {
    podcast: {
      enabled: false,  // Enable podcast
      audioBaseUrl: &quot;&quot;,
    },
    search: {
      enabled: true,   // Enable search
      provider: &quot;algolia&quot;,
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Multilingual Setup&lt;/h3&gt;
&lt;p&gt;The template supports Chinese and English:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chinese posts&lt;/strong&gt;: Place in &lt;code&gt;src/content/blog-zh/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;English posts&lt;/strong&gt;: Place in &lt;code&gt;src/content/blog-en/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Language switching works automatically based on URL routing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chinese: &lt;code&gt;http://localhost:4321/blog/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;English: &lt;code&gt;http://localhost:4321/en/blog/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Content Management&lt;/h2&gt;
&lt;h3&gt;Create Posts&lt;/h3&gt;
&lt;p&gt;Create a new Markdown file in &lt;code&gt;src/content/blog-zh/&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Post Title&quot;
description: &quot;Post description&quot;
date: 2026-03-13
tags: [&quot;tag1&quot;, &quot;tag2&quot;]
toc: true  # Show table of contents
images: [&quot;/images/cover.jpg&quot;]  # Cover image (optional)
draft: false  # Draft status
categories: [&quot;Technology&quot;]
---

# Post Title

Post content goes here...
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Frontmatter Fields&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Post title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Post description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Publish date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Tags list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: When &lt;code&gt;toc: true&lt;/code&gt; is enabled, the template automatically numbers your headings (e.g., 1.1, 1.2, 2.1) and generates a clickable table of contents.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Image Management&lt;/h3&gt;
&lt;p&gt;Astro Shibui template provides comprehensive image handling features including cover images, inline images, and social sharing images.&lt;/p&gt;
&lt;h4&gt;Image Directory Structure&lt;/h4&gt;
&lt;p&gt;Place images in the &lt;code&gt;public/images/&lt;/code&gt; directory:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public/images/
├── cover.jpg           # Post cover image
├── photo.jpg           # Inline image
├── icons/             # Site icons
│   ├── favicon.ico
│   ├── apple-touch-icon.png
│   └── ...
├── generated/         # Auto-generated social images
│   └── social/        # Social sharing images (auto-generated)
└── terms/            # Tag cover images
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Cover Images&lt;/h4&gt;
&lt;p&gt;Set cover image in post frontmatter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Post Title&quot;
images: [&quot;/images/cover.jpg&quot;]  # Cover images list
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cover images appear in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📱 Homepage post cards&lt;/li&gt;
&lt;li&gt;📄 Article detail page top (if set)&lt;/li&gt;
&lt;li&gt;🌐 Social media sharing cards&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Tag Cover Images&lt;/h4&gt;
&lt;p&gt;Tag pages support custom cover images. Place images in &lt;code&gt;public/images/terms/&lt;/code&gt; directory:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public/images/terms/
├── tech.jpg
├── philosophy.png
└── life.webp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Rules&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filename is tag name + extension (e.g., &lt;code&gt;tech.jpg&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Supported formats: &lt;code&gt;.jpg&lt;/code&gt;, &lt;code&gt;.jpeg&lt;/code&gt;, &lt;code&gt;.png&lt;/code&gt;, &lt;code&gt;.webp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;System will automatically find and display the cover image for the corresponding tag&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Inline Images&lt;/h4&gt;
&lt;p&gt;Reference directly in Markdown:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![Image description](/images/photo.jpg)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Automatic Features&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Auto-generate Figure tags&lt;/strong&gt;: &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags are automatically wrapped in &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Auto-generate Figcaption&lt;/strong&gt;: Alt text is used as image caption&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Smart processing&lt;/strong&gt;: Images that exist alone in paragraphs are automatically expanded to complete figure structures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![Beautiful landscape](/images/landscape.jpg &quot;Hills at sunset&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Automatically converts to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;figure&amp;gt;
  &amp;lt;img src=&quot;/images/landscape.jpg&quot; alt=&quot;Beautiful landscape&quot; title=&quot;Hills at sunset&quot;&amp;gt;
  &amp;lt;figcaption&amp;gt;Beautiful landscape&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Social Sharing Images&lt;/h4&gt;
&lt;p&gt;The template automatically generates social media sharing images (1200x630):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automatic Processing Flow&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;📸 Read cover image from frontmatter &lt;code&gt;images&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;✂️ Automatically crop and optimize using Sharp&lt;/li&gt;
&lt;li&gt;💾 Save to &lt;code&gt;public/generated/social/&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;🌐 Use in OG/Twitter Card&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Generation Rules&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Format: JPEG (quality: 82)&lt;/li&gt;
&lt;li&gt;Size: 1200x630&lt;/li&gt;
&lt;li&gt;Crop method: cover + attention&lt;/li&gt;
&lt;li&gt;Filename: SHA1 hash based on image path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Supported Types&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Local images: &lt;code&gt;.jpg&lt;/code&gt;, &lt;code&gt;.jpeg&lt;/code&gt;, &lt;code&gt;.png&lt;/code&gt;, &lt;code&gt;.webp&lt;/code&gt;, &lt;code&gt;.avif&lt;/code&gt;, &lt;code&gt;.svg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;External URLs: Unsplash and other images automatically add crop parameters&lt;/li&gt;
&lt;li&gt;Auto-cache: Unmodified images won&apos;t be regenerated&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Image Path Processing&lt;/h4&gt;
&lt;p&gt;The template provides intelligent image path processing:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Auto-normalization&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Automatically add leading &quot;/&quot;
images/photo.jpg → /images/photo.jpg
// Keep absolute URLs unchanged
https://example.com/image.jpg → https://example.com/image.jpg
// Keep data URLs unchanged
data:image/png;base64,... → data:image/png;base64,...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Extract Images from Markdown&lt;/strong&gt;:
If no cover image is set, the system automatically extracts the first image from article content:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Some text...
![First image](/images/first.jpg)
More text...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The system will automatically identify and use &lt;code&gt;/images/first.jpg&lt;/code&gt; as the cover image.&lt;/p&gt;
&lt;h4&gt;External Images as Cover&lt;/h4&gt;
&lt;p&gt;Use external URLs directly in frontmatter, no need to download images.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;My Post&quot;
images: [&quot;https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;amp;fit=crop&amp;amp;w=1200&amp;amp;h=630&amp;amp;q=80&quot;]
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Supported&lt;/strong&gt;: Unsplash, Pexels, Pixabay, Burst - any image URL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Getting Unsplash direct image URL&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find a photo you like on Unsplash&lt;/li&gt;
&lt;li&gt;Right-click the photo → &quot;Open image in new tab&quot;&lt;/li&gt;
&lt;li&gt;If it opens the photo detail page, repeat: right-click → &quot;Open image in new tab&quot;&lt;/li&gt;
&lt;li&gt;Repeat until the browser shows only the pure image (no website elements, like a local image)&lt;/li&gt;
&lt;li&gt;Copy the URL from the browser address bar, format like:&lt;pre&gt;&lt;code&gt;https://images.unsplash.com/photo-xxxxx?auto=format&amp;amp;fit=crop&amp;amp;w=1200&amp;amp;q=80
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Cover displays at&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📱 Homepage post cards&lt;/li&gt;
&lt;li&gt;📄 Article detail page top&lt;/li&gt;
&lt;li&gt;🌐 Social media cards (auto-cropped to 1200x630)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Usage examples&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Using Unsplash&quot;
images: [&quot;https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;amp;fit=crop&amp;amp;w=1200&amp;amp;h=630&amp;amp;q=80&quot;]
---

# Article content...
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Using Pexels&quot;
images: [&quot;https://images.pexels.com/photos/268533/pexels-photo-268533.jpeg?w=1200&amp;amp;h=630&quot;]
---

# Article content...
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Using any external URL&quot;
images: [&quot;https://example.com/image.jpg&quot;]
---

# Article content...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External images depend on network, may not load if service is down&lt;/li&gt;
&lt;li&gt;Most free image libraries allow commercial use, check license&lt;/li&gt;
&lt;li&gt;Recommended to add image source attribution at article end&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Image Best Practices&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;URL format&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://images.pexels.com/photos/{photo_id}/{image_name}.jpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
images: [
  &quot;https://images.pexels.com/photos/268533/pexels-photo-268533.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;w=1200&amp;amp;h=630&quot;
]
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Completely free, commercial use allowed&lt;/li&gt;
&lt;li&gt;✅ High quality photos&lt;/li&gt;
&lt;li&gt;✅ CDN supported&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pixabay&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;URL format&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://pixabay.com/get/{hash}_{image_name}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
images: [
  &quot;https://cdn.pixabay.com/photo/2016/11/29/05/45/astronomy-1867616_1280.jpg&quot;
]
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Completely free, commercial use allowed&lt;/li&gt;
&lt;li&gt;✅ SVG and vector graphics supported&lt;/li&gt;
&lt;li&gt;✅ Provides thumbnails&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Burst (Shopify)&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;URL format&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://burst.shopifycdn.com/photos/{image_name}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
images: [
  &quot;https://burst.shopifycdn.com/photos/workspace-setup/343b7e26f6d3a3e04d446e7774613a7.jpg&quot;
]
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Official from Shopify, high quality&lt;/li&gt;
&lt;li&gt;✅ Business friendly&lt;/li&gt;
&lt;li&gt;✅ No registration needed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Benefits of External Images&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Advantages of using external images&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Save storage space&lt;/strong&gt;: No need to upload images to server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global CDN&lt;/strong&gt;: Leverage image library&apos;s CDN&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-optimization&lt;/strong&gt;: Multiple sizes and formats provided&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High quality&lt;/strong&gt;: Professional photographer works&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free licensing&lt;/strong&gt;: Most are commercially usable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick start&lt;/strong&gt;: Copy URL and use immediately&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Image Best Practices&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Photo source: Unsplash
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Image Best Practices&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;---

**Photo source**: Unsplash
**Photographer**: [Photographer Name](https://unsplash.com/@{username})
**License**: Unsplash License
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;mage Best Practices&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Image Optimization&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compress images: Use &lt;a href=&quot;https://tinypng.com/&quot;&gt;TinyPNG&lt;/a&gt; or &lt;a href=&quot;https://squoosh.app/&quot;&gt;Squoosh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use modern formats: WebP &amp;gt; JPEG &amp;gt; PNG&lt;/li&gt;
&lt;li&gt;Provide appropriate alt text: Better for SEO and accessibility&lt;/li&gt;
&lt;li&gt;Use responsive images: Load different sizes for different devices&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;My Travel Journal&quot;
description: &quot;Documenting my journey through Europe&quot;
date: 2026-03-13
images: [
  &quot;/images/travel/cover.webp&quot;,  # Main cover
  &quot;/images/travel/photo1.jpg&quot;,  # Other images
]
toc: true
---

# My European Journey

![Eiffel Tower at sunset](/images/travel/eiffel.webp &quot;Eiffel Tower in Paris&quot;)

This was the most memorable moment of my trip...
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Auto-generate Social Images&lt;/h4&gt;
&lt;p&gt;Auto-executed during build (&lt;code&gt;pnpm build&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Prebuild script will:
pnpm run prebuild  # → scripts/generate-social-images.ts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Generation Result Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[social-image] local images: 5, generated: 2, skipped: 3
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;local images&lt;/code&gt;: Total local images found&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generated&lt;/code&gt;: Number of newly generated social images&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skipped&lt;/code&gt;: Existing and unmodified images&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;External Image Support&lt;/h4&gt;
&lt;p&gt;Supports external image services like Unsplash:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
images: [
  &quot;https://images.unsplash.com/photo-1234567890&quot;
]
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;System automatically adds crop parameters:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;?auto=format&amp;amp;fit=crop&amp;amp;w=1200&amp;amp;h=630&amp;amp;q=80&amp;amp;fm=jpg
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Image Version Control&lt;/h4&gt;
&lt;p&gt;Social sharing images support version control to avoid cache issues:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Environment Variables&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PUBLIC_SOCIAL_IMAGE_VERSION=auto  # Auto-generate
# or
PUBLIC_SOCIAL_IMAGE_VERSION=v1.0  # Manually specify version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Auto Version&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vercel: &lt;code&gt;VERCEL_GIT_COMMIT_SHA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cloudflare Pages: &lt;code&gt;CF_PAGES_COMMIT_SHA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build time: &lt;code&gt;BUILD_TIME&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Common Issues&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Q: Images not showing?&lt;/strong&gt;
A: Check the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Image path is correct (must start with &lt;code&gt;/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Image file exists in &lt;code&gt;public/&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Image filename is case-sensitive&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Q: Social images not generating?&lt;/strong&gt;
A: Ensure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Post frontmatter has &lt;code&gt;images&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;Image path points to local image (external images won&apos;t generate)&lt;/li&gt;
&lt;li&gt;Image format is supported (see section 4.3.5)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Q: How to disable auto figure generation?&lt;/strong&gt;
A: Modify configuration in &lt;code&gt;src/lib/rehype-image-figure.ts&lt;/code&gt; or remove the plugin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: How to customize image styles?&lt;/strong&gt;
A: Add to &lt;code&gt;src/styles/global.css&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;img {
  max-width: 100%;
  height: auto;
  border-radius: 8px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

figure {
  margin: 2rem 0;
}

figcaption {
  text-align: center;
  color: var(--color-text-muted);
  font-size: 0.9rem;
  margin-top: 0.5rem;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Advanced Image Processing&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Using Astro Image Component&lt;/strong&gt; (optional):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
import { Image } from &apos;astro:assets&apos;;
---

&amp;lt;Image 
  src=&quot;/images/photo.jpg&quot; 
  alt=&quot;Description&quot;
  width={1200}
  height={630}
  format=&quot;webp&quot;
  quality={80}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Creating Image Sets&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
import { Image } from &apos;astro:assets&apos;;
const image = {
  src: &quot;/images/hero.jpg&quot;,
  alt: &quot;Hero Image&quot;,
};
const sizes = [400, 800, 1200];
---

&amp;lt;picture&amp;gt;
  {sizes.map(size =&amp;gt; (
    &amp;lt;source 
      media={`(max-width: ${size}px)`} 
      srcset={image.src.replace(&apos;.jpg&apos;, `-${size}.webp`)} 
    /&amp;gt;
  ))}
  &amp;lt;Image {...image} /&amp;gt;
&amp;lt;/picture&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Feature Configuration&lt;/h2&gt;
&lt;h3&gt;Enable Search Function&lt;/h3&gt;
&lt;h4&gt;Step 1: Register Algolia&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Visit &lt;a href=&quot;https://www.algolia.com/&quot;&gt;Algolia&lt;/a&gt; to sign up&lt;/li&gt;
&lt;li&gt;Create new Application&lt;/li&gt;
&lt;li&gt;Create Index&lt;/li&gt;
&lt;li&gt;Get API Keys&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Step 2: Configure Environment&lt;/h4&gt;
&lt;p&gt;Add to &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_KEY=your_search_key
ALGOLIA_INDEX_NAME=blog_posts
ALGOLIA_ADMIN_KEY=your_admin_key  # Only for uploading index
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Step 3: Generate and Upload Index&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# Generate search index
pnpm build-index

# Upload to Algolia
pnpm upload-index

# Or do both at once
pnpm algolia
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Search box will appear automatically on the blog archive page (&lt;code&gt;/blog/&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Keyboard shortcut: &lt;code&gt;Cmd/Ctrl + K&lt;/code&gt; to focus search box quickly.&lt;/p&gt;
&lt;h3&gt;Enable Podcast Feature&lt;/h3&gt;
&lt;p&gt;Podcast is disabled by default. To enable:&lt;/p&gt;
&lt;h4&gt;Step 1: Configure Audio Storage (Cloudflare R2)&lt;/h4&gt;
&lt;p&gt;Recommended: Use Cloudflare R2 for audio storage (no bandwidth fees).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create R2 Bucket&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Login to &lt;a href=&quot;https://dash.cloudflare.com/&quot;&gt;Cloudflare Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Go to R2 → Create bucket, name it like &lt;code&gt;podcasts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add custom domain (e.g., &lt;code&gt;r2.yourdomain.com&lt;/code&gt;), domain must be on Cloudflare&lt;/li&gt;
&lt;li&gt;Upload audio files&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Audio File Naming&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chinese posts: post slug + &lt;code&gt;.m4a&lt;/code&gt; (e.g., &lt;code&gt;my-article.m4a&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;English posts: post slug + &lt;code&gt;.en.m4a&lt;/code&gt; (e.g., &lt;code&gt;my-article.en.m4a&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Audio URL Format&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://r2.yourdomain.com/my-article.m4a
https://r2.yourdomain.com/my-article.en.m4a
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Step 2: Enable Feature Toggle&lt;/h4&gt;
&lt;p&gt;In &lt;code&gt;src/lib/config.ts&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;features: {
  podcast: {
    enabled: true,
  },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add to &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Podcast audio storage URL
PUBLIC_PODCAST_AUDIO_BASE_URL=https://r2.yourdomain.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;PUBLIC_PODCAST_AUDIO_BASE_URL&lt;/code&gt; should end with a slash.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Step 3: Add Podcast to Posts&lt;/h4&gt;
&lt;p&gt;Add to post frontmatter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Post Title&quot;
podcast: true  # Enable podcast
---
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Step 4: Upload Audio Files&lt;/h4&gt;
&lt;p&gt;Audio file naming: &lt;code&gt;{post-slug}.m4a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Post: &lt;code&gt;hello-world.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Audio: &lt;code&gt;hello-world.m4a&lt;/code&gt; (Chinese)&lt;/li&gt;
&lt;li&gt;Audio: &lt;code&gt;hello-world.en.m4a&lt;/code&gt; (English)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upload audio files to your configured CDN.&lt;/p&gt;
&lt;p&gt;The podcast player will appear at the bottom of the page with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;▶️ Play/pause&lt;/li&gt;
&lt;li&gt;⏪ Progress bar&lt;/li&gt;
&lt;li&gt;🔊 Playback speed (0.5x - 2x)&lt;/li&gt;
&lt;li&gt;📋 Playlist&lt;/li&gt;
&lt;li&gt;🔄 Cross-page continuous playback&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Enable Comments (Optional)&lt;/h3&gt;
&lt;p&gt;The template supports Giscus comments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable Discussions on your GitHub repository&lt;/li&gt;
&lt;li&gt;Visit &lt;a href=&quot;https://giscus.app/&quot;&gt;Giscus&lt;/a&gt; to configure and get your settings&lt;/li&gt;
&lt;li&gt;Add to &lt;code&gt;src/lib/config.ts&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;features: {
  comments: {
    enabled: true,
    giscus: {
      repo: &quot;username/repo&quot;,           // Your GitHub repo
      repoId: &quot;R_kgDOGxxxx&quot;,          // Repo ID (starts with R_)
      category: &quot;Announcements&quot;,       // Discussion category
      categoryId: &quot;DIC_kwDOGxxxx&quot;,    // Category ID (starts with DIC_)
    },
  },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Comment Display Location&lt;/h4&gt;
&lt;p&gt;Comments will automatically appear at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📄 Article detail page (bottom)&lt;/li&gt;
&lt;li&gt;Only on Chinese and English article pages&lt;/li&gt;
&lt;li&gt;Not on homepage, archive pages, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Custom Comment Styles&lt;/h4&gt;
&lt;p&gt;Edit &lt;code&gt;src/components/Giscus.astro&lt;/code&gt; if needed.&lt;/p&gt;
&lt;h2&gt;Style Customization&lt;/h2&gt;
&lt;h3&gt;Theme Colors&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/styles/global.css&lt;/code&gt;, modify CSS variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:root {
  /* Colors */
  --color-bg-primary: light-dark(#faf9f5, #262624);
  --color-bg-secondary: light-dark(hsl(48 25% 92.2% / 1), hsl(60 3% 8% / 1));
  --color-border: light-dark(#e5decf, #4a4037);
  --color-text-primary: light-dark(#000, #faf5f9);
  --color-text-muted: light-dark(#888, #a69885);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Font Configuration&lt;/h3&gt;
&lt;h4&gt;Web Fonts&lt;/h4&gt;
&lt;p&gt;Edit &lt;code&gt;astro.config.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fonts: [
  {
    name: &quot;Noto Serif SC&quot;,
    cssVariable: &quot;--font-noto-serif-sc&quot;,
    provider: fontProviders.google(),
    weights: [400, 700],
    subsets: [&quot;latin&quot;],
    fallbacks: [&quot;Georgia&quot;, &quot;serif&quot;],
  },
],
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Local Fonts&lt;/h4&gt;
&lt;p&gt;In &lt;code&gt;src/styles/global.css&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:root {
  --font-family-primary: &quot;Your Font&quot;, serif;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Layout Adjustments&lt;/h3&gt;
&lt;h4&gt;Sidebar Width&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;:root {
  --container-width: 56ch;  /* Content width */
  --sidebar-width: 300px;     /* Sidebar width */
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Responsive Breakpoints&lt;/h4&gt;
&lt;p&gt;The template&apos;s responsive layout:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;≤ 689px&lt;/strong&gt;: Single-column layout (mobile), left menu becomes full-screen navigation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;690px - 1500px&lt;/strong&gt;: Two-column layout, both homepage and article pages have left cover + navigation, right content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt; 1500px&lt;/strong&gt;: Three-column layout, article pages display table of contents/sidebar widgets on the right&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/* Large screens */
@media screen and (min-width: 1600px) {
  :root {
    --container-width: 60ch;
  }
}

/* Mobile */
@media screen and (max-width: 689px) {
  .content-wrapper {
    max-width: 100%;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Advanced Customization&lt;/h2&gt;
&lt;h3&gt;Custom Components&lt;/h3&gt;
&lt;p&gt;Create in &lt;code&gt;src/components/&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
interface Props {
  title: string;
}

const { title } = Astro.props;
---

&amp;lt;div class=&quot;my-component&quot;&amp;gt;
  &amp;lt;h2&amp;gt;{title}&amp;lt;/h2&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;style&amp;gt;
  .my-component {
    padding: 1rem;
    background: var(--color-bg-secondary);
  }
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Add New Page Types&lt;/h3&gt;
&lt;p&gt;For example, create a tag page:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
// src/pages/tags/[tag].astro
import { getCollection } from &quot;astro:content&quot;;

export async function getStaticPaths() {
  const posts = await getCollection(&quot;blog-en&quot;);
  const tags = [...new Set(posts.flatMap(post =&amp;gt; post.data.tags))];

  return tags.map(tag =&amp;gt; ({
    params: { tag },
  }));
}

const { tag } = Astro.params;
---

&amp;lt;CoverLayout title={`Tag: ${tag}`}&amp;gt;
  &amp;lt;h1&amp;gt;Tag: {tag}&amp;lt;/h1&amp;gt;
  &amp;lt;!-- Tag post list --&amp;gt;
&amp;lt;/CoverLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Integrate Third-party Services&lt;/h3&gt;
&lt;h4&gt;Add Umami Analytics&lt;/h4&gt;
&lt;p&gt;Configure in &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PUBLIC_UMAMI_WEBSITE_ID=your-website-id
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add scripts in pages as needed (refer to documentation).&lt;/p&gt;
&lt;h4&gt;Add Google Analytics&lt;/h4&gt;
&lt;p&gt;Create &lt;code&gt;public/gtag.js&lt;/code&gt;, import in layout.&lt;/p&gt;
&lt;h3&gt;Performance Optimization&lt;/h3&gt;
&lt;h4&gt;Image Optimization&lt;/h4&gt;
&lt;p&gt;Use Astro&apos;s Image component:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { Image } from &quot;astro:assets&quot;;

&amp;lt;Image src={imageSrc} alt=&quot;Description&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Code Splitting&lt;/h4&gt;
&lt;p&gt;Use &lt;code&gt;client:idle&lt;/code&gt; or &lt;code&gt;client:visible&lt;/code&gt; directives:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;HeavyComponent client:idle /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Preload Critical Resources&lt;/h4&gt;
&lt;p&gt;In layout &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;preload&quot; href=&quot;/fonts/main.woff2&quot; as=&quot;font&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><enclosure url="https://images.unsplash.com/photo-1770983438675-b188d9276ba0?auto=format&amp;fit=crop&amp;w=1200&amp;h=630&amp;q=80&amp;fm=jpg&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&amp;v=989471eb6bd3" type="image/jpeg" length="0"/></item><item><title>Welcome to Astro Shibui</title><link>https://yourdomain.com/en/blog/welcome/</link><guid isPermaLink="true">https://yourdomain.com/en/blog/welcome/</guid><description>Start using this elegant Astro blog template</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Welcome to Astro Shibui 🎉&lt;/h1&gt;
&lt;p&gt;This is an elegant, minimalist Astro blog template with multilingual support, podcast features, search functionality, and more.&lt;/p&gt;
&lt;h2&gt;✨ Core Features&lt;/h2&gt;
&lt;h3&gt;📝 Content Management&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Article System&lt;/strong&gt;: Markdown format with frontmatter support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Chinese and English with automatic switching&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Categories &amp;amp; Tags&lt;/strong&gt;: Flexible content organization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TOC Generation&lt;/strong&gt;: Auto-generated table of contents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related Posts&lt;/strong&gt;: Smart recommendation system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Draft Mode&lt;/strong&gt;: Drafts won&apos;t be published to production&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;🖼️ Image Processing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cover Images&lt;/strong&gt;: Support for article cover images&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social Images&lt;/strong&gt;: Auto-generated 1200x630 social cards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Paths&lt;/strong&gt;: Automatic image path normalization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto Figure&lt;/strong&gt;: Auto-generated image captions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image Optimization&lt;/strong&gt;: Auto-crop and compression&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;🔍 Search Functionality&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full-text Search&lt;/strong&gt;: Integrated Algolia search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time Search&lt;/strong&gt;: Debounced for better performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chinese Support&lt;/strong&gt;: IME compatible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard Navigation&lt;/strong&gt;: Shortcut key support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State Persistence&lt;/strong&gt;: Search state persists across pages&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;🎙️ Podcast Features (Optional)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Narration&lt;/strong&gt;: Generate audio for articles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Player Controls&lt;/strong&gt;: Full playback controls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Progress Saving&lt;/strong&gt;: Auto-save playback progress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-page Playback&lt;/strong&gt;: View Transitions support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Controls&lt;/strong&gt;: Notification center, lock screen&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;💬 Comments System (Optional)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Giscus&lt;/strong&gt;: Based on GitHub Discussions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Database&lt;/strong&gt;: Directly uses GitHub&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple Themes&lt;/strong&gt;: Light/dark/auto theme support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown Support&lt;/strong&gt;: Full Markdown formatting&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;🎨 Design&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Minimalist&lt;/strong&gt;: Focus on reading experience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsive&lt;/strong&gt;: Perfect mobile adaptation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dark Mode&lt;/strong&gt;: Auto-follows system preference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast Loading&lt;/strong&gt;: Static site generation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy First&lt;/strong&gt;: No analytics tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt;
&lt;h3&gt;Configure Site Info&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/lib/config.ts&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig = {
  name: &quot;My Blog&quot;,
  description: &quot;My learning and thoughts&quot;,
  author: &quot;Your Name&quot;,
  url: &quot;https://myblog.com&quot;,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configure Environment Variables&lt;/h3&gt;
&lt;p&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cp .env.example .env
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edit &lt;code&gt;.env&lt;/code&gt; and set basic info:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PUBLIC_SITE_URL=https://myblog.com
PUBLIC_SITE_NAME=&quot;My Blog&quot;
PUBLIC_SITE_DESCRIPTION=&quot;My personal blog&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Create Your First Post&lt;/h3&gt;
&lt;p&gt;Create &lt;code&gt;hello-world.md&lt;/code&gt; in &lt;code&gt;src/content/blog-en/&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;Hello, World&quot;
description: &quot;This is my first post&quot;
date: 2026-03-13
tags: [&quot;essay&quot;]
toc: true
images: [&quot;/images/cover.jpg&quot;]
---

# Hello, World!

Welcome to my blog. This is my first post, beginning my writing journey.

## Start Writing

Put your thoughts here...
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Start Development Server&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Visit http://localhost:4321 to see your blog!&lt;/p&gt;
&lt;h2&gt;📚 Learn More&lt;/h2&gt;
&lt;h3&gt;Complete Usage Guide&lt;/h3&gt;
&lt;p&gt;See the detailed usage guide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;English Version&lt;/strong&gt;: &lt;a href=&quot;/blog/complete-guide&quot;&gt;Complete Guide to Astro Shibui Template&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chinese Version&lt;/strong&gt;: &lt;a href=&quot;/zh/blog/complete-guide&quot;&gt;Astro Shibui 模板完全指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Deployment Guide&lt;/h3&gt;
&lt;p&gt;See deployment documentation for deploying to production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deployment Guide&lt;/strong&gt;: &lt;a href=&quot;/DEPLOYMENT.md&quot;&gt;Deployment Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Feature Configuration&lt;/h3&gt;
&lt;p&gt;Configure various features as needed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt;: Configure Algolia search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podcast&lt;/strong&gt;: Configure audio server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;: Configure Giscus comments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Styles&lt;/strong&gt;: Modify CSS variables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;🎯 Next Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create Content&lt;/strong&gt;: Write your first post&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize Styles&lt;/strong&gt;: Adjust colors, fonts, layout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable Features&lt;/strong&gt;: Configure search, podcast, and other advanced features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt;: Publish your blog to the internet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iterate&lt;/strong&gt;: Improve based on data and feedback&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;💡 Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Delete this example&lt;/strong&gt;: Delete &lt;code&gt;src/content/blog-en/welcome.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;See more examples&lt;/strong&gt;: Reference examples in &lt;code&gt;complete-guide.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Git&lt;/strong&gt;: Commit code regularly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup content&lt;/strong&gt;: Regularly backup &lt;code&gt;src/content/&lt;/code&gt; directory&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Happy blogging, create your beautiful blog today!&lt;/strong&gt; 🎉&lt;/p&gt;
</content:encoded></item></channel></rss>