Minimal blog starter with AstroJS
$ bun create cloudflare@latest
╭ Create an application with Cloudflare Step 1 of 3
│
├ In which directory do you want to create your application?
│ dir ./my-blog
│
├ What would you like to start with?
│ category Template from a GitHub repo
│
├ What's the url of git repo containing the template you'd like to use?
│ repository msisdev/giban
│
├ Cloning template from: msisdev/giban
│
...
$ bun create astro --template msisdev/giban
- Remove cloudflare adapter
// astro.config.mjs export default defineConfig({ // ↓ Remove this block ↓ adapter: cloudflare({ platformProxy: { enabled: true } }), })
$ bun rm @cloudflare/workers-types
- Remove/edit cloudflare specific codes
- Search codes by
CLOUDFLARE_ONLY
keyword - Edit codes
If you get error Cannot find module 'astro:content' or its corresponding type declarations
$ bunx astro sync
giban (Korean, 기반): a foundation, or the foundation of a thing
giban is a minimal, fully functional blog. It has minimal style and CSS-in-JS boilerplates.
Start building your own style from this theme. Or swap color set and ready to go.
- Bloggers: swap color set and ready to go
- CSS Beginners: launch blog and develop style progressively
- CSS Pros: save time by skipping tokens & scripts
- Developers: just explore patterns and implementations in AstroJS
Common blog patterns
- Tags
- Table of content
- Reading time
- Search by pagefind
- Image optimization by Cloudflare Images
- Dark mode switch
Styling kit
- Instant color swap (read the github guide)
- PandaCSS boilerplates
- Icon by Iconify
I didn't add comment system because it is not minimal and easy to be added. Checkout discus or utterances.
Checkout either giscus or utterances.
AstroJS is a new contender of FrontEnd framework.
- Meta-framework
- Built-in SSG support
- Best performance by Server island
MDX is like JSX.
import Callout from '../components/Callout.astro'
I'm normal markdown line.
<Callout type="check">
I'm custom component
</Callout>
While Markdoc is like expressive markdown.
I'm normal markdown line.
{% callout type="check" %}
I'm custom component
{% /callout %}
But you should aware that @astrojs/markdoc integration is in experimental stage.
PandaCSS is a zero runtime CSS-in-JS that generates static css files at build stage.
PandaCSS uses helper function to write styles fast.
Writing styles in PandaCSS is like:
---
// Footer.astro
import urls from "@/config/urls"
import { Icon } from "astro-icon/components"
import { css } from "styled-system/css"
const root = css({
padding: 4,
})
const root__line1 = css({
display: "flex",
alignItems: "center",
gap: 4,
"& a": {
display: "flex",
alignItems: "center",
gap: 2,
},
})
---
<footer class={root}>
<p class={root__line1}>
©2025 by msisdev All rights reserved.
<a href={urls.github} aria-label="Github repository">
<Icon name="iconoir:github" /> Github
</a>
</p>
</footer>
You may find Obsidian Digital Garden is more useful, if you like Obsidian.
But you don't need Digital Garden if-
- you want to keep things simple.
- you don't need Obsidian.
- With help of Github Mobile app, you can create/edit files anywhere.
You can change colors instantly by using Realtime Colors.
Please follow this guide.
This project is using Astro Icon and Iconify.
Currently iconoir is installed. To replace this, follow this guide.
- When you encounter compile error on
astro:content
- Astro markdoc for blog
- Astro markdoc configs
- Cloudflare Images troubleshoot
- Demo image
- reading time
- astro-pagefind
- how to use pagefind
- Automate color change
- Iconify usage