AstroBlog

astro-sakura-blog — Astro Blog Template

By HuanNan520

An Astro-based cherry blossom themed blog template with a built-in music player, light/dark mode, and client-side full-text search.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-05View source

What stands out

A quick read of the recorded project description.

01

Cherry blossom themed visuals with glassmorphism, gradient accent colors, and transition animations

02

Built-in music player: playlists, bilingual synchronized lyrics, draggable position, MediaSession API

03

Light/dark mode with automatic switching by time and manual switching

04

Fuse.js client-side full-text search, no backend required

05

Automatic previous/next navigation for series articles; per-article background music can be set in frontmatter

06

SEO output includes JSON-LD, OpenGraph, Twitter Cards, and sitemap

Template Details

astro-sakura-blog is a blog template built with Astro and Tailwind CSS, featuring a cherry blossom theme with glassmorphism, gradient accent colors, and transition animations. Site information is centralized in src/config.ts, and articles are placed as .md or .mdx files under src/content/blog/, with frontmatter configuring the title, summary, date, cover, tags, series, and per-article background music.

In terms of features, the template includes a custom music player supporting playlists, bilingual synchronized lyrics, Apple Music-style blur, draggable position, and the MediaSession API (keyboard media keys and system notifications); playlist and lyrics data are written in src/data/playlist.ts, audio files go in public/music/, covers go in public/images/covers/, and an empty state is shown when no songs are configured. It also provides light/dark mode (automatic switching by time and manual switching), client-side full-text search based on Fuse.js, view transitions via Astro's built-in routing, automatic previous/next navigation for series articles, optional Waline comments, automatically generated RSS, SEO output including JSON-LD/OpenGraph/Twitter Cards/sitemap, mobile bottom navigation, a reading progress bar, one-click code block copying, and an image lightbox.

Usage limitations: comments depend on an external Waline service, which requires self-deployment and filling in the serverURL; leaving it blank disables comments. Third-party assets such as demo images, fonts, and icons must be checked against their respective licenses, while the code itself is under the MIT license.

AstroBlog

Is it right for your project?

Use Cases

  • Building a personal blog that should include music playback and lyrics display
  • Needing to organize articles by series with automatically generated previous/next navigation
  • Static sites that want client-side search instead of server-side search
  • Blogs that need light/dark mode, RSS, and basic SEO metadata

Suitable For

  • Personal blog authors using Astro
  • Content sites preferring cherry blossom/soft visual styles
  • Writing sites that need a built-in music player
  • Users who accept that comments depend on an external Waline service

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    After cloning the repository, run npm install, start the development server with npm run dev, and build the production version with npm run build

  2. 2

    Configure the site name, description, URL, language, author information, social links, comments, and analytics in src/config.ts

  3. 3

    Write articles in src/content/blog/ using .md or .mdx and set the title, summary, date, cover, tags, series, and bgm via frontmatter

  4. 4

    Configure music player data in src/data/playlist.ts, place MP3 files in public/music/, and place covers in public/images/covers/

  5. 5

    Comments require self-deploying Waline and filling in the serverURL in config.ts; leaving it blank disables comments

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not mean external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version's code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and liability limitations are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
  • The comment feature depends on an external Waline service, which requires self-deployment and filling in the serverURL in src/config.ts; without deployment or if left blank, comments cannot be used.
  • Comments are an optional feature; leaving the serverURL blank disables comments without affecting the use of other parts of the template.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

