Based on the Astro blog template, this SEO-optimized personal blog website is built with Astro. It serves as the blog for Mert Şişmanoğlu, featuring blog posts written in Markdown and MDX.
- Framework: Astro
- Styling: Tailwind CSS
- Content: Markdown/MDX
- Language: TypeScript
- Package Manager: pnpm
- Code Quality: Biome
- Deployment: GitHub Pages
- Analytics: Cloudflare Web Analytics (users can opt-out)
Before you begin, ensure you have the following installed:
- Node.js: Version 24 (LTS) or higher
- pnpm: Package manager (recommended over npm/yarn)
You can check your Node.js version:
node --versionIf you need to install Node.js 24, you can use nvm:
nvm install 24
nvm use 24To install pnpm:
npm install -g pnpm@latest-10-
Clone the repository
git clone https://github.com/mertssmnoglu/mertssmnoglu.github.io.git cd mertssmnoglu.github.io -
Install dependencies
pnpm install
-
Start the development server
pnpm dev
-
Open your browser Navigate to
http://localhost:4321to see the website.
| Command | Description |
|---|---|
pnpm dev |
Start development server at localhost:4321 |
pnpm start |
Start the production server locally |
pnpm build |
Build the production site to ./dist/ |
pnpm preview |
Preview your build locally before deploying |
pnpm lint |
Run Biome linter to check code quality |
pnpm lint-fix |
Run Biome linter and fix issues automatically |
pnpm format |
Format code with Biome |
pnpm format-check |
Check code formatting without making changes |
pnpm prepare |
Set up Husky git hooks |
pnpm blog:new |
Create a new blog post interactively |
Blog posts are stored in src/content/blog/ and written in Markdown or MDX format.
Kickstart a new blog post with the pnpm blog:new command:
pnpm blog:new \
--title "My New Post" \
--description "A brief description of my new post"or
pnpm blog:newThe command will:
- Prompt for title and description (if not provided via CLI)
- Automatically assign today's date as publication date
- Generate a slug from the title
- Create a new
.mdfile insrc/content/blog/with pre-defined frontmatter - and table of contents
Alternatively, you can manually create a blog post:
- Create a new
.mdor.mdxfile insrc/content/blog/ - Add frontmatter at the top of the file:
---
title: "Your Post Title"
description: "A brief description of your post"
pubDate: "2025-01-15"
heroImage: "/blog-placeholder-1.jpg"
license: "CC-BY-SA-4.0"
categories: ["category-a", "category-b"]
---
Your content goes here...title: The title of your blog postdescription: A brief description for SEO and previewspubDate: Publication date in YYYY-MM-DD formatheroImage: Path to hero image (optional)updatedDate: Last updated date in YYYY-MM-DD format (optional)license: License key for the post (optional, defaults toCC-BY-SA-4.0).Available keys are defined in
src/data/licenses.ts:CC-BY-SA-4.0(default)CC-BY-4.0CC-BY-NC-4.0CC-BY-NC-SA-4.0CC0-1.0MIT
categories: Array of category strings for filtering (optional).Example:
['automation', 'cli']
- Fork the repository
- Create a feature branch:
git switch -c feature/my-feature - Commit your changes:
git commit -m 'Add some feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
Source code is licensed under the MIT License. See the LICENSE file for details.
Documentation and content are licensed under CC BY-SA 4.0 by default. See the LICENSE-CONTENT file for details, and refer to blog post frontmatter for specific licenses on individual posts.