Video failed to load

Astro + Firefly: The Best Combo for Personal Blog

Astro + Firefly: The Best Combo for Personal Blog
2021 words
10 minutes
Astro + Firefly: The Best Combo for Personal Blog
Disclaimer

Sebagian konten artikel ini “diisi dengan informasi dari AI (Claude & Gemini)”.

Appetizer#

Chit-chat#

Tepat tanggal 20 Juli 2026, ketika saya sedang “iseng” melihat-lihat template website Astro, saya “terkesiap” dengan sebuah tema yang eye-catching, Firefly. Besoknya, saya langsung mencobanya sendiri. Tidak memerlukan waktu yang lama setelah percobaan singkat itu sampai saya akhirnya memutuskan untuk migrasi blog.


— Flashback.

Sudah sangat lama rasanya sejak pertama kali saya memulai blogging. Tahun 2023 adalah kali pertama saya mencoba membuat blog menggunakan static site generator (SSG) bernama Hugo. Sebagai blogger pemula, tentu banyak pilihan platform untuk memulai menulis artikel. Tapi, diantara banyak opsi tersebut, saya memutuskan Hugo pada saat itu karena setidaknya 2 hal: praktis (simpel & cepat) serta punya banyak pilihan tema. Rasanya tentu senang sekali karena bisa punya “ruang personal” di internet untuk berbagi tulisan (secara anonim). Artikel yang banyak saya tulis di awal blogging adalah tentang hugo itu sendiri.

Berikut adalah artikel yang pertama saya tulis:

Hugo-ing (from Zero to Hero)
Beginner step to start creating static-site via using Hugo.
2023-10-07hugo#hugo

Selama perjalanan panjang itu, saya pun sudah mencoba berganti-ganti tema (template) sebagai cara untuk membuat pembaca (kalau ada yang baca, hehe) dan tentunya saya sendiri lebih betah berlama-lama di blog tersebut. Saya pernah pasang tema Papermod, Kayal, hingga yang terakhir adalah Blowfish. Menurut saya, Blowfish adalah tema paling modern sekaligus paling mudah digunakan untuk Hugo. Saya bilang “modern” bukan hanya tampilan dan fiturnya yang keren, tapi juga karena developer-nya, Nuna Curacao, membangun komunitas untuk para pengguna template-nya.

Kalau berkenan, sila kunjungi “pengguna Blowfish” di sini: https://blowfish.page/users/

— Flashback berakhir.


Setelah (hampir) tiga tahun berlalu, saya akhirnya “dipertemukan” dengan web framework dan tema “baru” yang sejujurnya, bisa memenuhi beberapa harapan fitur yang tidak bisa saya temukan di Hugo (setidaknya di 3 tema template yang pernah saya coba), yaitu Astro dan Firefly. Fitur-fitur yang saya sebutkan tadi tentu akan saya jelaskan nanti.

Disclaimer!

Perlu diketahui, saya bukan seorang programmer. Saya tidak punya riwayat pendidikan ataupun pengalaman berkarir sebagai pembuat software atau semacamnya. Saya hanya orang biasa yang “kebetulan” menggemari Linux dan menulis blog.

Jadi, selama 3 tahun kebelakang, tentu saya belajar banyak hal, terutama dalam dunia blogging ini. Mulai dari membedakan jenis-jenis website (static site & dynamic site/site with database), cara website bekerja, markdown syntax, server hosting, domain, dan masih banyak lagi.

Apakah itu semua spesial? Tergantung, untuk seorang software developer profesional, tentu apa yang saya lakukan hanyalah titik kecil. Tapi, untuk orang awam seperti saya, saya merasa sangat bersyukur sekali. 😄

About Astro#

Astro adalah web framework berbasis Javascript yang diciptakan untuk membuat website yang cepat untuk berbagai kebutuhan, seperti blog, portofolio, dan situs e-commerce.1 Klaimnya, Astro ini sudah digunakan oleh perusahaan-perusahaan besar di dunia, seperti Google, Microsoft, OpenAI, Proton, Porsche, The Guardian, Cloudflare, dan yang lain. Sebetulnya, banyak fitur-fitur Astro, tapi saya rasa saya tidak akan membahasnya di sini. Jadi, sila baca-baca dan cari tahu sendiri ya. Saya sediakan website official dan Github repo-nya di bawah.

Website Astro: https://astro.build