1. Set up [Waline](https://waline.js.org) (free hosting on Vercel) 2. Add your server URL in `src/config.ts`

Original README

Leave `serverURL` empty to disable comments.

Original README
https://github.com/HuanNan520/astro-sakura-blog/blob/main/LICENSEhttps://github.com/HuanNan520/astro-sakura-blog/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-05. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 83 / 100
Technologies
Astro
Website type
Blog
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-06-14
Screenshot last checked
2026-10-05

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-05

Inspect the recorded source material

SHA-256: f80edf1a526b6e81bf3fb80d613fb6b5576eaa87d577d1c43f672c639a7586a5

2026-10-05T00:12:39.418Z

Source file / repository
# Astro Sakura Blog

[![Astro](https://img.shields.io/badge/Astro-6-ff5d01?logo=astro&logoColor=white)](https://astro.build)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-v3-06B6D4?logo=tailwindcss&logoColor=white)](https://tailwindcss.com)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

A beautiful, feature-rich blog template built with Astro 6 and Tailwind CSS, featuring a cherry blossom aesthetic and a built-in music player.

[**Live Demo**](https://huannan.top)

![Homepage](screenshots/homepage.png)

<details>
<summary>More Screenshots</summary>

### Dark Mode
![Dark Mode](screenshots/dark-mode.png)

### Blog List
![Blog](screenshots/blog.png)

### Article Page
![Article](screenshots/article.png)

### Mobile
<img src="screenshots/mobile.png" width="390" alt="Mobile" />

</details>

## Features

- **Cherry Blossom Theme** — Sakura-inspired design with glassmorphism, gradient accents, and smooth animations
- **Built-in Music Player** — Custom player with playlist, bilingual lyrics sync, Apple Music-style blur, drag-to-move, and MediaSession API (keyboard media keys, system notifications)
- **Dark / Light Mode** — Automatic time-based switching (dark after 18:00), manual toggle
- **Full-text Search** — Client-side search powered by Fuse.js
- **View Transitions** — Smooth page transitions via Astro's built-in router
- **Series Navigation** — Group related posts with automatic prev/next links
- **Per-article BGM** — Set background music per blog post via frontmatter
- **Comments** — Optional Waline integration
- **RSS Feed** — Auto-generated
- **SEO Optimized** — JSON-LD, OpenGraph, Twitter Cards, sitemap
- **Mobile Responsive** — Bottom navigation bar, touch-friendly player
- **Reading Progress Bar** — Visual scroll indicator
- **Code Block Copy** — One-click copy on code blocks
- **Image Lightbox** — Click to zoom images

## Quick Start

```bash
# Clone the repo
git clone https://github.com/HuanNan520/astro-sakura-blog.git
cd astro-sakura-blog

# Install dependencies
npm install

# Start dev server
npm run dev

# Build for production
npm run build
```

## Configuration

All site settings live in a single file: **`src/config.ts`**

```typescript
export const siteConfig = {
  name: "My Blog",                    // Site title
  description: "My personal blog",   // SEO description
  url: "https://myblog.com",         // Your deployed URL
  language: "en",                    // "en" | "zh-CN" | "ja"

  author: {
    name: "Your Name",
    tagline: "Writer / Developer",
    avatar: "/images/avatar.png",
    motto: "Your favorite quote.",
  },

  // ... hero, quotes, projects, social links, comments, analytics
};
```

See `src/config.ts` for the full reference with comments.

## Writing Posts

Create `.md` or `.mdx` files in `src/content/blog/`:

```yaml
---
title: "My Post Title"
summary: "A brief summary"
date: 2026-01-01
cover: "../../assets/images/covers/cover-1.webp"  # optional
tags: ["Tag1", "Tag2"]
bgm: "Song Name"           # optional: auto-play this song
series: "Series Name"       # optional: group posts
seriesOrder: 1              # optional: order in series
---

Your content here...
```

## Music Player

Add songs to **`src/data/playlist.ts`**:

```typescript
export const instrumental: Song[] = [
  { name: 'Track Name', artist: 'Artist', url: '/music/track.mp3', cover: '/images/covers/cover.webp' },
];

export const vocal: Song[] = [];

export const lyrics: Record<string, LyricLine[]> = {
  'Track Name': [
    { time: 0.0, ja: '(Intro)', zh: '' },
    { time: 15.0, ja: 'First lyric line', zh: 'Translation' },
  ],
};
```

Place MP3 files in `public/music/` and cover images in `public/images/covers/`.

The player works with zero songs configured — it shows a friendly empty state.

## Comments

1. Set up [Waline](https://waline.js.org) (free hosting on Vercel)
2. Add your server URL in `src/config.ts`:
   ```typescript
   comments: { serverURL: "https://your-waline.vercel.app" }
   ```

Leave `serverURL` empty to disable comments.

## Deployment

### Cloudflare Pages

1. Push to GitHub
2. Connect repo in Cloudflare Pages dashboard
3. Build command: `npm run build`
4. Output directory: `dist`

### Vercel / Netlify

Zero-config — just connect your repo.

## Tech Stack

- [Astro 6](https://astro.build) — Static site generator
- [Tailwind CSS v3](https://tailwindcss.com) — Utility-first CSS
- [MDX](https://mdxjs.com) — Markdown with components
- [Fuse.js](https://www.fusejs.io) — Fuzzy search
- Self-hosted fonts: Manrope + Noto Serif SC

## Project Structure

```
src/
├── config.ts              # All site configuration
├── data/playlist.ts       # Music player data
├── layouts/Base.astro     # Main layout
├── pages/
│   ├── index.astro        # Homepage
│   ├── blog/              # Blog listing & posts
│   ├── projects.astro     # Projects showcase
│   ├── about.astro        # About page
│   ├── tags.astro         # Tag cloud
│   └── archives.astro     # Post archive
├── components/
│   ├── MusicPlayer.astro  # Built-in music player
│   ├── Footer.astro
│   └── ...
├── content/blog/          # Your blog posts (.md/.mdx)
└── styles/global.css      # Global styles
```

## License

MIT
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.