Get the FREE Ultimate OpenClaw Setup Guide β†’
d

tulisai

Scanned

@dwirx

npx machina-cli add skill @dwirx/tulisai --openclaw
Files (1)
SKILL.md
22.8 KB

BangunAI Blog Manager (Digital Garden + Content Workflow)

Homepage: React 18 + Vite + MDX + shadcn/ui
Blog Root: /home/hades/BangunAI-Blog
Content Root: /home/hades/BangunAI-Blog/src/content
Tech Stack: TypeScript, Tailwind CSS, Mermaid 11, KaTeX, Shiki

Skill ini menggabungkan:

  • workflow custom untuk blog content (daily, fetch style, universal writer, logging, smart read)
  • MDX authoring untuk React-based digital garden
  • Obsidian-like features (callouts, mermaid diagrams, LaTeX math, wikilinks, backlinks)
  • Auto-import system via import.meta.glob

🌿 BangunAI Blog Fundamentals

Blog ini adalah Digital Garden & Knowledge Base dengan fitur terinspirasi dari Obsidian.

Struktur Proyek

/home/hades/BangunAI-Blog/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ content/
β”‚   β”‚   β”œβ”€β”€ writing/       # Blog posts (notes, essays)
β”‚   β”‚   β”œβ”€β”€ articles/      # Technical articles, tutorials
β”‚   β”‚   β”œβ”€β”€ read/          # Reading notes, link curation
β”‚   β”‚   β”œβ”€β”€ daily/         # Daily notes (tasks, logs)
β”‚   β”‚   β”œβ”€β”€ about.mdx      # About page (single file)
β”‚   β”‚   β”œβ”€β”€ now.mdx        # Now page (current activities)
β”‚   β”‚   └── index.ts       # Auto-import loader
β”‚   β”œβ”€β”€ components/        # React components (40+ shadcn/ui)
β”‚   β”‚   β”œβ”€β”€ Callout.tsx    # 14 tipe callouts
β”‚   β”‚   β”œβ”€β”€ MermaidDiagram.tsx  # Mermaid renderer
β”‚   β”‚   β”œβ”€β”€ WikiLink.tsx   # Internal linking
β”‚   β”‚   β”œβ”€β”€ Backlinks.tsx  # Auto backlinks
β”‚   β”‚   β”œβ”€β”€ GraphView.tsx  # Knowledge graph
β”‚   β”‚   └── ui/            # shadcn/ui components
β”‚   β”œβ”€β”€ pages/             # Route pages
β”‚   β”œβ”€β”€ lib/               # Utilities
β”‚   β”‚   β”œβ”€β”€ date.ts        # Date formatting
β”‚   β”‚   └── utils.ts       # Class utilities
β”‚   └── data/
β”‚       β”œβ”€β”€ posts.ts       # Helper functions
β”‚       └── types.ts       # TypeScript types
β”œβ”€β”€ public/                # Static assets
β”œβ”€β”€ skill/                 # Agent skills (this!)
└── package.json           # Dependencies

Content Types

TypeDescriptionLocationFeatures
WritingPersonal notes, essayssrc/content/writing/Filter by type (note/essay), category, tags
ArticlesTechnical tutorials, guidessrc/content/articles/Grouped by year
ReadCurated readings with notessrc/content/read/Source URL, snippet, tags
DailyDaily notes, tasks, logssrc/content/daily/Rollover tasks, timestamps
AboutAbout page (MDX)src/content/about.mdxSingle static page
NowCurrent activitiessrc/content/now.mdxUpdated regularly

Auto-Import System

File src/content/index.ts auto-detect semua .mdx files via import.meta.glob:

// NO MANUAL REGISTRATION NEEDED!
const writingModules = import.meta.glob("./writing/*.mdx", { eager: true });
const articleModules = import.meta.glob("./articles/*.mdx", { eager: true });
const readModules = import.meta.glob("./read/*.mdx", { eager: true });

Benefits: Create file β†’ Auto-detected β†’ Available immediately


πŸ“ Frontmatter Formats

Format A: Standard Posts (writing, articles, daily)