Astro Official Website
Astro Official Website

Official Github repository-nya dapat dilihat di sini:

withastro
/
astro
The web framework for content-driven websites. ⭐️ Star to support our work!
—
—
NOASSERTION
TypeScript

About Firefly#

Firefly adalah tema atau template static site yang dibuat dengan fondasi dari Astro. Well, sebetulnya, tidak 100% begitu, sih. Sebab, Firefly adalah tema yang dikembangkan dari “fork” tema yang sebelumnya sudah ada, yaitu Fuwari. Dibandingkan dengan Firefly, Fuwari terlihat lebih sederhana. Selain itu, saat artikel ini ditulis, pengembangannya juga sudah terlihat melambat. Mungkin itu juga alasan mengapa akhirnya Firefly muncul, sebagai “refresher” dari tema Fuwari ini.

Berikut adalah struktur project “Firefly”:2

Firefly/
├── src/
│ ├── config/ # Configuration files
│ ├── components/ # Components
│ ├── content/ # Content (posts, pages)
│ ├── layouts/ # Layout templates
│ ├── pages/ # Page routes
│ └── types/ # Type definitions
├── public/ # Static assets
└── astro.config.mjs # Astro configuration

Semua file konfigurasi Firefly ada di src/config:3

Config FileDescriptionDocs
siteConfig.tsSite basic configurationSite Config
dynamicConfig.tsMoments page configurationMoments
navBarConfig.tsNavbar configurationNavbar
sidebarConfig.tsSidebar layout configurationSidebar
profileConfig.tsProfile configurationProfile
backgroundWallpaper.tsBackground wallpaper configurationWallpaper
commentConfig.tsComment system configurationComment
musicConfig.tsMusic player configurationMusic Player
fontConfig.tsFont configurationFont
coverImageConfig.tsCover image configurationCover Image
expressiveCodeConfig.tsCode block configurationCode Block
effectsConfig.tsEffects configurationEffects
announcementConfig.tsAnnouncement configurationAnnouncement
footerConfig.tsFooter configurationFooter
licenseConfig.tsLicense configurationLicense
friendsConfig.tsFriends links configurationFriends
sponsorConfig.tsSponsor configurationSponsor
analyticsConfig.tsAnalytics configurationSite Config
galleryConfig.tsGallery configurationGallery
mermaidConfig.tsMermaid diagram configurationMermaid
plantumlConfig.tsPlantUML diagram configurationPlantUML
pioConfig.tsLive2D/Spine model configurationLive2D/Spine

Tema Firefly ini saya temukan ketika sedang scrolling tema di web Astro:
https://astro.build/themes/

Coba bandingkan sendiri homepage dari kedua website ini:

Berikut adalah repo Github Firefly dan Fuwari:

CuteLeaf
/
Firefly
🍀Firefly, fresh and aesthetic Astro blog theme template.
—
—
MIT
Astro
saicaca
/
fuwari
✨A static blog template built with Astro.
—
—
MIT
Astro

Halaman dokumentasi Firefly: https://docs-firefly.cuteleaf.cn/en/

NOTE

Jangan khawatir, meskipun website demo-nya menggunakan bahasa dan domain China, web dokumentasi Firefly menggunakan bahasa Inggris. Selain itu, jangan takut juga untuk berinteraksi dengan developer-nya, Xiaye di Issue Github-nya, terutama jika mengalami kendala, mengajukan fitur, atau melaporkan bug, menggunakan bahasa Inggris tidak mengapa, setidaknya itu yang saya alami.

Main Course#

Nah, di bagian “Main Course” ini, saya mau membahas beberapa fitur default dari template Firefly ini. Tentu nanti akan ada sedikit perbandingan juga dengan Hugo dan Blowfish, supaya lebih jelas alasan mengapa saya bermigrasi dari sana ke tema ini.

Beberapa fitur favorit saya itu misalnya:

1. Markdown & MDX#

Meskipun saya bisa menulis markdown, baik di Hugo (dan Blowfish sebagai temanya) maupun di Astro (dan Firefly sebagai temanya), tapi ada satu kelebihan di Astro, yaitu MDX. Apa itu MDX?

