<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ryze Blog</title><description>A reader-friendly blog with accessibility, SEO and responsiveness out of the box</description><link>https://ryze.pages.dev</link><language>en-us</language><item><title>Aureus - A CLI for Repository Automation</title><link>https://ryze.pages.dev/blog/aureus-cli-automation</link><guid isPermaLink="true">https://ryze.pages.dev/blog/aureus-cli-automation</guid><description>How Aureus bootstraps projects, enforces conventional commits, and automates semantic versioning across all major package managers</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;What Is Aureus?&lt;/h2&gt;
&lt;p&gt;Repository compliance is often an afterthought - bolted on with brittle shell scripts that work on one machine and fail silently on another. Manual setup of Git hooks, Commitlint, and semantic release tooling is error-prone: team members diverge in local configurations, and a single malformed commit breaks the changelog pipeline.&lt;/p&gt;
&lt;p&gt;Aureus is a CLI tool that wraps all of this into a single, idempotent command. It scaffolds project conventions, enforces commit standards, and automates versioning and changelog generation - across npm, pnpm, yarn, and bun.&lt;/p&gt;
&lt;h2&gt;Get Started&lt;/h2&gt;
&lt;p&gt;Aureus is open source under the MIT license:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&quot;https://github.com/A58361/aureus&quot;&gt;github.com/A58361/aureus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;npm&lt;/strong&gt;: &lt;a href=&quot;https://npmjs.com/package/aureus&quot;&gt;npmjs.com/package/aureus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;npx aureus init my-project
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;npm install -g aureus
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or run it without installing:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npx aureus init my-project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: Node.js 18 or newer, Git, and optionally the &lt;a href=&quot;https://cli.github.com&quot;&gt;GitHub CLI&lt;/a&gt; for repository creation features.&lt;/p&gt;
&lt;h2&gt;Core Commands&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;aureus init [folder]&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Scaffolds a complete repository setup in the specified folder (defaults to the current directory). This is the main entry point - it walks you through a few prompts and generates everything you need.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;aureus create &amp;lt;component&amp;gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Add individual components to an existing project on demand:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;license&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generates a license file (MIT, GPL-3.0, Apache-2.0, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gitignore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a &lt;code&gt;.gitignore&lt;/code&gt; for your project type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pull-request&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates a PR template in &lt;code&gt;.github/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;issue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates bug report and feature request templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;code-of-conduct&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generates a Contributor Covenant v2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;husky-hooks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wires up &lt;code&gt;commit-msg&lt;/code&gt; and &lt;code&gt;pre-push&lt;/code&gt; hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-actions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a release workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-repo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates a GitHub repository via &lt;code&gt;gh&lt;/code&gt; CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;code&gt;aureus view &amp;lt;component&amp;gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Preview templates and configuration before creating them. Useful for seeing what will be generated without writing any files.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;aureus commit&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;An interactive TUI for writing conventional commits. It guides you through selecting a commit type, adding an optional scope, writing the message, and flagging breaking changes - no need to remember conventional commit syntax.&lt;/p&gt;
&lt;p&gt;Supported types:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A new feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A bug fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;refactor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Code rewrites or restructuring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changes affecting build components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changes that don&apos;t modify app logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adding or correcting tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ops&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changes to operational components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;revert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reverts a previous commit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Automatic Versioning&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;aureus bump [--dry-run]&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This is where Aureus shines. It analyses all commits since the last git tag, determines the correct semantic version bump (major / minor / patch), updates &lt;code&gt;package.json&lt;/code&gt;, generates a changelog entry, and creates a git tag - all in one step.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Preview what would change
aureus bump --dry-run

# Apply the bump
aureus bump
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The commit analysis follows the conventional commits spec:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commits with breaking changes or &lt;code&gt;feat:&lt;/code&gt; that include &lt;code&gt;BREAKING CHANGE&lt;/code&gt; trigger a &lt;strong&gt;major&lt;/strong&gt; bump&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat:&lt;/code&gt; commits trigger a &lt;strong&gt;minor&lt;/strong&gt; bump&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix:&lt;/code&gt; and other commits trigger a &lt;strong&gt;patch&lt;/strong&gt; bump&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is typically wired into a &lt;code&gt;pre-push&lt;/code&gt; Husky hook so that versioning and changelog stay in sync automatically - every push bumps the version and updates the changelog before the code leaves your machine.&lt;/p&gt;
&lt;h2&gt;Git Hooks Workflow&lt;/h2&gt;
&lt;p&gt;When you run &lt;code&gt;aureus create husky-hooks&lt;/code&gt; (or select Husky support during &lt;code&gt;aureus init&lt;/code&gt;), two hooks are configured:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;commit-msg&lt;/code&gt;&lt;/strong&gt; - runs &lt;code&gt;aureus verify&lt;/code&gt; on the commit message to enforce conventional commit format. Non-compliant messages are rejected before the commit completes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;pre-push&lt;/code&gt;&lt;/strong&gt; - runs &lt;code&gt;aureus bump&lt;/code&gt; to bump the version, update &lt;code&gt;CHANGELOG.md&lt;/code&gt;, and create a git tag before pushing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existing hook files are preserved and extended when possible - Aureus won&apos;t overwrite custom hooks you already have.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Aureus stores user preferences in &lt;code&gt;~/.aureus/config.json&lt;/code&gt; and reuses them across runs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;author_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default author name&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;package_manager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preferred package manager&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;license&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default license&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mit&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gitignore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default .gitignore template&lt;/td&gt;
&lt;td&gt;&lt;code&gt;node&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github_repo_visibility&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GitHub repo visibility&lt;/td&gt;
&lt;td&gt;&lt;code&gt;public&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github_remote_protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Git remote protocol&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ssh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github_username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your GitHub username&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;contact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contact email for code of conduct&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Configuration is read from &lt;code&gt;~/.aureus/config.json&lt;/code&gt; and can be overridden per-project via a &lt;code&gt;.aureusrc&lt;/code&gt; file or &lt;code&gt;package.json&lt;/code&gt; extensions key.&lt;/p&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;
&lt;p&gt;Aureus is built with a modular orchestration engine at its core:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Async child-process pooling&lt;/strong&gt; with configurable concurrency limits and per-step timeout guards ensures scaffold operations run in parallel where possible and fail gracefully.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config-driven scaffolding layers&lt;/strong&gt; read from a declarative spec - either a &lt;code&gt;.aureusrc&lt;/code&gt; file or &lt;code&gt;package.json&lt;/code&gt; extensions - to determine which modules to activate. The resolution algorithm prioritises explicit config over convention, with sensible defaults for each detected project type.&lt;/li&gt;
&lt;li&gt;Each pipeline step (hook init, commitlint config, semantic release setup) is an isolated module that emits structured events, making it easy to add new components without touching existing code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CLI itself is written in TypeScript, built with &lt;a href=&quot;https://tsup.egoist.dev&quot;&gt;tsup&lt;/a&gt;, and uses &lt;a href=&quot;https://github.com/tj/commander.js&quot;&gt;Commander.js&lt;/a&gt; for argument parsing and &lt;a href=&quot;https://github.com/enquirer/enquirer&quot;&gt;Enquirer&lt;/a&gt; for the interactive TUI prompts.&lt;/p&gt;
&lt;h2&gt;Real Usage: Ryze&lt;/h2&gt;
&lt;p&gt;This very site uses Aureus. The &lt;code&gt;.husky/&lt;/code&gt; directory in the Ryze repository was scaffolded with Aureus and the hooks are managed by it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.husky/commit-msg&lt;/code&gt; runs &lt;code&gt;aureus verify&lt;/code&gt; to ensure every commit follows conventional commits&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.husky/pre-push&lt;/code&gt; runs &lt;code&gt;aureus bump&lt;/code&gt; to auto-version before pushing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every release you see in the Ryze changelog was generated by Aureus. The tool eats its own dogfood.&lt;/p&gt;
</content:encoded><category>devlog</category><category>aureus</category><category>cli</category><category>automation</category><category>typescript</category><category>npm</category><category>open-source</category><category>devtools</category><category>ryze</category><author>Subhashis Hansda</author></item><item><title>Ryze - A Blog &amp; Portfolio Starter Built with Astro 6</title><link>https://ryze.pages.dev/blog/ryze-the-blog-portfolio-starter</link><guid isPermaLink="true">https://ryze.pages.dev/blog/ryze-the-blog-portfolio-starter</guid><description>Everything Ryze ships with out of the box, how to customize it, and how the SEO and OG image system works</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This post talks about everything &lt;strong&gt;Ryze&lt;/strong&gt; ships out of the box, how to customize it and my thoughts on using Astro for something like this.&lt;/p&gt;
&lt;h2&gt;Get Started&lt;/h2&gt;
&lt;p&gt;Ryze is a &lt;strong&gt;modern blog + portfolio starter&lt;/strong&gt; built on &lt;a href=&quot;https://astro.build&quot;&gt;&lt;strong&gt;Astro 6&lt;/strong&gt;&lt;/a&gt;, &lt;strong&gt;React 19&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS 4&lt;/strong&gt;, and &lt;strong&gt;shadcn/ui&lt;/strong&gt;. It is the foundation this very site runs on - what you are reading right now was authored in Markdown and rendered by Ryze.&lt;/p&gt;
&lt;p&gt;Ryze is open source under the GPL-3.0 license. You can find the repository, read the full documentation, and submit issues or feature requests on &lt;a href=&quot;https://github.com/a58361/ryze&quot;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Why Astro?&lt;/h2&gt;
&lt;p&gt;Ryze is built on Astro because Astro is uniquely suited for content-driven sites. Every page is &lt;strong&gt;static by default&lt;/strong&gt; - zero JavaScript until an interactive island needs it. View transitions between pages are built-in. Content collections provide type-safe frontmatter validation. The build output is pure HTML and CSS with minimal JS.&lt;/p&gt;
&lt;p&gt;For a blog and portfolio, this means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast load times&lt;/strong&gt; - most pages have zero JS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Great SEO&lt;/strong&gt; - everything is server-rendered HTML&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low hosting cost&lt;/strong&gt; - static files can be served from any CDN&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Future-proof&lt;/strong&gt; - your content is markdown, not locked in a CMS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What Ryze Ships With&lt;/h2&gt;
&lt;h3&gt;Content &amp;amp; Pages Out of the Box&lt;/h3&gt;
&lt;p&gt;Ryze comes with five page types pre-built:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Configurable hero introduction, featured blog posts, featured portfolio projects (order configurable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blog&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/blog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filterable listing of all posts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blog Post&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/blog/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full markdown-rendered article with KaTeX math, Shiki code highlighting, auto-generated figure captions, and Mermaid diagrams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/portfolio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filterable project gallery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio Project&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/portfolio/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full project detail with image carousel, links, and tabbed sections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resume&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/resume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full resume page driven by JSON config&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is also a &lt;strong&gt;custom 404 page&lt;/strong&gt;, a &lt;strong&gt;dynamic robots.txt&lt;/strong&gt;, and an &lt;strong&gt;RSS feed&lt;/strong&gt; at &lt;code&gt;/rss.xml&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Markdown Features&lt;/h3&gt;
&lt;p&gt;Every blog post gets these features for free:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Syntax highlighting&lt;/strong&gt; via &lt;a href=&quot;https://shiki.style&quot;&gt;Shiki&lt;/a&gt; with &lt;code&gt;github-light&lt;/code&gt; / &lt;code&gt;github-dark&lt;/code&gt; themes - just write fenced code blocks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LaTeX math&lt;/strong&gt; via &lt;a href=&quot;https://katex.org&quot;&gt;KaTeX&lt;/a&gt; - inline with &lt;code&gt;$...$&lt;/code&gt;, display with &lt;code&gt;$$...$$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-wrapped &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; elements&lt;/strong&gt; for images - the &lt;code&gt;alt&lt;/code&gt; text becomes the &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;External links&lt;/strong&gt; open in a new tab with &lt;code&gt;rel=&quot;nofollow noopener noreferrer&quot;&lt;/code&gt; automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GFM&lt;/strong&gt; support - tables, task lists, strikethrough, autolinks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heading anchor links&lt;/strong&gt; - hover any heading to get a permalink&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid diagrams&lt;/strong&gt; - write &lt;code&gt;```mermaid&lt;/code&gt; fenced code blocks and they render as flowcharts, sequence diagrams, and more, with automatic light/dark theme switching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of this is configured declaratively in &lt;code&gt;astro.config.mjs&lt;/code&gt; via remark and rehype plugins. No per-post configuration needed.&lt;/p&gt;
&lt;h3&gt;Interactive Components&lt;/h3&gt;
&lt;p&gt;Ryze ships a set of React island components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Theme toggle with localStorage persistence and system preference detection&lt;/li&gt;
&lt;li&gt;3D perspective tilt on hover&lt;/li&gt;
&lt;li&gt;Image gallery carousel with keyboard and mouse wheel navigation&lt;/li&gt;
&lt;li&gt;Category/tag filtering with sort controls for both blog and portfolio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these are built as &lt;strong&gt;Astro islands&lt;/strong&gt; (client-side React components), so they only load JavaScript when they become interactive - the rest of the page is pure static HTML.&lt;/p&gt;
&lt;h3&gt;UI Component Library&lt;/h3&gt;
&lt;p&gt;Ryze includes curated &lt;a href=&quot;https://ui.shadcn.com&quot;&gt;shadcn/ui&lt;/a&gt; components in the &lt;code&gt;base-vega&lt;/code&gt; style - buttons, breadcrumbs, checkboxes, popovers, and more. All are tree-shakeable TypeScript components with Tailwind-based theming.&lt;/p&gt;
&lt;h3&gt;Styling&lt;/h3&gt;
&lt;p&gt;The design system is built entirely with &lt;strong&gt;Tailwind CSS 4&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;zinc-based neutral palette&lt;/strong&gt; that works in both light and dark mode&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Motion reduction&lt;/strong&gt; support via &lt;code&gt;prefers-reduced-motion&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Typography for blog content is separately styled in &lt;code&gt;typography.css&lt;/code&gt; - headings, blockquotes, code blocks, tables, details/summary, and task lists all get intentional styling.&lt;/p&gt;
&lt;h3&gt;Search&lt;/h3&gt;
&lt;p&gt;Full-text search is powered by &lt;a href=&quot;https://pagefind.app&quot;&gt;Pagefind&lt;/a&gt;, indexed at build time. Press &lt;code&gt;mod+k&lt;/code&gt; or click the search button to search all blog posts. The search UI is styled to match the rest of the design.&lt;/p&gt;
&lt;h3&gt;SEO &amp;amp; Open Graph&lt;/h3&gt;
&lt;p&gt;Ryze handles search engine optimization across every page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open Graph tags&lt;/strong&gt; - locale, title, description, URL, type, site name, and image for rich social previews&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Twitter Cards&lt;/strong&gt; - &lt;code&gt;summary_large_image&lt;/code&gt; card for Twitter/X embeds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Canonical URLs&lt;/strong&gt; - prevents duplicate content issues by pointing search engines to the authoritative URL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Article metadata&lt;/strong&gt; - &lt;code&gt;article:published_time&lt;/code&gt; and &lt;code&gt;article:tag&lt;/code&gt; for each tag on blog posts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sitemap&lt;/strong&gt; - auto-generated by &lt;code&gt;@astrojs/sitemap&lt;/code&gt; at &lt;code&gt;/sitemap-index.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic robots.txt&lt;/strong&gt; - allows all crawlers and references the sitemap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RSS feed&lt;/strong&gt; - full-content feed at &lt;code&gt;/rss.xml&lt;/code&gt; with all non-draft posts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google site verification&lt;/strong&gt; - via &lt;code&gt;PUBLIC_GOOGLE_SITE_VERIFICATION&lt;/code&gt; environment variable&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Dynamic OG Images&lt;/h4&gt;
&lt;p&gt;Every page gets a unique Open Graph image generated at build time using &lt;a href=&quot;https://github.com/vercel/satori&quot;&gt;Satori&lt;/a&gt; (JSX → SVG) and &lt;a href=&quot;https://sharp.pixelplumbing.com&quot;&gt;Sharp&lt;/a&gt; (SVG → PNG):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/og/default.png&lt;/code&gt;&lt;/strong&gt; - site-wide fallback OG image&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/og/blog/[id].png&lt;/code&gt;&lt;/strong&gt; - per-post OG image showing title, description, category badge, and formatted date&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/og/portfolio/[id].png&lt;/code&gt;&lt;/strong&gt; - per-project OG image with the same design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All OG images use Geist fonts loaded from local assets, a dark background (&lt;code&gt;#18181b&lt;/code&gt;), and an orange accent dot. The shared generation logic lives in &lt;code&gt;src/lib/og.ts&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Site Configuration&lt;/h3&gt;
&lt;p&gt;Everything is driven by config files - no editing of components needed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;src/site-config.json&lt;/code&gt;&lt;/strong&gt; - site-wide settings: domain, navigation, feature toggles, hero introduction, social links, CTA buttons, and featured section ordering.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;domain&quot;: &quot;https://your-site.com&quot;,
  &quot;navigationItems&quot;: [&quot;portfolio&quot;, &quot;blog&quot;],
  &quot;bPageFind&quot;: true,
  &quot;bThemeToggle&quot;: true,
  &quot;bRssFeed&quot;: true,
  &quot;introduction&quot;: {
    &quot;badges&quot;: [&quot;Your Title&quot;],
    &quot;heading&quot;: &quot;Your Name&quot;,
    &quot;description&quot;: &quot;Your bio...&quot;
  },
  &quot;featured&quot;: {
    &quot;portfolio&quot;: { &quot;visible&quot;: true },
    &quot;blog&quot;: { &quot;visible&quot;: true }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;src/portfolio-config.json&lt;/code&gt;&lt;/strong&gt; - array of project objects with id, date, category, title, description, tags, introduction, links, video URL, and architecture brief.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;src/resume-config.json&lt;/code&gt;&lt;/strong&gt; - complete resume data: personal info, social links, work experience, education, skills, projects, certifications, courses, languages, volunteering, publications.&lt;/p&gt;
&lt;h2&gt;How to Customize Ryze&lt;/h2&gt;
&lt;p&gt;Ryze is designed to be forked and made your own with minimal friction.&lt;/p&gt;
&lt;h3&gt;1. Site Identity&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/site-config.json&lt;/code&gt; to set your name, bio, social links, navigation, and featured sections. The homepage hero, header navigation, and footer all pull from this file.&lt;/p&gt;
&lt;h3&gt;2. Blog Posts&lt;/h3&gt;
&lt;p&gt;Add &lt;code&gt;.md&lt;/code&gt; or &lt;code&gt;.mdx&lt;/code&gt; files to &lt;code&gt;src/content/blog/&lt;/code&gt;. Each post needs frontmatter following this schema:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
draft: false
date: &quot;24-05-2026&quot;
title: &quot;Your Post Title&quot;
description: &quot;A short summary&quot;
category: &quot;engineering&quot; # &quot;engineering&quot; | &quot;workflow&quot; | &quot;strategy&quot; | &quot;devlog&quot;
tags: [&quot;tag1&quot;, &quot;tag2&quot;]
author: &quot;Your Name&quot;
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Posts are automatically picked up by Astro&apos;s content collections - no registration needed.&lt;/p&gt;
&lt;h3&gt;3. Portfolio Projects&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/portfolio-config.json&lt;/code&gt;. Each project needs an &lt;code&gt;id&lt;/code&gt;, title, description, category, links, and optional image paths. Add project images to &lt;code&gt;src/assets/portfolio/&amp;lt;id&amp;gt;/&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;4. Resume&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;src/resume-config.json&lt;/code&gt; - work experience, education, skills, certifications, projects, publications, everything is there as mock data you can replace.&lt;/p&gt;
&lt;h3&gt;5. Theme Colors&lt;/h3&gt;
&lt;p&gt;The color palette is defined as CSS custom properties in &lt;code&gt;src/styles/global.css&lt;/code&gt;. Change the values in &lt;code&gt;:root&lt;/code&gt; (light) and &lt;code&gt;.dark&lt;/code&gt; (dark) to rebrand the entire site. All shadcn components respect these variables.&lt;/p&gt;
&lt;h3&gt;6. Remove Features&lt;/h3&gt;
&lt;p&gt;Don&apos;t need a portfolio? Set &lt;code&gt;&quot;visible&quot;: false&lt;/code&gt; in site-config and remove the navigation item. Don&apos;t want search? Set &lt;code&gt;&quot;bPageFind&quot;: false&lt;/code&gt;. Each feature is independently removable.&lt;/p&gt;
&lt;h2&gt;How I Built This Site with Ryze&lt;/h2&gt;
&lt;p&gt;This very site - the one you are reading this post on - was built using Ryze as the starter.&lt;/p&gt;
&lt;p&gt;Here is exactly what I did:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Forked the repository&lt;/strong&gt; and ran &lt;code&gt;pnpm install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated &lt;code&gt;site-config.json&lt;/code&gt;&lt;/strong&gt; with my name, bio, social links, and contact info&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrote blog posts&lt;/strong&gt; as &lt;code&gt;.md&lt;/code&gt; files in &lt;code&gt;src/content/blog/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replaced portfolio images&lt;/strong&gt; in &lt;code&gt;src/assets/portfolio/&lt;/code&gt; with actual project screenshots&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customized the resume&lt;/strong&gt; by editing &lt;code&gt;resume-config.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changed the domain&lt;/strong&gt; in &lt;code&gt;astro.config.mjs&lt;/code&gt; and &lt;code&gt;site-config.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ran &lt;code&gt;pnpm build&lt;/code&gt;&lt;/strong&gt; and deployed to Cloudflare Pages&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is it. No boilerplate to write, no components to wire up, no CSS to start from scratch. The entire site - homepage hero, filterable blog, portfolio gallery, resume, RSS feed, search, dark mode - was functional after just editing JSON and writing markdown.&lt;/p&gt;
&lt;h3&gt;What I Changed Beyond the Config&lt;/h3&gt;
&lt;p&gt;I did end up tweaking a few things to make the site feel like my own:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changed the &lt;code&gt;favicon.svg&lt;/code&gt; in &lt;code&gt;public/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Updated the &lt;code&gt;background.svg&lt;/code&gt; used in the tilt card&lt;/li&gt;
&lt;li&gt;Removed portfolio projects I did not need and replaced the mock data with real ones&lt;/li&gt;
&lt;li&gt;Wrote custom copy for the introduction, CTA sections, and about content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not a single component needed modification. That is the point of Ryze - it handles the entire UI layer so you can focus on content.&lt;/p&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://astro.build/themes/details/ryze/&quot;&gt;Ryze&lt;/a&gt; is my take on what a modern personal site starter should be - fast by default, extensible by design, and focused entirely on your content. Star it on &lt;a href=&quot;https://github.com/a58361/ryze&quot;&gt;Github&lt;/a&gt; if you find it useful. Contributions and issues are always welcome.&lt;/p&gt;
</content:encoded><category>devlog</category><category>ryze</category><category>starter</category><category>astro</category><category>template</category><category>tailwind</category><category>shadcn</category><category>portfolio</category><category>blog</category><author>Subhashis Hansda</author></item><item><title>Markdown Showcase - Every Feature on Ryze</title><link>https://ryze.pages.dev/blog/markdown-showcase</link><guid isPermaLink="true">https://ryze.pages.dev/blog/markdown-showcase</guid><description>A comprehensive reference showing every markdown feature available on Ryze</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This page demonstrates every markdown feature rendered on Ryze. Use it as a reference when writing your own posts. All code blocks are highlighted with &lt;strong&gt;Shiki&lt;/strong&gt;, math renders via &lt;strong&gt;KaTeX&lt;/strong&gt;, external links open in new tabs, and images get automatic captions from &lt;code&gt;alt&lt;/code&gt; text.&lt;/p&gt;
&lt;h2&gt;Headings&lt;/h2&gt;
&lt;h2&gt;Heading 2 - &lt;code&gt;h2&lt;/code&gt;&lt;/h2&gt;
&lt;h3&gt;Heading 3 - &lt;code&gt;h3&lt;/code&gt;&lt;/h3&gt;
&lt;h4&gt;Heading 4 - &lt;code&gt;h4&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Each heading has an auto-generated anchor link (the &lt;code&gt;#&lt;/code&gt; symbol that appears on hover). Click it to copy a direct URL to that section.&lt;/p&gt;
&lt;h2&gt;Text Formatting&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bold text&lt;/strong&gt; using &lt;code&gt;**double asterisks**&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Italic text&lt;/em&gt; using &lt;code&gt;*single asterisks*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bold and italic&lt;/strong&gt;&lt;/em&gt; using &lt;code&gt;***triple asterisks***&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;s&gt;Strikethrough&lt;/s&gt; using &lt;code&gt;~~double tildes~~&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&amp;lt;mark&amp;gt;Highlighted text&amp;lt;/mark&amp;gt; using &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; HTML tags.&lt;/p&gt;
&lt;p&gt;&amp;lt;abbr title=&quot;Cascading Style Sheets&quot;&amp;gt;CSS&amp;lt;/abbr&amp;gt; - hover over abbreviations to see the full title.&lt;/p&gt;
&lt;p&gt;Press &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;C&amp;lt;/kbd&amp;gt; to copy, or &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;K&amp;lt;/kbd&amp;gt; to open the command palette.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/&quot;&gt;Internal link to the home page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.astro.build&quot;&gt;External link to Astro&apos;s docs&lt;/a&gt; - opens in a new tab with &lt;code&gt;rel=&quot;nofollow noopener noreferrer&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Lists&lt;/h2&gt;
&lt;h3&gt;Unordered&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Item one&lt;/li&gt;
&lt;li&gt;Item two
&lt;ul&gt;
&lt;li&gt;Nested item A&lt;/li&gt;
&lt;li&gt;Nested item B&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Item three&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ordered&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;First step&lt;/li&gt;
&lt;li&gt;Second step
&lt;ol&gt;
&lt;li&gt;Sub-step A&lt;/li&gt;
&lt;li&gt;Sub-step B&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Third step&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Task Lists&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[x] Write the markdown showcase&lt;/li&gt;
&lt;li&gt;[x] Install remark and rehype plugins&lt;/li&gt;
&lt;li&gt;[ ] Add a dark mode toggle&lt;/li&gt;
&lt;li&gt;[ ] Publish the blog post&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blockquotes&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a standard blockquote. It uses a left border and muted text colour to distinguish it from body content.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;A longer blockquote that spans multiple lines to show how line wrapping behaves within the blockquote component. The styling includes consistent padding, a left border, and appropriate spacing from surrounding elements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Inline Code&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;Array.prototype.map()&lt;/code&gt; method to transform arrays. Variable names like &lt;code&gt;config&lt;/code&gt;, &lt;code&gt;theme&lt;/code&gt;, and &lt;code&gt;backgroundColor&lt;/code&gt; are rendered with the Shiki inline code style - dark background in light mode, light background in dark mode.&lt;/p&gt;
&lt;h2&gt;Code Blocks&lt;/h2&gt;
&lt;h3&gt;Python&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from datetime import datetime, timedelta

def generate_date_range(start: str, days: int) -&amp;gt; list[str]:
    start_date = datetime.strptime(start, &quot;%Y-%m-%d&quot;)
    return [
        (start_date + timedelta(days=i)).strftime(&quot;%Y-%m-%d&quot;)
        for i in range(days)
    ]

print(generate_date_range(&quot;2026-05-01&quot;, 7))
# Output: [&apos;2026-05-01&apos;, &apos;2026-05-02&apos;, ..., &apos;2026-05-07&apos;]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;JSX / TSX&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { useState } from &quot;react&quot;;

interface CounterProps {
  initial?: number;
}

export default function Counter({ initial = 0 }: CounterProps) {
  const [count, setCount] = useState(initial);

  return (
    &amp;lt;div className=&quot;counter&quot;&amp;gt;
      &amp;lt;p&amp;gt;Count: {count}&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setCount((c) =&amp;gt; c + 1)}&amp;gt;Increment&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;CSS&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;.container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1.5rem;
  padding: 2rem;
}

.card {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.5rem;
  transition: box-shadow 0.2s ease;
}

.card:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Go&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;package main

import (
	&quot;fmt&quot;
	&quot;time&quot;
)

func main() {
	now := time.Now()
	fmt.Printf(&quot;Current time: %s\n&quot;, now.Format(time.RFC1123))
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Diagrams&lt;/h2&gt;
&lt;p&gt;Fenced code blocks tagged with &lt;code&gt;mermaid&lt;/code&gt; are rendered as interactive SVG diagrams by &lt;a href=&quot;https://mermaid.js.org&quot;&gt;Mermaid.js&lt;/a&gt;. The theme automatically switches between light and dark to match your site&apos;s appearance.&lt;/p&gt;
&lt;h3&gt;Flowchart&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    A[Start] --&amp;gt; B{Is it working?}
    B --&amp;gt;|Yes| C[Great!]
    B --&amp;gt;|No| D[Fix it]
    D --&amp;gt; B
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Sequence Diagram&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    participant U as User
    participant B as Browser
    participant S as Server
    U-&amp;gt;&amp;gt;B: Clicks link
    B-&amp;gt;&amp;gt;S: GET /page
    S--&amp;gt;&amp;gt;B: HTML response
    B--&amp;gt;&amp;gt;U: Renders page
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Tables&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Heading anchors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rehype-slug&lt;/code&gt; + &lt;code&gt;rehype-autolink-headings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External link handling&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rehype-external-links&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math rendering&lt;/td&gt;
&lt;td&gt;&lt;code&gt;remark-math&lt;/code&gt; + &lt;code&gt;rehype-katex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatic figure captions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rehype-figure&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Syntax highlighting&lt;/td&gt;
&lt;td&gt;Shiki (built-in)&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mermaid diagrams&lt;/td&gt;
&lt;td&gt;&lt;code&gt;astro-mermaid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Images&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://placehold.co/600x400&quot; alt=&quot;Ryze project screenshot showing the blog index with filter controls&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The image above is wrapped in a &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; element by &lt;code&gt;rehype-figure&lt;/code&gt;, with the &lt;code&gt;alt&lt;/code&gt; text rendered as a &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt; below the image.&lt;/p&gt;
&lt;h2&gt;Mathematics&lt;/h2&gt;
&lt;h3&gt;Inline Math&lt;/h3&gt;
&lt;p&gt;The quadratic formula $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ solves $ax^2 + bx + c = 0$.&lt;/p&gt;
&lt;p&gt;Euler&apos;s identity: $e^{i\pi} + 1 = 0$.&lt;/p&gt;
&lt;h3&gt;Display Math&lt;/h3&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} e^{-x^2} , dx = \sqrt{\pi}
$$&lt;/p&gt;
&lt;p&gt;$$
\sum_{k=1}^{n} k = \frac{n(n+1)}{2}
$$&lt;/p&gt;
&lt;p&gt;$$
\begin{pmatrix}
a &amp;amp; b \
c &amp;amp; d
\end{pmatrix}^{-1}
= \frac{1}{ad - bc}
\begin{pmatrix}
d &amp;amp; -b \
-c &amp;amp; a
\end{pmatrix}
$$&lt;/p&gt;
&lt;h2&gt;Details and Summary&lt;/h2&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;Click to reveal implementation notes&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;This is hidden content inside a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; element. You can use these for spoilers, collapsible code explanations, or supplementary information that doesn&apos;t need to be visible upfront.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; element is native HTML&lt;/li&gt;
&lt;li&gt;No JavaScript required&lt;/li&gt;
&lt;li&gt;Styled to match the blog&apos;s border and spacing tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h2&gt;Mixed Content Example&lt;/h2&gt;
&lt;h3&gt;A Tip for Writers&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Good documentation is not written in hindsight - it&apos;s written alongside the code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When documenting APIs, include &lt;strong&gt;concrete examples&lt;/strong&gt; in every section. Users rarely read prose top-to-bottom; they scroll to the code block first, then scan the surrounding explanation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Bad: no example
// The authenticate function validates credentials.

// Good: example included
// The authenticate function validates credentials.
const user = await authenticate(&quot;admin@example.com&quot;, &quot;s3cret&quot;);
console.log(user.role); // &quot;admin&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach - a short blockquote for emphasis, bold for key terms, and a side-by-side code comparison - keeps readers engaged and learning faster.&lt;/p&gt;
&lt;h2&gt;What You Can Do With Plugins&lt;/h2&gt;
&lt;p&gt;All the features on this page are powered by a small set of remark/rehype plugins configured in &lt;code&gt;astro.config.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rehype-external-links&lt;/code&gt;&lt;/strong&gt; - opens external links in a new tab with security attributes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;remark-math&lt;/code&gt;&lt;/strong&gt; + &lt;strong&gt;&lt;code&gt;rehype-katex&lt;/code&gt;&lt;/strong&gt; - renders $LaTeX$ math expressions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rehype-figure&lt;/code&gt;&lt;/strong&gt; - wraps images in semantic &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; elements with captions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;astro-mermaid&lt;/code&gt;&lt;/strong&gt; - renders &lt;code&gt;```mermaid&lt;/code&gt; code blocks as SVG diagrams via Mermaid.js&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shiki&lt;/strong&gt; - syntax highlights every fenced code block with the &lt;code&gt;github-dark&lt;/code&gt; theme&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GFM&lt;/strong&gt; (built-in) - tables, task lists, strikethrough, and autolinks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To add any of these to your own posts, just write standard markdown - the plugins handle the rest at build time.&lt;/p&gt;
</content:encoded><category>devlog</category><category>markdown</category><category>showcase</category><category>reference</category><category>features</category><category>shiki</category><category>katex</category><author>Subhashis Hansda</author></item></channel></rss>