---
title: "Judul Artikel Yang Menarik"
slug: judul-artikel-yang-menarik
summary: "Ringkasan singkat 1-2 kalimat yang compelling."
type: note                # note | essay | article
category: Tech            # Tech | Refleksi | Produktivitas | Linux | Coding | Life
tags: [react, typescript, tutorial]
date: "2026-02-11T14:30:00"
readingTime: 5
featured: false           # (optional) untuk featured posts
---

Required Fields:

  • title β€” Judul artikel (string)
  • slug β€” URL-friendly slug (kebab-case)
  • summary β€” Deskripsi singkat, compelling (1-2 kalimat)
  • type β€” Jenis konten:
    • note β€” Catatan pendek, quick takes
    • essay β€” Tulisan mendalam, eksploratif
    • article β€” Tutorial, panduan terstruktur
  • category β€” Kategori utama (pilih salah satu):
    • Tech β€” Teknologi, programming, tools
    • Refleksi β€” Personal reflection, thoughts
    • Produktivitas β€” Productivity, workflow
    • Linux β€” Linux, terminal, sysadmin
    • Coding β€” Coding practices, patterns
    • Life β€” Lifestyle, experiences
  • tags β€” Array tags (lowercase, kebab-case)
  • date β€” ISO timestamp dengan jam (YYYY-MM-DDTHH:mm:ss)
  • readingTime β€” Estimasi menit baca (~200 kata/menit)

Optional Fields:

  • featured β€” Boolean, untuk featured posts di homepage

Format B: Read Items (read/)

---
title: "Judul Artikel/Bacaan"
slug: judul-artikel-bacaan
snippet: "Quote atau snippet menarik dari artikel (1-2 kalimat)."
source: "nama-situs.com"
url: "https://link-ke-artikel.com"
tags: [programming, career]
date: "2026-02-11T18:00:00"
---

## Catatan Personal (Optional)

Komentar atau catatan tentang bacaan ini...

Required Fields:

  • title β€” Judul artikel (string)
  • slug β€” URL-friendly slug (kebab-case)
  • snippet β€” Quote/excerpt menarik dari artikel
  • source β€” Domain sumber (e.g., github.com, dev.to)
  • url β€” Link lengkap ke artikel asli
  • tags β€” Array tags (lowercase)
  • date β€” ISO timestamp

Body Content: Optional, untuk catatan personal

Format C: Special Pages (about, now)

---
title: "About"  # atau "Now"
---

Content langsung di sini...
Mendukung semua fitur MDX (callouts, highlight, mermaid, dll).

Minimal frontmatter: Hanya title


🧩 MDX Components Available

1. Callouts (14 Types)

<Callout type="info" title="Judul Callout">
Isi callout di sini.
</Callout>

Available types:

  • info β€” Informasi umum (biru)
  • tip β€” Tips & tricks (hijau)
  • warning β€” Peringatan (kuning)
  • danger β€” Danger/error (merah)
  • success β€” Success message (hijau cerah)
  • note β€” Catatan (abu-abu)
  • example β€” Contoh (ungu)
  • bug β€” Bug report (merah)
  • question β€” Pertanyaan (biru muda)
  • abstract β€” Abstract/summary (indigo)
  • important β€” Penting (orange)
  • caution β€” Hati-hati (kuning gelap)
  • quote β€” Kutipan (krem)
  • cite β€” Sitasi (krem gelap)

Obsidian Blockquote Syntax:

> [!info] Judul Callout
> Isi callout menggunakan sintaks Obsidian.

2. Mermaid Diagrams

```mermaid
graph TD
    A[Start] --> B{Decision}
    B -->|Yes| C[Action]
    B -->|No| D[End]
```

Supported diagrams (Mermaid v11):

  • graph / flowchart β€” Flowchart
  • sequenceDiagram β€” Sequence diagram
  • pie β€” Pie chart
  • classDiagram β€” UML class diagram
  • stateDiagram-v2 β€” UML state diagram
  • erDiagram β€” Entity relationship diagram
  • gantt β€” Gantt chart
  • mindmap β€” Mind map
  • timeline β€” Timeline

Features:

  • Auto-render dengan tema terang/gelap
  • Unique ID per diagram (no conflicts)
  • Responsive container

3. LaTeX Math (KaTeX)

Inline: $E = mc^2$

