Does not use Tailwind; theme colors and styles are centralized in CSS custom properties in src/styles/global.css
astro-ataraxia-theme — Astro Blog Template
By inakicalvo
Ataraxia is an Astro-based blog theme that uses plain CSS custom properties instead of Tailwind, built around the Atkinson Hyperlegible font and WCAG 2.2 AA accessibility, offering dark mode, tag pages, pagination, table of contents, RSS, and MDX support.
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.
Uses the Atkinson Hyperlegible variable font, loaded locally via Astro's native fonts API, supporting weights 100–900
Built around accessibility: keyboard navigation, skip links, ARIA labels and landmarks, focus indicators; the README claims WCAG 2.2 AA compliance
Content collections with Zod validation; posts support tags, heroImage, and draft fields, with drafts excluded from production builds
Includes tag pages and a tag cloud, collapsible table of contents, reading time, pagination, breadcrumbs, RSS, and sitemap
Supports Markdown and MDX, with images processed via Sharp
Template Details
Ataraxia is a blog theme for Astro, positioned as "quiet, accessible, and reading-focused." It does not use Tailwind; colors and theme variables are centralized in CSS custom properties in src/styles/global.css, while components and pages each import their own stylesheets from src/styles/components/ and src/styles/pages/, with selectors primarily using class names. The font is Atkinson Hyperlegible variable font, loaded locally from src/assets/fonts/ via Astro's native fonts API fontProviders.local(), and exposed as --font-atkinson and --font-atkinson-mono variables, supporting weights 100–900.
On the content side, it uses Astro content collections with Zod validation; posts live in src/content/blog/ and support Markdown and MDX. Each post requires at least one tag, with optional heroImage and draft fields; drafts are filtered out in production builds and visible in development. The theme includes tag pages and a tag cloud, an auto-generated collapsible table of contents based on headings, reading time estimation, blog index pagination, breadcrumb navigation, RSS feed, and sitemap, and outputs canonical and OpenGraph metadata via BaseHead.astro. Site title, description, author, and posts per page are configured in src/consts.ts, and the production URL is set in the site field of astro.config.mjs.
The theme is built on Astro's official blog starter template and Bear Blog's minimalist design approach, and the repository is MIT licensed. The Astro v7 and WCAG 2.2 AA claims noted in the README come from the project's own description and were not independently verified in this material; licenses for third-party assets such as demo images and fonts must be confirmed separately.
Is it right for your project?
Use Cases
- Building a personal blog focused on text reading, with minimal interface distraction and clear typography
- A static blog site needing dark mode, tag categorization, pagination, and RSS subscription
- Maintaining theme styles with plain CSS custom properties rather than Tailwind utility classes
- A site needing better readability fonts and keyboard-accessible navigation for low-vision readers
- Writing posts with Astro content collections and MDX, and needing local draft preview
Suitable For
- Developers familiar with Astro and content collections who are willing to edit CSS and Astro components directly
- Individual authors who prefer a minimalist blog theme without Tailwind dependencies
- Users who need to deploy the blog to static hosting platforms such as Netlify, Vercel, Cloudflare Pages, or GitHub Pages
- Users who value accessibility and reading experience and are willing to verify third-party asset licenses themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Create a project with npm create astro@latest -- --template inakicalvo/astro-ataraxia-theme, or clone the repository and run npm install
- 2
Set SITE_TITLE, SITE_DESCRIPTION, SITE_AUTHOR, and POSTS_PER_PAGE in src/consts.ts
- 3
Change site in astro.config.mjs to your production domain so canonical, RSS, and sitemap are generated correctly
- 4
Place posts in src/content/blog/; each must include title, description, pubDate, and at least one tags entry, with optional heroImage and draft
- 5
The build command is npm run build, outputting to ./dist/; use npm run dev for local development and npm run preview to preview the build
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not imply that 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
- 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 separate charges.
View Original Text Basis
https://github.com/inakicalvo/astro-ataraxia-theme/blob/master/LICENSEhttps://github.com/inakicalvo/astro-ataraxia-theme/blob/master/README.mdPermission is hereby granted, free of charge
Original License Text
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 · 87 / 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-09-19
- 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: 97f97bca3b5478c4386838faa53b4f5160011c1ba6c271f6d725b7930806a58a
2026-10-02T09:50:31.429Z
Source file / repository# Ataraxia 🏛️
**A calm, accessible Astro blog theme. No Tailwind, no clutter — just your words.**
<!-- TODO: add a real screenshot or short GIF of the homepage/blog index here, light and dark side by side, e.g.  -->
[](https://astro.build)
[](https://www.typescriptlang.org/)
[](./LICENSE)
[Live demo](https://astro-ataraxia-theme.netlify.app/) · [Astro themes page](https://astro.build/themes/details/ataraxia-astro-theme/)
```bash
npm create astro@latest -- --template inakicalvo/astro-ataraxia-theme
```
[](https://app.netlify.com/start/deploy?repository=https://github.com/inakicalvo/astro-ataraxia-theme)
[](https://vercel.com/new/clone?repository-url=https://github.com/inakicalvo/astro-ataraxia-theme)
## Why Ataraxia?
- **No Tailwind.** Plain CSS custom properties — colors live in one file, no utility-class soup.
- **WCAG 2.2 AA**, built around Atkinson Hyperlegible, the typeface designed by the Braille Institute for
low-vision readers.
- **Made for reading**. Generous spacing, careful typography, and no visual noise around your content.
## ✨ Features
- ✅ **Astro v7** - Built with the latest Astro features
- ✅ **Dark Mode** - Toggle between light and dark themes with smooth transitions
- ✅ **Accessible** - WCAG 2.2 AA compliant with keyboard navigation and screen reader support
- ✅ **Atkinson Hyperlegible Fonts** - Variable fonts optimized for readability
- ✅ **Tag System** - Organize posts by tags with dedicated tag pages
- ✅ **Reading Time** - Estimated reading time on every post
- ✅ **Table of Contents** - Auto-generated from post headings, collapsible
- ✅ **Pagination** - Built-in pagination for the blog index
- ✅ **Draft Posts** - Mark posts as drafts to preview locally without publishing
- ✅ **Responsive Design** - Mobile-first with hamburger navigation
- ✅ **Content Collections** - Type-safe blog posts with Zod validation
- ✅ **SEO Optimized** - Canonical URLs, OpenGraph data, and sitemap
- ✅ **RSS Feed** - Auto-generated RSS feed for subscribers
- ✅ **MDX Support** - Enhanced markdown with component support
- ✅ **Breadcrumb Navigation** - Clear navigation paths
- ✅ **Performance** - Optimized images with Sharp
- ✅ **Minimal Styling** - Clean design based on Astro Starter Kit: Blog and Bear Blog
## 🎨 Theme Features
### Dark Mode
- Automatic system preference detection
- Manual toggle with localStorage persistence
- Smooth color transitions
- Sun/moon icons with rotation animations
### Typography
- **Atkinson Hyperlegible** variable fonts for optimal readability
- Support for weights 100-900
- Italic variants included
- Monospace variant for code blocks
### Tag System
- Required tags for all blog posts
- Dedicated tag pages for filtering
- Tag cloud with post counts
- Reusable `TagList` component
### Accessibility
- Keyboard navigation support
- Skip links for main content
- ARIA labels and landmarks
- Sufficient color contrast ratios
- Focus indicators on all interactive elements
- Screen reader friendly
<!-- TODO: run a Lighthouse audit and note the score here, and name the screen readers you actually tested with (e.g. VoiceOver, NVDA) once you have real results. -->
## 🧞 Commands
All commands are run from the root of the project:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 📝 Creating Blog Posts
1. Create a new `.md` or `.mdx` file in `src/content/blog/`
2. Add the required frontmatter:
```markdown
---
title: 'Your Post Title'
description: 'A brief description of your post'
pubDate: 'Oct 03 2025'
tags: ['astro', 'blogging'] # At least one tag required
heroImage: '../../assets/your-image.jpg' # Optional
draft: true # Optional - excluded from production builds, visible in dev
---
Your content here...
```
3. The file name becomes the URL slug (e.g., `my-post.md` → `/blog/my-post/`)
## ⚙️ Configuration
Edit `src/consts.ts` to customize your site:
```typescript
export const SITE_TITLE = 'Your Site Title';
export const SITE_DESCRIPTION = 'Your site description';
export const SITE_AUTHOR = 'Your Name';
export const POSTS_PER_PAGE = 6;
```
Update `astro.config.mjs` for your production URL:
```javascript
export default defineConfig({
site: 'https://your-site.com',
// ...
});
```
## 🎨 Customization
### Colors
Edit CSS variables in `src/styles/global.css`:
- Light theme: `:root` selector
- Dark theme: `[data-theme="dark"]` selector
### Component and page styles
Components and pages carry no `<style>` blocks. Each one imports its own stylesheet from `src/styles/components/` or `src/styles/pages/` (e.g. `Header.astro` imports `src/styles/components/header.css`). Because these files are plain global CSS, selectors are class-based (`.site-header`, `.post-card`, …) rather than bare element selectors.
### Fonts
Fonts use Astro's native `fonts` API (`fontProviders.local()`) in `astro.config.mjs`, sourced from `src/assets/fonts/` and exposed as the `--font-atkinson` / `--font-atkinson-mono` CSS variables. Variable fonts support any weight from 100-900.
### Navigation
Add or remove links in `src/components/Header.astro`
## 🚀 Project Structure
```text
├── public/
│ └── favicon.svg
├── src/
│ ├── assets/
│ │ └── fonts/ # Atkinson Hyperlegible variable fonts
│ ├── components/
│ │ ├── BaseHead.astro # SEO and meta tags
│ │ ├── Breadcrumb.astro # Navigation breadcrumbs
│ │ ├── Footer.astro # Site footer
│ │ ├── FormattedDate.astro
│ │ ├── Header.astro # Responsive header with navigation
│ │ ├── HeaderLink.astro
│ │ ├── MetaItem.astro # Icon + label pair for post metadata
│ │ ├── Pagination.astro # Prev/next + page-number nav
│ │ ├── PostCard.astro # Post preview card
│ │ ├── PostMeta.astro # Layout wrapper for MetaItem rows
│ │ ├── TableOfContents.astro # Collapsible per-post TOC
│ │ ├── TagList.astro # Display post tags
│ │ └── ThemeToggle.astro # Dark/light mode toggle
│ ├── content/
│ │ └── blog/ # Markdown/MDX blog posts
│ ├── layouts/
│ │ └── BlogPost.astro # Blog post layout
│ ├── pages/
│ │ ├── about.astro
│ │ ├── index.astro
│ │ ├── rss.xml.js # RSS feed
│ │ ├── blog/
│ │ │ ├── [...slug].astro # Dynamic blog post routes
│ │ │ └── [...page].astro # Paginated blog list
│ │ └── tags/
│ │ ├── [tag].astro # Tag filter pages
│ │ └── index.astro # All tags page
│ ├── styles/
│ │ ├── global.css # Global styles and CSS variables
│ │ ├── components/ # One stylesheet per component (header.css, post-card.css, pagination.css, …)
│ │ └── pages/ # One stylesheet per page/layout (blog-post.css, tag.css, …)
│ ├── utils/
│ │ ├── posts.ts # Published-posts query (filters drafts in prod)
│ │ ├── readingTime.ts # Word-count based reading time estimate
│ │ └── slugify.ts # URL slug generation
│ ├── consts.ts # Site configuration
│ └── content.config.ts # Content collection schema
├── astro.config.mjs
├── package.json
└── tsconfig.json
```
## 📦 Dependencies
- **Astro** - Static site generator
- **@astrojs/mdx** - MDX support
- **@astrojs/rss** - RSS feed generation
- **@astrojs/sitemap** - Sitemap generation
- **astro-icon** - Icon component
- **@iconify-json/mdi** - Material Design Icons
- **@iconify-json/simple-icons** - Brand icons (e.g. the footer's GitHub link)
- **sharp** - Image optimization
## 🌐 Deployment
Build your site with `npm run build`. The output will be in the `./dist/` directory, ready to deploy to your favorite hosting platform:
[](https://app.netlify.com/start/deploy?repository=https://github.com/inakicalvo/astro-ataraxia-theme)
[](https://vercel.com/new/clone?repository-url=https://github.com/inakicalvo/astro-ataraxia-theme)
- [Netlify](https://www.netlify.com/)
- [Vercel](https://vercel.com/)
- [Cloudflare Pages](https://pages.cloudflare.com/)
- [GitHub Pages](https://pages.github.com/)
## 📑 Learn More
- [Astro Documentation](https://docs.astro.build)
- [Astro Discord](https://astro.build/chat)
- [Content Collections Guide](https://docs.astro.build/en/guides/content-collections/)
- [Astro Pagination Guide](https://docs.astro.build/en/guides/routing/#pagination)
## 🌍 Sites using Ataraxia
<!-- TODO: add real sites built with this theme here as they appear -->
- _None yet — [open a PR](https://github.com/inakicalvo/astro-ataraxia-theme/pulls) to add yours!_
## 🫶 Credit
This theme is inspired by and built upon:
- [Astro Starter Kit: Blog](https://github.com/withastro/astro/tree/main/examples/blog) - Official Astro blog starter
- [Bear Blog](https://github.com/HermanMartinus/bearblog/) - Minimal blog design
- The philosophical concept of **Ataraxia** (ἀταραξία) - tranquility and freedom from worry
## 📄 License
[MIT](./LICENSE) © 2026 Iñaki Calvo. Feel free to use this theme for your projects!
---
If this theme helped you, consider giving it a ⭐ on GitHub!
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
