A personal blog built on the Frosti theme β clean, fast and focused on content. This repository hosts the source of "Shepherd's Blog" and is customized from the open-source Frosti template.
- Theme: Frosti (kept as upstream base)
- Site title: Shepherd's Blog
- Purpose: Personal blog and notes
Note: During cleanup I removed archival backup images and some large historical assets to reduce repository size. You can find a snapshot branch
pre-cleanup-backupin case you need to restore anything.
- Install dependencies:
pnpm install- Run development server:
pnpm run dev- Build for production:
pnpm run buildsrc/β site source, components, pagescontent/β markdown posts and pagespublic/β static assets served by the sitescripts/β utilities (backup scripts were removed)
- Removed
image-backup/(archival images) - Removed
scripts/backup-images.ps1andfrosti.update.sh - Removed
public/resources/pdf/files - Historical large files (e.g. Vercel build artifacts, docs images) will be purged from Git history after your confirmation
This project is built on top of the open-source Frosti theme. Thanks to its authors and contributors.
If you'd like, I can continue and:
- Rewrite more README text to match your personal blog copy and links, or
- Proceed to scrub history (remove large files from git history) β this requires a force-push and coordination.
Tell me how you want the README copy refined (author name, blog links, short bio, features to highlight) and whether I should proceed with history rewrite now.
π₯οΈ Frosti Demo / π Chinese README / β€οΈ My Blog
- β Light / Dark mode available
- β Super fast performance with excellent SEO
- β View transition animations (using ClientRouter)
- β Search functionality for your articles (using Pagefind)
- β Responsive design built with Tailwind CSS and daisyUI
- β RSS feed support
- π οΈ Easy to use blog
- Customize your blog content in
frosti.config.yaml
- Customize your blog content in
| Name | Meaning | Required |
|---|---|---|
| title | Article title | Yes |
| description | Article description | Yes |
| pubDate | Publication date | Yes |
| image | Article cover image | No |
| categories | Article categories | No |
| tags | Article tags | No |
| badge | Article badge | No |
| draft | Draft status | No |
Tip
- You can pin your article by setting the
badgeproperty toPin - Setting
draft: truewill mark the article as a draft, and it won't appear in the article list
- Install pnpm package manager (if you haven't already)
npm i -g pnpm- Clone the project
git clone https://github.com/EveSunMaple/Frosti.git Frosti- Enter the project folder
cd Frosti- Install dependencies
pnpm iOn first run or after updating content, execute search:index to generate the search index:
# Generate the search index for development use
pnpm run search:index
pnpm run devFrosti uses frosti.config.yaml as its configuration file, where you can configure the website's basic information, navigation bar, footer, and more.
site:
tab: Frosti # Text displayed in the browser tab
title: Frosti # Website title
description: A clean, elegant, and fast static blog template! # Website description for SEO
language: en # Website language code, e.g., "en" for English, "zh" for Chinese
favicon: /favicon.ico # Website favicon paththeme:
light: winter # Light mode theme, based on daisyUI themes
dark: dracula # Dark mode theme, based on daisyUI themes
code: github-dark # Code block theme styledate_format: ddd MMM DD YYYY # Date display formatmenu:
- id: home # Unique identifier for the menu item
text: Home # Text displayed in the menu
href: / # Link address
svg: "material-symbols:home-outline-rounded" # Icon
target: _self # Link targetEach menu item includes the following properties:
id: Unique identifiertext: Displayed texthref: Link addresssvg: Icon code using Iconify icon settarget: Link target (_selffor current window or_blankfor new window)
You can configure sub-menu items by adding subItems with the same format as main menu items.
user:
name: EveSunMaple # Username
site: "https://example.com" # User website
avatar: /profile.png # User avatarSidebar and footer can have different social media links:
sidebar:
social:
- href: "https://github.com/username" # Link address
ariaLabel: Github # Accessibility label
title: Github # Tooltip on hover
svg: "ri:github-line" # Icon codeFrosti uses Iconify as its icon library. You can search for icons you like on their website, then copy the icon code to the svg field in the configuration file.
Frosti supports multiple languages, configured through:
- Setting the default language in
frosti.config.yaml:
site:
language: en # Set to "en" for English, "zh" for Chinese- Managing all interface text translations in the
src/i18n/translations.yamlfile:
en: # English translations
label:
noTag: No tags assigned
tagCard: Tags
# Other English labels...
zh: # Chinese translations
label:
noTag: ζͺει
ζ ηΎ
tagCard: ζ ηΎ
# Other Chinese labels...To add new language support or modify existing translations:
- Add a new language code and corresponding translations in the
translations.yamlfile, or modify existing translations - Change
site.languageinfrosti.config.yamlto your preferred language code
To keep your project up to date with the latest version of Frosti, you can use the provided update script.
bash frosti.update.shThis script will:
- Clone the latest version of the Frosti repository.
- Safely update your project files, adding and overwriting files based on the
.updateignorefile. - Intelligently delete files that have been removed from the official repository, without affecting your ignored files.
- Clean up any remaining empty folders and temporary files.
- Install or update dependencies using
pnpm.
If you have any questions or suggestions, you can provide feedback or communicate with the developer by submitting Issues!
@Saicaca Their inspiration was the main reason I created this theme
@WRXinYue They helped me a lot when I was first getting started