Block:
$$
\int_0^\infty e^{-x} dx = 1
$$

Powered by KaTeX 0.16 β€” Fast math rendering

4. WikiLinks (Internal Links)

<WikiLink to="slug-artikel" label="Teks yang Ditampilkan" />

Features:

  • Link mati (slug not found) β†’ strikethrough otomatis
  • Auto-deteksi dari semua posts

5. Highlight

<Highlight>teks yang di-highlight</Highlight>

Atau gunakan HTML tag:
<mark>teks yang di-highlight</mark>

6. YouTube Embed

<YouTube url="https://youtube.com/watch?v=VIDEO_ID" title="Judul Video" />

Features:

  • Responsive iframe
  • Auto-aspect ratio 16:9

7. Code Blocks (Shiki Syntax Highlighting)

```typescript
function hello(name: string): string {
  return `Hello, ${name}!`;
}
```

Features:

  • Powered by Shiki with github-dark-dimmed theme
  • Copy button included
  • Multi-language support (TypeScript, Python, Bash, dll)

8. GFM (GitHub Flavored Markdown)

Tables:

| Column 1 | Column 2 |
|----------|----------|
| Value A  | Value B  |

Task Lists:

- [x] Completed task
- [ ] Uncompleted task

Strikethrough:

~~deleted text~~

9. Backlinks

Auto-generated di setiap artikel detail. Menampilkan artikel lain yang me-link ke artikel ini.

10. Graph View

Interactive force-directed graph menampilkan koneksi antar konten.

11. Table of Contents (TOC)

  • Sticky di desktop (right sidebar)
  • Collapsible bottom bar di mobile
  • Active heading tracking
  • Progress bar

🎨 Design System

Color Tokens (HSL-based)

Dark Mode (Default):

  • --background β€” Navy gelap (#1A1A2E)
  • --foreground β€” Cream (#F5E6D3)
  • --primary β€” Gold/amber (aksen utama)
  • --accent β€” Warm gold (hover states)
  • --card β€” Navy lebih terang

Light Mode:

  • --background β€” Cream hangat
  • --foreground β€” Navy gelap
  • --primary β€” Amber gelap
  • --card β€” Cream lebih gelap

Usage:

// βœ… Gunakan semantic tokens
<div className="bg-background text-foreground">
  <button className="bg-primary text-primary-foreground">
    Klik
  </button>
</div>

// ❌ Jangan hardcode warna
<div className="bg-[#1A1A2E] text-[#F5E6D3]">

Font Stack

FontUsage
Space GroteskHeadings & navigation
Source Serif 4Body text artikel (serif)
InterUI elements & labels
JetBrains MonoCode blocks & inline code

Glass Morphism

<div className="glass glass-hover rounded-xl p-6">
  Konten dengan efek kaca transparan
</div>

πŸ”§ Workflows

1) daily (Smart Daily Note)

Create daily note dengan auto-rollover unchecked tasks dari kemarin.

BLOG_ROOT="/home/hades/BangunAI-Blog"
DAILY_DIR="$BLOG_ROOT/src/content/daily"
mkdir -p "$DAILY_DIR"

TODAY=$(date +%Y-%m-%d)
FILE="$DAILY_DIR/$TODAY.mdx"
LAST_FILE=$(find "$DAILY_DIR" -name "????-??-??.mdx" ! -name "$TODAY.mdx" 2>/dev/null | sort | tail -n 1)

if [ ! -f "$FILE" ]; then
  cat > "$FILE" <<EOF
---
title: "Daily Note: $TODAY"
date: "$TODAY"
type: daily
tags: [daily]
---

# Daily Note: $TODAY

EOF

  if [ -n "$LAST_FILE" ]; then
    PENDING=$(grep "\- \[ \]" "$LAST_FILE" || true)
    if [ -n "$PENDING" ]; then
      echo "## Rollover Tasks" >> "$FILE"
      echo "" >> "$FILE"
      echo "$PENDING" >> "$FILE"
      echo "" >> "$FILE"
    fi
  fi
  
  cat >> "$FILE" <<EOF
## Tasks Today

- [ ] 

## Log

EOF
  echo "βœ… Created: $FILE"
else
  echo "πŸ“‚ Exists: $FILE"
fi

2) fetch_last (Style Reference)

