Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Open-source Astro blog theme with MDX, Tailwind CSS, Algolia search, giscus/Waline comments, dark mode, and RSS.

Fully customizable personal portfolio and blog website made with Spring Boot
astro-mecure is an open-source Astro blog theme — a starter repository for building static personal blogs — that turns Markdown/MDX content in src/content/blog/ into a fast, fully static site with Algolia search, giscus or Waline comments, dark mode, RSS, and sitemap, ready to deploy to any static host.
astro-mecure, hosted in the izmttk/astro-mecure repository, is a blog template built with Astro as the static site generator, React for interactive UI islands, and Tailwind CSS for utility-first styling. As input it takes Markdown or MDX files with YAML frontmatter (title, slug, date, author, tags, category, cover image, draft flag) placed in src/content/blog/; as output it produces a static dist/ directory containing the rendered blog, generated by npm run build and deployable to Netlify, Vercel, GitHub Pages, or any static hosting provider — the author's live blog at suborbit.net runs on Netlify. The theme also includes TypeScript, PostCSS, Radix UI headless components, Jotai for global state, React Spring animations, and unplugin-icons.
src/content/blog/ as Markdown or MDX files; frontmatter supports title, slug, date, updateDate, author, description, image, tags, category, draft, and cardVariant (blur, material, full, plain). Drafts are excluded from build.Access-Control-Allow-Origin header to * or giscus.app on your server, otherwise CORS errors appear.hasThemeToggle), and Astro View Transitions are enabled for page navigation.src/config.ts controls navbar (logo, menu with cascading dropdowns), hero (title, description, background image), sidebar widgets (profile, tag cloud, category tree, custom component), footer links, outdate tip, and license info.npm run create-post scaffolds a new post; npm run create-component creates a component; both are defined in the README's command table.npm install, then npm run dev to start the local server; write posts in Markdown/MDX under src/content/blog/, and npm run create-post scaffolds the frontmatter for you.src/config.ts set the site title, description, author, favicon, navbar menu items (with nested dropdowns), hero background, sidebar widgets, and footer links.npm run build to emit the dist/ folder, then host it on Netlify, Vercel, GitHub Pages, Cloudflare Pages, or any static file server.The README documents a 5-step workflow: clone the repository, run npm install to install dependencies, start the local dev server with npm run dev, build the production site with npm run build and preview it with npm run preview, then deploy the generated dist/ folder to any static hosting provider. During development, Markdown/MDX files in src/content/blog/ are parsed by Astro content collections; at build time Astro renders all pages to static HTML.
Yes. The theme supports two comment providers: giscus (via GitHub Discussions) and Waline. Set comment.provider and comment.options in src/config.ts. For giscus with a custom theme, your server must return an Access-Control-Allow-Origin header of * or giscus.app; otherwise you'll encounter a CORS error.
Run npm run create-post from the project root, and the script creates a new post file in src/content/blog/ with the expected frontmatter. You can also create the file manually; any file or folder whose name starts with _ is treated as a draft and excluded from the build.
Yes. npm run build outputs a static dist/ directory that can be served by any static hosting provider, including Vercel, GitHub Pages, Cloudflare Pages, or a plain web server. Netlify is used by the author's live demo, but the theme has no hard dependency on it.
The theme integrates Algolia DocSearch. You must apply for a DocSearch account and provide appId, apiKey, and indexName in the algolia section of src/config.ts. Once set, the search button appears in the navbar unless hasSearchToggle is set to false.
Tabler and MingCute icon sets are preinstalled and referenced via unplugin-icons in the format pack:icon-name (e.g., tabler:home). To use another set from icones.js.org, install the matching @iconify-json/... package, such as npm install @iconify-json/mdi for Material Design icons.
