Astro-based static blog template with posts written in MDX; frontmatter supports title, date, summary, tags, draft, and cover image
serene-ink — Astro Blog Template
By jiseeeh
Serene Ink is a minimalist Astro blog template with built-in MDX, tags, pagination, drafts, search, light/dark mode, and RSS for writing-focused workflows, with configuration centralized in src/config.ts.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in tags, pagination, related posts, draft hiding, code snippet display, and custom MDX components
Interface includes light/dark mode switching with view transitions, Cmd+K search, a reading progress bar, and a dynamic table of contents
Configuration is centralized in src/config.ts for site information, navigation, social links, posts per page, and RSS parameters
SEO-related configuration includes RSS, canonical URLs, Open Graph, sitemap, and structured data
Provides the pnpm run new-post command to generate new posts and supports organizing posts and URL structure by subdirectory
Template Details
Serene Ink is an Astro blog template for developers, writers, and content creators. The repository uses the MIT license, and the demo site is deployed on Cloudflare Pages. The template centers on the writing workflow: posts live in the src/posts/ directory as .mdx files with frontmatter describing title, date, summary, tags, draft status, and cover image, and new posts can be generated with the pnpm run new-post command. Content can be organized into subdirectories, and Astro generates the corresponding URL structure.
Functionally, the template provides tags, pagination, related posts, draft hiding, code snippet display, and custom MDX components; the interface includes light/dark mode switching with view transitions, Cmd+K search, a reading progress bar, and a dynamic table of contents. For SEO and subscriptions, it configures RSS, canonical URLs, Open Graph, sitemap, and structured data, and reserves a slot for Umami analytics integration. Site information, navigation, social links, posts per page, RSS, and analytics parameters are modified centrally in src/config.ts, while author page content is adjusted in src/components/Author.astro.
The build output is a static site. The README explains deployment to Cloudflare Pages, Vercel, or Netlify and provides the build command and output directory for Cloudflare Pages. The template itself does not include a backend, database, or comment system; analytics depends on the external Umami service, requiring your own Website ID and script URL. Licenses for third-party assets such as demo images, fonts, and icons must be checked separately.
Is it right for your project?
Use Cases
- Building a personal technical blog or writing site, using MDX to write long-form articles with tags and code examples
- Static content sites that need reading experience features such as light/dark mode switching, site search, and reading progress
- Projects that want to maintain site information, navigation, RSS, and other settings in a single configuration file
- Blogs deployed to static hosting platforms such as Cloudflare Pages, Vercel, or Netlify
Suitable For
- Developers and content creators using Astro who want to start writing quickly
- Bloggers who prefer managing posts with MDX and frontmatter and do not rely on a backend database
- Personal sites that need basic blog capabilities such as tags, pagination, related posts, drafts, and RSS
- Users who accept configuring hosting, domains, and external services such as Umami analytics themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, install dependencies with pnpm install and start the local development server with pnpm dev, accessible by default at localhost:4321
- 2
Modify the site title, description, site URL, author information, navigation, social links, posts per page, and RSS parameters in src/config.ts
- 3
Update site in astro.config.mjs to the production URL, and replace public/favicon.svg and public/favicon.ico
- 4
Posts go in the src/posts/ directory and can be generated with pnpm run new-post, or created manually as .mdx files with frontmatter fields such as title, date, frontmatter, and tags
- 5
For Umami analytics, fill in websiteId and the script URL in src/config.ts; when both are left empty, no analytics script is injected
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute the code of this version for free.
- 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 limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Enabling the built-in Umami analytics feature requires an external service: register a free account at umami.is (or self-host), and obtain a Website ID and script URL to fill in src/config.ts; when both are left empty, no analytics script is injected.
- Deployment depends on third-party static hosting platforms (such as Cloudflare Pages, Vercel, Netlify); you must register an account on the relevant platform and configure the build command and output directory, and you may be subject to each platform's own terms and fees.
- 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.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Create a free account at [umami.is](https://umami.is/) (or self-host).
Original README
https://github.com/jiseeeh/serene-ink/blob/main/LICENSEhttps://github.com/jiseeeh/serene-ink/blob/main/README.mdThis template is configured as a static site, compatible with hosts like **Cloudflare Pages**, **Vercel**, and **Netlify**.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. 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 · 79 / 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-08-21
- Screenshot last checked
- 2026-10-02
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.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: 8629e62d3a9586da23f10c4bae9a26fe6d061ce263912b10ef2e064b07029150
2026-10-02T16:49:52.134Z
Source file / repository# Serene Ink
Serene Ink is a minimalist, elegant, and blazing-fast Astro blog template designed for developers, writers, and creators. It features a clean UI, dark/light mode toggle, and MDX support out of the box, ensuring you can focus entirely on your writing.
## 🚀 Features
- **Modern Stack:** Built with Astro, MDX, and Tailwind CSS v4 for ultimate developer experience and performance (100/100 Lighthouse scores).
- **Rich Blogging:** Includes tags, pagination, related posts, draft support, expressive code snippets, and a variety of custom MDX components out of the box.
- **Premium UX/UI:** Dark/light mode toggle with view transitions, Cmd+K search, smooth custom cursor, reading progress bar, and a dynamic Table of Contents.
- **SEO & Analytics:** Fully configured with RSS, canonical URLs, Open Graph, sitemaps, structured data, and a ready-to-use Umami analytics integration.
- **Centralized Config:** Easily personalize the entire site from a single `src/config.ts` file without digging into component code.
## 🧞 Setting Up
1. **Clone the repository** (or use the template):
```sh
git clone https://github.com/your-username/serene-ink.git my-blog
cd my-blog
```
2. **Install dependencies**:
```sh
pnpm install
```
3. **Start the local development server**:
```sh
pnpm dev
```
Open `localhost:4321` in your browser.
## ✍️ Personalization
### Quick Start — `src/config.ts`
This is the **primary configuration file**. Open it and update these values to make the template yours:
```ts
export const siteConfig = {
title: "Your Blog Name",
description: "Your blog description.",
siteUrl: "https://your-domain.com",
author: {
name: "Your Name",
bio: "A short bio about yourself.",
},
nav: [
{ label: "Writing", href: "/" },
{ label: "About", href: "/about" },
],
socials: {
github: "https://github.com/your-username",
twitter: "", // leave empty to hide
linkedin: "", // leave empty to hide
},
postsPerPage: 5,
analytics: {
umami: {
websiteId: "", // e.g., "a1b2c3d4-..."
src: "", // e.g., "https://cloud.umami.is/script.js"
},
},
rss: {
title: "Your Blog",
description: "Your RSS feed description.",
},
};
```
### Additional Personalization
1. **Domain config:** Open `astro.config.mjs` and update `site` to match your production URL.
2. **Author Profile & Projects:** Open `src/components/Author.astro` to customize the About page — timeline, projects, activity cards, and introductory text.
3. **Favicon:** Replace `/public/favicon.svg` and `/public/favicon.ico` with your brand's icon.
## 📝 Adding New Blogs
All content lives in the `src/posts/` folder.
To create a new blog post, use the built-in command:
```sh
pnpm run new-post "Your Awesome Catchy Title"
```
Alternatively, create a new `.mdx` file and include the following frontmatter:
```mdx
---
title: "Your Awesome Catchy Title"
date: "03/12/2024"
frontmatter: "A short description or summary of your post."
tags: ["astro", "learning", "random"]
draft: false
image: ""
---
Your content goes here...
```
### Frontmatter Fields
| Field | Type | Required | Description |
|---|---|---|---|
| `title` | string | ✅ | The post title |
| `date` | string | ✅ | Publish date in `MM/DD/YYYY` format |
| `frontmatter` | string | ✅ | Short summary (used on listing, RSS, and search) |
| `tags` | string[] | ✅ | Array of tags for categorization |
| `draft` | boolean | ❌ | Set to `true` to hide from all listings (default: `false`) |
| `updatedDate` | string | ❌ | Last updated date in `MM/DD/YYYY` format |
| `image` | string | ❌ | Path to a cover image (relative to `src/assets/`) |
### Organizing Posts
You can organize your posts into subdirectories inside `src/posts/` (e.g., `src/posts/2024/tutorials/my-post.mdx`). Astro will automatically generate the corresponding URL structure (`/posts/2024/tutorials/my-post`).
When nesting posts, use the `@/` alias to comfortably import out-of-the-box components without worrying about relative path depths:
```mdx
import Callout from '@/components/ui/Callout.astro';
```
*(Note that the `image` frontmatter property still requires relative paths like `../../../assets/images/cover.webp` when deeply nested.)*
## 📊 Analytics
Serene Ink supports [Umami](https://umami.is/) analytics out of the box. To enable it:
1. Create a free account at [umami.is](https://umami.is/) (or self-host).
2. Add your website and get your **Website ID** and **Script URL**.
3. Update `src/config.ts`:
```ts
analytics: {
umami: {
websiteId: "your-website-id",
src: "https://cloud.umami.is/script.js",
},
},
```
When both fields are empty, no analytics script is injected.
## 🌐 Deployment
This template is configured as a static site, compatible with hosts like **Cloudflare Pages**, **Vercel**, and **Netlify**.
**Deploying to Cloudflare Pages:**
1. Push your code to a GitHub or GitLab repository.
2. Log in to your Cloudflare dashboard → **Workers & Pages** → **Create application** → **Pages** → **Connect to Git**.
3. Select your repository and configure:
- **Framework preset:** Astro
- **Build command:** `pnpm run build`
- **Build output directory:** `dist`
4. Click **Save and Deploy**.
*(Don't forget to update your `site` URL in `astro.config.mjs` once deployed!)*
## 📜 License
This project is open-source and released under the [MIT License](LICENSE). Feel free to use it for personal or commercial projects.
Explore similar templates
Compare previews and descriptions within the same stack and category.

astrowind
AstroWind is a free, open-source Astro starter theme using Astro and Tailwind CSS, released under the MIT license.
Astro · Blog

astro-paper
AstroPaper is a minimal, responsive, accessible, and SEO-friendly Astro blog theme. Articles are stored as Markdown/MDX in src/content/posts/, with subdirectories affecting URLs.
Astro · Blog

fuwari
Fuwari is a static blog template built with Astro and Tailwind CSS for personal blogs. It manages posts as Markdown files in src/content/posts/, with frontmatter for title, date, description, cover, tags, categories, draft status, and language.
Astro · Blog

Firefly
Firefly is a clean personal blog theme forked from Astro and Fuwari, offering four background modes, single/double sidebar and list/grid layouts, Pagefind client-side full-text search, and a six-language UI.
Astro · Blog

astro-theme-cactus
Astro Cactus is an Astro-based blog and portfolio theme that uses Markdown/MDX content collections to manage posts, notes, and tags, with frontmatter type-checked by a schema.
Astro · Portfolio

astrofy
Astrofy is a free and open-source personal portfolio website template built with Astro and TailwindCSS, with built-in blog, CV timeline, project showcase, store, and RSS feed modules.
Astro · Portfolio