Fetch latest file untuk style reference. Supports all categories including special pages.

# Input: CATEGORY (writing, articles, read, daily, about, now)
BLOG_ROOT="/home/hades/BangunAI-Blog"
case "$CATEGORY" in
  "daily") DIR="$BLOG_ROOT/src/content/daily" ;;
  "writing") DIR="$BLOG_ROOT/src/content/writing" ;;
  "articles") DIR="$BLOG_ROOT/src/content/articles" ;;
  "read") DIR="$BLOG_ROOT/src/content/read" ;;
  "about") 
    cat "$BLOG_ROOT/src/content/about.mdx"
    exit 0
    ;;
  "now") 
    cat "$BLOG_ROOT/src/content/now.mdx"
    exit 0
    ;;
  *) echo "❌ Unknown category"; exit 1 ;;
esac
LAST_FILE=$(ls -t "$DIR"/*.mdx 2>/dev/null | head -n 1)
if [ -f "$LAST_FILE" ]; then
  echo "πŸ“„ REFERENSI GAYA ($LAST_FILE):"
  head -n 50 "$LAST_FILE"
else
  echo "❌ Belum ada file di $CATEGORY"
fi

3) write (Universal Writer + BangunAI Style)

Write new content dengan frontmatter lengkap.

For Writing/Articles:

CATEGORY="writing"  # atau "articles"
FILENAME="judul-artikel.mdx"
BLOG_ROOT="/home/hades/BangunAI-Blog"

cat > "$BLOG_ROOT/src/content/$CATEGORY/$FILENAME" <<'EOF'
---
title: "Judul Artikel Baru"
slug: judul-artikel-baru
summary: "Ringkasan singkat tentang artikel ini yang menarik perhatian pembaca."
type: note
category: Tech
tags: [react, typescript, tutorial]
date: "2026-02-12T15:00:00"
readingTime: 5
---

## Introduction

Paragraf pembuka yang compelling dan menarik perhatian.

<Callout type="tip" title="Pro Tip">
Gunakan callouts untuk highlight informasi penting!
</Callout>

## Section 1

### Subsection A

Content here dengan **bold** dan *italic*.

```typescript
// Example code dengan syntax highlighting
function example(): string {
  return "Hello World";
}

Mermaid Example

graph LR
    A[Input] --> B[Process]
    B --> C[Output]

Math Example

Inline math: $x^2 + y^2 = z^2$

Block math: $$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $$

Internal Link

Check out <WikiLink to="other-article" label="this related article" />.

Conclusion

Kesimpulan yang solid dan actionable. EOF

echo "βœ… Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME"


**For Read Items:**
```bash
CATEGORY="read"
FILENAME="interesting-article.mdx"
BLOG_ROOT="/home/hades/BangunAI-Blog"

cat > "$BLOG_ROOT/src/content/$CATEGORY/$FILENAME" <<'EOF'
---
title: "Interesting Article Title"
slug: interesting-article
snippet: "A compelling quote or snippet from the article that captures its essence."
source: "website.com"
url: "https://website.com/article"
tags: [tech, programming, career]
date: "2026-02-12T15:00:00"
---

## Key Takeaways

- Point 1: Important insight
- Point 2: Actionable advice
- Point 3: Thought-provoking idea

## Personal Notes

My thoughts and commentary about this article...

<Callout type="note">
This reminds me of a similar concept in...
</Callout>
EOF

echo "βœ… Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME"

4) log (Append Log)

Append timestamped log to today's daily note.

# Input: CONTENT="..."
TODAY=$(date +%Y-%m-%d)
FILE="/home/hades/BangunAI-Blog/src/content/daily/$TODAY.mdx"
if [ ! -f "$FILE" ]; then 
  echo "❌ Run 'daily' workflow first!"
  exit 1
fi
echo "- $(date +%H:%M) $CONTENT" >> "$FILE"
echo "βœ… Logged to: $FILE"

5) read (Smart Read)

Smart search content by keyword.

# Input: FILE="..."
find "/home/hades/BangunAI-Blog/src/content" -name "*$FILE*.mdx" | head -n 1 | xargs -r cat

6) update_about (Update About Page)

Update about.mdx with MDX content.

# Input: CONTENT="..."
FILE="/home/hades/BangunAI-Blog/src/content/about.mdx"
cat > "$FILE" <<EOF
---
title: "About"
---

$CONTENT
EOF
echo "βœ… Updated: $FILE"

7) update_now (Update Now Page)

Update now.mdx with current activities.

# Input: CONTENT="..."
FILE="/home/hades/BangunAI-Blog/src/content/now.mdx"
CURRENT_DATE=$(date +"%B %Y")
cat > "$FILE" <<EOF
---
title: "Now"
---

## Apa yang Sedang Saya Kerjakan

*Terakhir diperbarui: $CURRENT_DATE*

Halaman ini terinspirasi dari [nownownow.com](https://nownownow.com) β€” tempat saya mencatat apa yang sedang saya fokuskan saat ini.

---

$CONTENT

---

> *Halaman ini adalah snapshot dari kehidupan saya saat ini. Bukan resume, bukan portofolio β€” hanya update jujur tentang apa yang sedang saya kerjakan.*
EOF
echo "βœ… Updated: $FILE"

8) verify_index (Verify Content)

Verify content auto-import statistics.

BLOG_ROOT="/home/hades/BangunAI-Blog"
echo "πŸ“Š Content Statistics:"
echo ""
echo "Writing posts: $(ls -1 "$BLOG_ROOT/src/content/writing"/*.mdx 2>/dev/null | wc -l)"
echo "Articles: $(ls -1 "$BLOG_ROOT/src/content/articles"/*.mdx 2>/dev/null | wc -l)"
echo "Read items: $(ls -1 "$BLOG_ROOT/src/content/read"/*.mdx 2>/dev/null | wc -l)"
echo "Daily notes: $(ls -1 "$BLOG_ROOT/src/content/daily"/*.mdx 2>/dev/null | wc -l)"
echo ""
echo "Special files:"
echo "- about.mdx: $(test -f "$BLOG_ROOT/src/content/about.mdx" && echo "βœ…" || echo "❌")"
echo "- now.mdx: $(test -f "$BLOG_ROOT/src/content/now.mdx" && echo "βœ…" || echo "❌")"
echo "- index.ts: $(test -f "$BLOG_ROOT/src/content/index.ts" && echo "βœ…" || echo "❌")"

πŸ“‹ Content Category Guidelines

CategoryPathUse CaseType OptionsExamples
writingsrc/content/writing/Personal notes, essaysnote, essayReflections, quick takes, deep thoughts
articlessrc/content/articles/Technical tutorials, guidesarticleHow-to guides, technical deep dives
readsrc/content/read/Reading notes, link curationN/A (special format)Curated articles, bookmarks
dailysrc/content/daily/Daily notes, tasks, logsdailyTask tracking, daily logs
aboutsrc/content/about.mdxAbout page (static)N/APersonal bio, site info
nowsrc/content/now.mdxCurrent activitiesN/AWhat I'm doing now

Category Values

Choose wisely untuk category field:

  • Tech β€” Teknologi, programming, tools, frameworks
  • Refleksi β€” Personal reflection, thoughts, philosophy
  • Produktivitas β€” Productivity tips, workflow, GTD
  • Linux β€” Linux, terminal, system administration
  • Coding β€” Coding practices, patterns, best practices
  • Life β€” Lifestyle, personal experiences, stories

🎯 Best Practices

1. Frontmatter Consistency

DO:

title: "Belajar React Hooks di 2026"
slug: belajar-react-hooks-2026
type: note
category: Tech
tags: [react, hooks, javascript]
date: "2026-02-12T15:30:00"

DON'T:

title: belajar-react-hooks    # Missing quotes
slug: Belajar React Hooks     # Not kebab-case
type: blog                     # Invalid type
category: technology           # Typo/wrong value
tags: React, Hooks             # Not array format
date: "2026-02-12"            # Missing time

2. File Naming

DO:

belajar-react-hooks-2026.mdx
setup-neovim-lua.mdx
refleksi-tahun-2025.mdx

DON'T:

Blog Post 1.mdx              # Spaces, not descriptive
temp.mdx                     # Non-descriptive
NEW_POST.mdx                 # Uppercase, underscore

3. Content Structure

Recommended structure:

---
frontmatter here
---

## Introduction (H2)
Brief intro, hook the reader.

<Callout type="info">
Context or prerequisite info.
</Callout>

## Main Section 1 (H2)

### Subsection A (H3)
Content...

### Subsection B (H3)
Content...

## Main Section 2 (H2)

### Examples (H3)
Code or examples...

## Conclusion (H2)
Summary and takeaways.

4. Using MDX Components

DO:

<Callout type="tip" title="Pro Tip">
Use semantic components for better UX.
</Callout>

<WikiLink to="related-article" label="Read more about this" />

DON'T:

<div style="background: yellow; padding: 10px;">
Hardcoded styling instead of using Callout
</div>

<a href="/artikel/related-article">Read more</a>
<!-- Should use WikiLink instead -->

5. Date & Time Format

ISO timestamp with time:

date: "2026-02-12T15:30:00"  # YYYY-MM-DDTHH:mm:ss

Displayed as:

  • Detail page: 11 Februari 2026, 14:30
  • Card list: 11 Feb Β· 14:30

6. Reading Time Estimation

# Count words (exclude frontmatter)
WORD_COUNT=$(tail -n +$(grep -n "^---$" file.mdx | tail -1 | cut -d: -f1) file.mdx | wc -w)

# Calculate reading time (200 words/minute)
READING_TIME=$(( (WORD_COUNT + 199) / 200 ))

# Add to frontmatter
readingTime: $READING_TIME

7. Tags Best Practices

  • Use lowercase
  • Use kebab-case for multi-word tags
  • Keep tags consistent across posts
  • Prefer specific over generic tags

Good tags:

tags: [react-hooks, typescript, state-management]

Bad tags:

tags: [React Hooks, programming, stuff]

πŸš€ Development Workflow

Local Development

# Start dev server
cd /home/hades/BangunAI-Blog
bun run dev
# Open http://localhost:8080

Create New Content

  1. Fetch style reference:

    CATEGORY="writing" bash fetch_last.sh
    
  2. Create new file:

    cat > src/content/writing/new-post.mdx <<'EOF'
    ---
    title: "New Post"
    slug: new-post
    summary: "Brief summary"
    type: note
    category: Tech
    tags: [tag1, tag2]
    date: "$(date -Iseconds)"
    readingTime: 5
    ---
    
    Content here...
    EOF
    
  3. Verify auto-import:

    # File otomatis terdeteksi via import.meta.glob
    # Check di browser: http://localhost:8080/writing
    
  4. Build & deploy:

    bun run build
    bun run preview
    

Git Workflow

# Add new content
git add src/content/writing/new-post.mdx
git commit -m "Add: new blog post about X"

# Rename (preserve history)
git mv src/content/writing/old.mdx src/content/writing/new.mdx
git commit -m "Rename: old post to new name"

# Delete (tracked)
git rm src/content/writing/unwanted.mdx
git commit -m "Remove: unwanted post"

# Push
git push origin main

πŸ” Troubleshooting

Issue: Content not showing

Check:

  1. Valid frontmatter? (all required fields present)
  2. Valid MDX syntax? (no unclosed tags)
  3. File in correct directory?
  4. Dev server restarted?

Issue: Mermaid not rendering

Check:

  1. Valid Mermaid syntax?
  2. Diagram type supported?
  3. Check browser console for errors

Issue: WikiLink shows strikethrough

Reason: Target slug not found

Fix:

  1. Verify target slug exists
  2. Check spelling
  3. Ensure target file has valid frontmatter

Issue: LaTeX not rendering

Check:

  1. Valid LaTeX syntax?
  2. Escaped special characters?
  3. Using $ or $$ delimiters correctly?

πŸ“š Quick Reference

Frontmatter Cheatsheet

Writing/Articles:

---
title: "Title"
slug: slug
summary: "Summary"
type: note|essay|article
category: Tech|Refleksi|Produktivitas|Linux|Coding|Life
tags: [tag1, tag2]
date: "YYYY-MM-DDTHH:mm:ss"
readingTime: number
---

Read:

---
title: "Title"
slug: slug
snippet: "Snippet"
source: "domain.com"
url: "https://..."
tags: [tag1, tag2]
date: "YYYY-MM-DDTHH:mm:ss"
---

Special Pages:

---
title: "About|Now"
---

MDX Components Cheatsheet

ComponentUsage
Callout<Callout type="info" title="...">...</Callout>
Mermaid```mermaid ... ```
LaTeX$...$ or $$...$$
WikiLink<WikiLink to="slug" label="..." />
Highlight<Highlight>...</Highlight>
YouTube<YouTube url="..." title="..." />

File Locations Cheatsheet

TypeLocation
Writingsrc/content/writing/*.mdx
Articlessrc/content/articles/*.mdx
Readsrc/content/read/*.mdx
Dailysrc/content/daily/*.mdx
Aboutsrc/content/about.mdx
Nowsrc/content/now.mdx
Indexsrc/content/index.ts

πŸŽ‰ Summary

Skill ini fully integrated dengan BangunAI Blog:

  • βœ… 8 workflows ready to use
  • βœ… 3 frontmatter formats supported
  • βœ… Complete MDX components reference
  • βœ… Obsidian-like features documented
  • βœ… Design system guidelines
  • βœ… Best practices & troubleshooting
  • βœ… Auto-import via import.meta.glob
  • βœ… Git-based operations
  • βœ… Production-ready

Homepage: https://github.com/dwirx/BangunAI-Blog

Source

git clone https://clawhub.ai/dwirx/tulisaiView on GitHub

Overview

tulisai is BangunAI’s blog management skill that automates blog workflows, helps organize BangunAI Blog content, and enables MDX authoring with BangunAI conventions. It brings Obsidian-like features such as callouts, mermaid diagrams, LaTeX math, wikilinks, backlinks, and a graph view into a React-based digital garden. It uses an auto-import system to detect MDX files across content folders, delivering instant availability.

How This Skill Works

Technically, tulisai relies on a structured project layout and an Auto-Import System. Content is authored in MDX and organized under a root like /home/hades/BangunAI-Blog with folders for writing, articles, read, daily, plus about.mdx and now.mdx. It exposes UI components (Callout.tsx, MermaidDiagram.tsx, WikiLink.tsx, Backlinks.tsx, GraphView.tsx) to render Obsidian-like features and to render the knowledge graph, while import.meta.glob in src/content/index.ts auto-detects MDX files, making new content available instantly.

When to Use It

  • Kick off a BangunAI Blog project by establishing the content roots and auto-import setup
  • Author MDX posts with BangunAI conventions and Obsidian-like features such as callouts and wikilinks
  • Automate daily notes, logs, and task rollover within the daily folder workflow
  • Create and navigate internal links, backlinks, and knowledge graphs across posts
  • Automatically import new content as soon as files are added, without manual registration

Quick Start

  1. Step 1: Structure your content under /home/hades/BangunAI-Blog/src/content with folders writing, articles, read, daily plus about.mdx and now.mdx
  2. Step 2: Enable auto-import by using the import.meta.glob pattern in src/content/index.ts to eagerly load MDX modules
  3. Step 3: Create an MDX post following BangunAI conventions and preview with Callout, MermaidDiagram, WikiLink, and Backlinks components

Best Practices

  • Use clear frontmatter fields for each post: title, slug, summary, type, category, tags, date, and readingTime
  • Organize content into Writing, Articles, Read, Daily folders and maintain About and Now pages
  • Leverage Obsidian-like features in MDX (callouts, mermaid, LaTeX, wikilinks) to improve readability and connectivity
  • Rely on the auto-import pattern to register new MDX content automatically with import.meta.glob
  • Test rendering locally for Mermaid diagrams, KaTeX math, and the Graph View to ensure backlinks and navigation work as expected

Example Use Cases

  • Publish a technical article under src/content/articles with proper frontmatter and year-based grouping
  • Create a daily note in src/content/daily to log tasks and activities with timestamps
  • Write an MDX post using a callout and wikilinks to connect to related notes
  • Embed a Mermaid diagram to illustrate system architecture within an article
  • Use Backlinks and GraphView to visualize and navigate the knowledge graph across posts

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers β†—