Deeply customized from AstroPaper, with reworked homepage, archive, tags, search, and post list pages
astro-devosfera — Astro Blog Template
By 0xdres
An Astro blog theme deeply customized from AstroPaper, adding gallery lightbox, ⌘K global search, custom fonts, and cursor glow visual and interaction changes.
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.
⌘K / Ctrl+K global search driven by a Pagefind static index, with full keyboard navigation
Galleries organized by album directory, with build-time srcset, WebP, and lazy loading; lightbox built on native <dialog>
MDX can embed galleries directly with <GalleryEmbed> without manual imports
Optional mixed feed that merges gallery entries into the homepage, post pages, archive, tags, and RSS
Social links and edit-post address configured via environment variables, with corresponding links automatically hidden when unset
Template Details
astro-devosfera is an Astro blog theme deeply customized from AstroPaper. The author uses it as a personal blog and notes in the README that others can delete all content entries and adjust settings themselves. The theme retains AstroPaper's Markdown type safety, SEO (meta, Open Graph, sitemap, RSS), light/dark mode, and Satori-based dynamic OG images, while reworking the homepage, archive, tags, search, and post list pages.
Functionally, the theme provides a global search modal triggered by ⌘K / Ctrl+K, with the index generated by Pagefind at build time, so local development requires a build before search can be tested. Galleries live in src/data/galleries/<slug>/, images are optimized at build time with srcset, WebP, and lazy loading output, and the lightbox is built on the native <dialog> element, supporting keyboard navigation and edge-aware previous/next controls; MDX posts can embed galleries with <GalleryEmbed> without importing. There is also an optional mixed feed that merges gallery entries into the homepage, post pages, archive, tags, and RSS.
Configuration is centralized in the SITE constant in src/config.ts and in src/constants.ts. Social links and the "edit this post" address are injected via environment variables, and unset variables hide the corresponding links. The theme also includes a terminal-style hero, audio player, glassmorphism navigation and cards, custom fonts (Wotfard, Cascadia Code, Sriracha), plus grid, cursor glow, and noise backgrounds. The README lists several fixes for upstream AstroPaper issues, but provides no performance benchmarks or production-readiness statements.
Is it right for your project?
Use Cases
- Building a personal blog written in Markdown/MDX with a terminal-style homepage and custom fonts
- Organizing photos by album and embedding galleries in posts with lightbox browsing
- Wanting a site with built-in static search, RSS, sitemap, and dynamic OG images as SEO foundations
- Starting from AstroPaper while keeping its structure and replacing the visual style and interaction details
Suitable For
- Developers familiar with Astro and Markdown/MDX content organization
- Personal site authors who need mixed gallery and post display
- Users willing to configure via src/config.ts and environment variables themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 20+ and pnpm; after installing dependencies, run pnpm run dev to start the local development server
- 2
The Pagefind search index is generated only at build time; to test search locally, first run pnpm run build, then preview or dev
- 3
Copy .env.example to .env and fill in variables such as social links; unset variables hide the corresponding links
- 4
Posts go in src/data/blog/, galleries go in src/data/galleries/<slug>/, and site configuration is centralized in src/config.ts
- 5
A Docker build method is provided: docker build -t devosfera-blog . then run with mapped ports
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing 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
- 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 limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The Pagefind search index is generated only in the build output; search cannot be tested directly in the local development environment, and a build must be run before preview or dev.
- Social links and the edit-post address are injected via environment variables; before use, copy .env.example to .env and fill in your own values, and unset variables hide the corresponding links.
- Running the project requires Node.js 20 or later and the pnpm package manager.
- 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
Permission is hereby granted, free of charge
Original License Text
The Pagefind search index is **only available in the production build**.
Original README
Copy `.env.example` → `.env` and fill in your own values before running the project.
Original README
https://github.com/0xdres/astro-devosfera/blob/main/LICENSEhttps://github.com/0xdres/astro-devosfera/blob/main/README.md**Requirements:** Node.js 20+ and pnpm.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-01. 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 · 91 / 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-06
- Screenshot last checked
- 2026-10-01
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: 0edabc5d94d409f08ea20c2b94de0751dbea68025b16b8645ef448887dc6911c
2026-10-01T13:28:56.214Z
Source file / repository# Devosfera Blog Heavily customized version of the [AstroPaper](https://github.com/satnaing/astro-paper) theme with a new aesthetic, image galleries, global search modal, and dozens of visual and interactive improvements. **🌐 Live demo:** [devosfera.vercel.app](https://devosfera.vercel.app)  > **Note:** This project is primarily my personal blog. If anyone wishes to use it, feel free to delete all entries and edit the settings freely. > [!IMPORTANT] > **Social links and personal URLs are no longer hardcoded.** > They are loaded from environment variables so that forks of this repo do not expose the original author's personal data. > Copy `.env.example` → `.env` and fill in your own values before running the project. See the [Configuration](#%EF%B8%8F-configuration) section for details. --- ## Table of contents 1. [Features](#-features) 2. [Project structure](#-project-structure) 3. [Installation and local development](#-installation-and-local-development) 4. [Commands](#-commands) 5. [Creating content](#-creating-content) - [Posts](#posts-srcdatablog) - [Image galleries](#galleries-srcdatagalleries) 6. [GalleryEmbed component](#%EF%B8%8F-galleryembed-component) 7. [Configuration](#%EF%B8%8F-configuration) 8. [Upstream issues resolved](#-upstream-issues-resolved) 9. [License](#-license) --- ## ✨ Features ### Core (inherited from AstroPaper) - Type-safe Markdown, good performance, accessible and responsive - Full SEO (meta tags, Open Graph, sitemap, RSS), light/dark mode - Dynamically generated OG images with Satori ### Modern design - Hero with animated prompt configurable from `heroTerminalPrompt` in `src/config.ts` (default: `~/ready-to-go $`) - Global backdrop: grid + cursor glow + noise texture (all pages) optional and configurable from `src/config.ts` - Glassmorphism on navbar, cards and modals ### Custom typography | Role | Font | | :------------ | :------------------------ | | Body | `Wotfard` (local) | | Code / Mono | `Cascadia Code` (local) | | Italics / H3 | `Sriracha` (Local) | ### Global search (⌘K) - Modal via `⌘K` / `Ctrl+K` powered by **Pagefind** (static index) and full keyboard navigation (if you want to test it locally, run `pnpm run build` first and after that `pnpm run dev` or `pnpm run preview` since the index is only generated in production) ### Image galleries (`/galleries`) - Albums in `src/data/galleries/<slug>/`; images optimized at build-time (srcset, WebP, lazy) - Native lightbox with `<dialog>`, redesigned fullscreen layout, keyboard navigation and edge-aware prev/next controls - `<GalleryEmbed>` to embed galleries inside MDX posts without importing - Controlled by `showGalleries` in `src/config.ts` (also gates gallery inclusion in mixed feeds) — see [GALLERIES.md](GALLERIES.md) ### Unified mixed feed (posts + galleries) - Optional mixed feed controlled by `showGalleriesInIndex` in `src/config.ts` (effective only if `showGalleries` is `true`) - When both flags are enabled, gallery entries are included in `/`, `/posts`, `/archives`, `/tags`, and `/rss.xml` - Shared URL/date helpers keep routing and publish-date sorting consistent across all listing pages - Gallery entries include a visual badge in cards and archive timeline items ### Performance and maintainability improvements - Parallel collection loading in key routes using `Promise.all` - Optimized sorting and tag extraction logic for larger content sets - Stronger shared typing across blog/gallery entries (removed weak `any` usage) - Reduced duplicated route/slug logic by centralizing entry helpers ### Branded audio player - Intro audio player in the hero with terminal aesthetic (wave bars, progress bar) - Fully togglable and configurable from `src/config.ts` ### Redesigned pages | Page | Highlights | | :---------- | :-------------------------------------------------- | | `/` Home | Terminal hero, featured grid, section counters, optional mixed feed | | `/archives` | Vertical timeline with glow, includes gallery entries | | `/tags` | Grid with proportional progress bar | | `/search` | Reactive aurora, restyled Pagefind | | Posts | Paginated mixed feed (posts + galleries), inline Pagefind search | --- ## 🚀 Project structure ``` / ├── public/ │ ├── audio/ # Audio files (intro, etc.) │ └── pagefind/ # Search index (generated at build) ├── src/ │ ├── assets/ # Local fonts, SVG icons and logo │ ├── components/ # Reusable Astro components │ ├── data/ │ │ ├── blog/ # Posts .md / .mdx │ │ └── galleries/ # Galleries (one folder per album) │ ├── layouts/ # Root layout, PostDetails, etc. │ ├── pages/ # Astro routes │ ├── styles/ # global.css, typography.css │ └── utils/ # Filters, OG with Satori, Shiki transformers └── astro.config.ts ``` --- ## 👨🏻💻 Installation and local development **Requirements:** Node.js 20+ and pnpm. ```bash # 1. Install dependencies pnpm install # 2. Development server pnpm run dev # → http://localhost:4321 ``` The Pagefind search index is **only available in the production build**. To test it locally: ```bash pnpm run build && pnpm run preview/dev ``` ### Docker ```bash docker build -t devosfera-blog . docker run -p 4321:80 devosfera-blog ``` --- ## 🧞 Commands | Command | Action | | :----------------- | :------------------------------------------------------- | | `pnpm install` | Install dependencies | | `pnpm run dev` | Local dev server at `localhost:4321` | | `pnpm run build` | Production build (`astro check` + build + Pagefind) | | `pnpm run preview` | Preview the production build | | `pnpm run format` | Format with Prettier | | `pnpm run lint` | Lint with ESLint | > `pnpm run build` internally runs `pagefind --site dist && cp -r dist/pagefind public/`. The search index ends up in `public/pagefind/` ready for preview. --- ## 📝 Creating content ### Posts (`src/data/blog/`) Create a `.md` or `.mdx` file with the following frontmatter: ```yaml --- title: "Post title" pubDatetime: 2026-01-15T10:00:00Z # required — ISO 8601 with timezone description: "Short description for SEO and cards" tags: ["astro", "dev"] featured: false # highlight on the home page draft: false # hidden in production timezone: "America/Guatemala" # overrides SITE.timezone hideEditPost: false --- ``` **MDX**: JSX components can be used directly. `<GalleryEmbed>` is available without importing it (see next section). **Table of Contents**: add `## Table of contents` to the post body to auto-generate the TOC with `remark-toc` + `remark-collapse`. **Annotated code blocks** (via Shiki transformers): ``` // [!code highlight] → highlight the line // [!code ++] → added line (diff) // [!code --] → removed line (diff) // fileName: file.ts → display the filename above the block ``` --- ### Galleries (`src/data/galleries/`) Quick setup: 1. Create a folder in `src/data/galleries/<slug>/`. 2. Add `index.md` (gallery metadata) and image files. 3. Use numeric prefixes (`01-`, `02-`, …) if you want to control image order. 4. The folder slug becomes the route: `/galleries/<slug>`. For full details (frontmatter fields, cover behavior, alt generation, and image optimization), see [GALLERIES.md](GALLERIES.md). --- ## 🖼️ GalleryEmbed component Embed a gallery inside any `.mdx` post — **no import needed**: ```mdx <GalleryEmbed slug="my-trip-to-tokyo" /> ``` Optional props: `limit` (`0` = all), `cols` (`2 | 3 | 4`), `showLink` (`true/false`). For advanced usage, full props reference, lightbox behavior, and invalid slug fallback, see [GALLERIES.md](GALLERIES.md#galleryembed--gallery-inside-mdx-posts). --- ## ⚙️ Configuration All site configuration lives in `src/config.ts` (the `SITE` constant). It includes general settings (title, description, timezone), feature toggles (galleries, audio player, mixed feed), and content limits (posts per page, gallery embed limit). Social links and "Share" links are defined in `src/constants.ts`. > [!WARNING] > **Breaking change — social links moved to environment variables.** > > Previously, social URLs (GitHub, X, LinkedIn, email) and the "Edit this post" URL were hardcoded in `src/constants.ts` and `src/config.ts`. This caused every fork of the repo to expose the original author's personal data publicly, leading to unwanted spam. > > **What changed:** > > | Variable | What it controls | > | :--- | :--- | > | `PUBLIC_SOCIAL_GITHUB` | GitHub profile link & JSON-LD author URL | > | `PUBLIC_SOCIAL_X` | X / Twitter profile link | > | `PUBLIC_SOCIAL_LINKEDIN` | LinkedIn profile link | > | `PUBLIC_SOCIAL_EMAIL` | Contact email (shown as `mailto:` link) | > | `PUBLIC_EDIT_POST_URL` | "Edit this post" button base URL | > > **To restore your socials after forking or updating:** > > ```bash > cp .env.example .env > # fill in your own values in .env > ``` > > For production deployments (Vercel, Netlify, etc.), add these variables in your platform's environment settings. > Any variable left **unset** simply hides that social link — no errors, no broken UI. --- ## 🐛 Upstream issues resolved Bugs and feature requests from the official [AstroPaper](https://github.com/satnaing/astro-paper) repository implemented in this version: | Issue | Description | Files | Credits | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | | [#614](https://github.com/satnaing/astro-paper/issues/614) | **Back to Top shifts the pagination button** when `ShareLinks` is empty | `BackToTopButton.astro` | — | | [#574](https://github.com/satnaing/astro-paper/issues/574) | **Markdown tables overflow the layout on mobile** — fixed with `w-full table-auto` and `word-wrap` on cells | `typography.css` | [@GladerJ](https://github.com/GladerJ) — [solution](https://github.com/satnaing/astro-paper/issues/574#issuecomment-3427381261) | | [#569](https://github.com/satnaing/astro-paper/issues/569) | **Back to Top inconsistent on desktop** — unified circular design with progress ring and `fixed` positioning | `BackToTopButton.astro`, `PostDetails.astro` | — | | [#566](https://github.com/satnaing/astro-paper/issues/566) | **Share links don't open in a new tab** — added `target="_blank"` and `rel="noopener noreferrer"` | `ShareLinks.astro` | [PR #611](https://github.com/satnaing/astro-paper/pull/611) by [@zerone0x](https://github.com/zerone0x) | | [#131](https://github.com/satnaing/astro-paper/issues/131) | **No MDX support** — added `@astrojs/mdx` integration with `extendMarkdownConfig: true` | `astro.config.ts`, `content.config.ts` | — | | [#495](https://github.com/satnaing/astro-paper/issues/495) | **Inconsistent post filtering by timezone** — fixed using `dayjs` + `utc`/`timezone` plugins; also fixed a bug in the reference solution that used `.millisecond()` instead of `.valueOf()` | `postFilter.ts` | [@kj-9](https://github.com/kj-9) — [reference fix](https://github.com/satnaing/astro-paper/compare/main...kj-9:astro-paper:fix-post-filter-date) | | [#553](https://github.com/satnaing/astro-paper/issues/553) | **No galleries section** — implemented full `/galleries` section with lightbox, `GalleryEmbed`, image optimization and `showGalleries` flag. See [GALLERIES.md](GALLERIES.md) | multiple — see GALLERIES.md | — | --- ## 📜 License Based on [AstroPaper](https://github.com/satnaing/astro-paper) by [Sat Naing](https://satnaing.dev), licensed under MIT. Customizations © [0xdres](https://github.com/0xdres).
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