Kalau markdown adalah sebuah markup language4 yang ringan untuk membuat format dokumen (membuat judul, menebalkan huruf, memiringkan huruf, dst) menggunakan simbol teks biasa seperti hashtag (#), kurung siku ([]), dan lain sebagainya.5 Biasanya, file markdown digunakan di file README.md di github dan tentu saja sebagai file artikel di website-website statis seperti Hugo dan blog ini.

Maka, MDX adalah markdown yang dikombinasikan dengan JSX. Artinya, saya bisa menggunakan JSX di dalam konten artikel markdown saya. Tentu saja kedua format file tersebut berbeda (Markdown & MDX). Bahkan, bisa terlihat jelas bedanya hanya dari extension file-nya. Kalau file markdown biasa akan ber-ekstensi .md, misalnya linuxNixOS.md, sementara file MDX akan memiliki extensi .mdx, misalnya linuxNixOS.mdx.

About JSX

JSX adalah singkatan dari JavaScript XML, sebuah syntax extension yang memungkinkan kita menulis file berformat seperti HTML di dalam file JavaScript.6

Berikut adalah perbandingan side-by-side antara MD dan MDX:

AspekMarkdownMDX
DefinisiBahasa markup ringan untuk teks terformatSuperset Markdown yang mendukung komponen JSX
Ekstensi file.md.mdx
Sintaks dasarHeading, list, bold, italic, link, dll.Sama seperti Markdown, plus sintaks JSX
Komponen interaktifTidak didukungBisa menyisipkan komponen React langsung
Import/Export JSTidak bisaBisa (import, export)
Butuh build toolTidak, bisa dirender di mana sajaYa, butuh compiler (misal @mdx-js/mdx, Next.js, Astro, dll.)
KompleksitasSederhana, mudah dipelajariLebih kompleks, perlu paham JS/JSX
Penggunaan umumREADME, dokumentasi sederhana, blog statisDokumentasi teknis interaktif, blog dengan komponen dinamis
PortabilitasSangat portabel, dukungan luas di banyak platformTerbatas pada environment yang mendukung MDX
Contoh isi# Judul\n\nIni **teks tebal**.# Judul\n\n<CustomChart data={data} />
EkosistemDidukung hampir semua platform (GitHub, GitLab, dll.)Umum di ekosistem React/Next.js/Gatsby/Astro

Tabel di atas di-generate oleh Antrophic Claude.

Fitur ini sangat bermanfaat terutama jika ingin membuat “fitur tambahan” di artikel markdown kita. Misalnya, pada kasus saya, saya membuat embedded code untuk Chesscom, yang mana tidak bisa ditulis langsung di file markdown, sehingga saya perlu membuat komponennya terlebih dahulu (ChessCom.astro), baru kemudian di-import di dalam file MDX saya.

Berikut adalah contoh artikel saya yang menggunakan MDX:

Checkmate Pattern: Arabian Mate, Anastasia's Mate, Back Rank Mate, Boden's Mate
In this article, I would like to share 4 popular checkmate patterns, which are Arabian Mate, Anastasias Mate, Back Rank Mate, and Bodens Mate.
2025-05-10chess#chess#intro#checkmate#pattern#arabian mate#anastasia's mate#back rank mate#boden's mate
How to use MDX

Berikut adalah file ChessCom.astro-nya:

ChessCom.astro
---
interface Props {
id: string;
url: string;
}
const { id, url } = Astro.props;
---
<div style="text-align: center;">
<iframe
id={id}
allowtransparency="true"
frameborder="0"
style="width:100%;border:none;"
src={url}
></iframe>
</div>
<script define:vars={{ id }}>
window.addEventListener("message", (e) => {
if (e.data && e.data.id === id) {
const el = document.getElementById(id);
if (el) {
el.style.height = `${e.data.frameHeight + 30}px`;
}
}
});
</script>

Dan berikut adalah cara meng-import-nya artikel checkmate1.mdx tersebut:

checkmate1.md
import ChessCom from '../../../components/chess/ChessCom.astro';
<ChessCom id="13242082" url="//www.chess.com/emboard?id=13242082"/>

Hasilnya:

Sebetulnya, ada fitur “shortcode” di Hugo + Blowfish. Tapi, saya rasa, dengan MDX, semua menjadi lebih fleksibel dan lebih ringan.

2. Locked Article#

Jika saya ingin suatu artikel hanya dapat dibaca oleh saya sendiri (dan beberapa orang pilihan), saya bisa mengunci artikel tersebut dengan password. Dengan demikian, hanya saya (dan beberapa orang pilihan yang tahu password tersebut) sajalah yang dapat membaca atau membukanya.

Contohnya, berikut adalah artikel private saya:

Hugo Advanced
Hugo, but more advanced...
2023-10-09hugo#hugo#website#static-site

Hugo Advanced article
Hugo Advanced article

Dan fitur ini mudah sekali digunakan, sesimpel menambahkan sebuah frontmatter password di file markdown / MDX-nya. Misalnya,

---
title: "Article Title"
published: 2023-10-09T15:22:46+07:00
draft: false
description: "The description for this article."
image: "cover.png"
tags: ["website", "static", "astro", "firefly"]
category: "hugo"
password: "SUPERsecretP@ss123"
passwordHint: "Your most secure password"
---
WARNING

Tentu fitur ini tidak terlalu berguna jika “source code” artikelnya terbuka. Misalnya, jika artikel ini di-hosting di Github dan alamat Github-nya juga terlampir di website ini, maka kita bisa membaca isi artikelnya dengan langsung membuka source code-nya di Github tersebut. Jika ingin benar-benar private, pastikan source code-nya tidak disebar.

Dengan adanya fitur gallery ini, saya bisa memamerkan gambar-gambar favorit saya di internet melalui blog ini. Well, sebetulnya, di Blowfish juga ada fitur ini, tapi, yang membuat Firefly unggul adalah, sekali lagi, fitur “locked”-nya. Artinya, jika kita ingin mem-private foto-foto di sebuah gallery tertentu, kita bisa menambahkan password di pengaturan gallery-nya.

Sila berkunjung ke Gallery blog ini, saya punya 2 gallery di sana (walaupun dua-duanya di-private sih, hehe).

Gallery
Gallery

4. Widget#

Widget adalah “blok-blok” tambahan yang ada di sisi kiri dan kanan utama website. Jadi, bagian-bagian seperti “Profile”, “Annoucement”, “Site Statistics”, “Calendar”, dan lainnya itu adalah Widget.

Widget
Widget

Semua widget ini bisa diatur untuk muncul atau tidak. Saya sendiri menyembunyikan widget “Music”, padahal by default ada (tampil). Tapi, karena saya merasa fitur Music ini sudah ada di top bar, maka saya hide saja widget-nya.

Me-non-aktifkan-nya pun sesimpel mengganti parameter showInSidebar ke false di musicConfig.ts:

musicConfig.ts
import type { MusicPlayerConfig } from "../types/musicConfig";
export const musicPlayerConfig: MusicPlayerConfig = {
showInNavbar: true,
showInSidebar: false,
Custom Widget

Tidak semua widget yang ada di blog ini adalah asli bawaan Firefly. Saya sudah menambahkan 3 widget custom: QOTD (Quote of The Day), Greeting, dan Weather Forecast. Mungkin, tutorial membuat custom widget akan saya buatkan di artikel terpisah.

Custom widget
Custom widget

Apakah widget-widget ini penting? Well, sebetulnya, ini “selera” saja. Dulu, ketika masih pertama kali belajar soal website dan blogging, saya hanya mengincar tampilan yang bersih. Itulah kenapa saya memilih Papermod sebagai tema awal untuk blog Hugo saya dulu. Tapi, semakin kesini, saya “mendambakan” blog yang informatif dan “gak pelit”. Maksud “gak pelit” adalah, terkadang, ketika membuka sebuah blog atau website, halaman utama dan bahkan halaman artikelnya hanya berisi di bagian tengah saja, sementara samping kanan dan kirinya kosong. Nah, saya pikir, ruangan kosong itu akan lebih bagus jika bisa diisi oleh informasi-informasi ringan seperti widget-widget yang ada di Firefly ini.

5. Moments/Dynamic#

Dynamic itu seperti catatan kecil atau diary. Fitur ini sudah saya inginkan sejak mulai nge-blog dulu. Tapi, sejak saat itu, baru di tema Firefly ini saya menemukannya. Catatan ini saya perlukan sekadar untuk “memberikan update” tentang saya pribadi sebagai penulis blog kepada pengunjung blog. Sebab, terkadang, mungkin karena kesibukan dunia nyata, saya belum sempat membuat artikel baru. Tapi, dengan adanya fitur Dynamic ini, saya bisa berkabar.

Dynamic
Dynamic

Seperti terlihat pada tangakapan layar di atas, “Dynamic” memang punya halaman sendiri. Tapi, kita juga bisa memunculkannya sebagai Widget.

6. Friends#

Kita juga bisa berjejaring dengan para blogger di seluruh dunia. Caranya sesimpel bertukar informasi tautan website (blog) masing-masing. Jadi, ketika menambahkan alamat website orang lain, kita juga terlebih dahulu (seharusnya) sudah memberikan informasi alamat website kita ke dia.

Friends
Friends

Sejauh ini, saya baru berteman dengan para blogger China. Mereka, harus saya akui, keren-keren blognya. 🤩 Mereka adalah teman-teman online saya di blog ini. Kalau kalian mengunjungi blog mereka, saya bisa pastikan, di daftar “Friends”-nya, pasti ada blog saya ini juga.

7. Line Markers#

Fitur yang juga saya suka dengan tema ini adalah semacam highlight untuk baris dari sebuah codeblock. Contohnya seperti ini:7

line-markers.js
function demo() {
console.log('此行标记为已删除')
// 此行和下一行标记为已插入
console.log('这是第二个插入行')
return '此行使用中性默认标记类型'
}

8. Settings#

Sebagai orang yang mudah jenuh, saya sangat mengapresiasi adanya “Website Settings” yang praktis seperti ini. Di sini, saya bisa mengganti aksen warna blog saya, mengatur background Wallpaper, bahkan hingga menambahkan effect bunga sakura seperti pada gambar berikut:

Settings
Settings

Berikut adalah 3 dari 4 mode background Wallpaper:

Banner
Banner
Overlay
Overlay
Fullscreen
Fullscreen

Mode ke-4 apa? Mode ke-4 adalah tanpa Wallpaper. Jadi, kalau kalian ingin tampilan blognya lebih sederhana, bisa pilih mode ke-4 tersebut.

Dessert#

Beberapa fitur lain juga tentu ada. Tapi, tidak saya bahas karena saya pikir cukup standard (setidaknya berdasarkan pengamatan subjektif saya) di banyak blog. Misalnya seperti fitur “Light & Dark Mode” dan fitur “Komentar”.

Terlepas dari itu semua, karena Firefly masih aktif di-maintain, saya yakin akan ada selalu update-update fitur baru yang pastinya akan membuat template ini menjadi makin menarik.

Sampai sini, saya merasa sangat bersyukur sekali karena sudah bisa bertemu dengan “template blog impian” yang saya cari-cari selama ini. Firefly selain bisa memenuhi semua ekspektasi saya pribadi, juga bisa memberikan tampilan yang estetik. Mari kita lihat 3 tahun ke depan, apakah saya betah dengan tema Firefly ini, atau mungkin saya akan berubah lagi dan berpindah haluan.

Terima kasih sudah membaca.
Sampai jumpa di artikel saya yang lain!

Footnotes#

  1. https://astro.build/ ↩

  2. https://docs-firefly.cuteleaf.cn/en/guide/getting-started.html#project-structure ↩

  3. https://docs-firefly.cuteleaf.cn/en/guide/getting-started.html#configuration-overview ↩

  4. https://en.wikipedia.org/wiki/Markup_language ↩

  5. https://en.wikipedia.org/wiki/Markdown ↩

  6. https://medium.com/@urza.p/jsx-deep-dive-what-it-really-is-and-how-it-works-c1b32ef2e682 ↩

  7. https://firefly.cuteleaf.cn/posts/code-examples/ ↩

Support & Share

If this article helped you, please share or support!

Sponsor
Astro + Firefly: The Best Combo for Personal Blog
https://secretblog.my.id/posts/tech/firefly/
Author
Wildan
Published at
2026-08-22

Comments

Profile Image of the Author
Wildan
Welcome! Wildan-desu.
Greetings
You've found out my secret blog?! Welcome to my blog, then! Enjoy exploring 😄
Categories
Tags
Latest Moments
Site Statistics
Posts
114
Categories
93
Tags
329
Total Words
607,415
Running Days
0 days
Last Activity
0 days ago
Site Info
Build Platform
GitHub Actions
Blog Version
Firefly v6.16.8
License
CC BY-NC-SA 4.0
Quote of The Day ✨
"Start where you are. Use what you have. Do what you can."
—— Arthur Ashe
Table of Contents