{
  "schemaVersion": "1.0",
  "item": {
    "slug": "tulisai",
    "name": "tulisai",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/dwirx/tulisai",
    "canonicalUrl": "https://clawhub.ai/dwirx/tulisai",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/tulisai",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=tulisai",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "EXAMPLES.md",
      "INTEGRATION.md",
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/tulisai"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/tulisai",
    "agentPageUrl": "https://openagent3.xyz/skills/tulisai/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tulisai/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tulisai/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "BangunAI Blog Manager (Digital Garden + Content Workflow)",
        "body": "Homepage: React 18 + Vite + MDX + shadcn/ui\nBlog Root: /home/hades/BangunAI-Blog\nContent Root: /home/hades/BangunAI-Blog/src/content\nTech Stack: TypeScript, Tailwind CSS, Mermaid 11, KaTeX, Shiki\n\nSkill ini menggabungkan:\n\nworkflow custom untuk blog content (daily, fetch style, universal writer, logging, smart read)\nMDX authoring untuk React-based digital garden\nObsidian-like features (callouts, mermaid diagrams, LaTeX math, wikilinks, backlinks)\nAuto-import system via import.meta.glob"
      },
      {
        "title": "🌿 BangunAI Blog Fundamentals",
        "body": "Blog ini adalah Digital Garden & Knowledge Base dengan fitur terinspirasi dari Obsidian."
      },
      {
        "title": "Struktur Proyek",
        "body": "/home/hades/BangunAI-Blog/\n├── src/\n│   ├── content/\n│   │   ├── writing/       # Blog posts (notes, essays)\n│   │   ├── articles/      # Technical articles, tutorials\n│   │   ├── read/          # Reading notes, link curation\n│   │   ├── daily/         # Daily notes (tasks, logs)\n│   │   ├── about.mdx      # About page (single file)\n│   │   ├── now.mdx        # Now page (current activities)\n│   │   └── index.ts       # Auto-import loader\n│   ├── components/        # React components (40+ shadcn/ui)\n│   │   ├── Callout.tsx    # 14 tipe callouts\n│   │   ├── MermaidDiagram.tsx  # Mermaid renderer\n│   │   ├── WikiLink.tsx   # Internal linking\n│   │   ├── Backlinks.tsx  # Auto backlinks\n│   │   ├── GraphView.tsx  # Knowledge graph\n│   │   └── ui/            # shadcn/ui components\n│   ├── pages/             # Route pages\n│   ├── lib/               # Utilities\n│   │   ├── date.ts        # Date formatting\n│   │   └── utils.ts       # Class utilities\n│   └── data/\n│       ├── posts.ts       # Helper functions\n│       └── types.ts       # TypeScript types\n├── public/                # Static assets\n├── skill/                 # Agent skills (this!)\n└── package.json           # Dependencies"
      },
      {
        "title": "Content Types",
        "body": "TypeDescriptionLocationFeaturesWritingPersonal notes, essayssrc/content/writing/Filter by type (note/essay), category, tagsArticlesTechnical tutorials, guidessrc/content/articles/Grouped by yearReadCurated readings with notessrc/content/read/Source URL, snippet, tagsDailyDaily notes, tasks, logssrc/content/daily/Rollover tasks, timestampsAboutAbout page (MDX)src/content/about.mdxSingle static pageNowCurrent activitiessrc/content/now.mdxUpdated regularly"
      },
      {
        "title": "Auto-Import System",
        "body": "File src/content/index.ts auto-detect semua .mdx files via import.meta.glob:\n\n// NO MANUAL REGISTRATION NEEDED!\nconst writingModules = import.meta.glob(\"./writing/*.mdx\", { eager: true });\nconst articleModules = import.meta.glob(\"./articles/*.mdx\", { eager: true });\nconst readModules = import.meta.glob(\"./read/*.mdx\", { eager: true });\n\nBenefits: Create file → Auto-detected → Available immediately"
      },
      {
        "title": "Format A: Standard Posts (writing, articles, daily)",
        "body": "---\ntitle: \"Judul Artikel Yang Menarik\"\nslug: judul-artikel-yang-menarik\nsummary: \"Ringkasan singkat 1-2 kalimat yang compelling.\"\ntype: note                # note | essay | article\ncategory: Tech            # Tech | Refleksi | Produktivitas | Linux | Coding | Life\ntags: [react, typescript, tutorial]\ndate: \"2026-02-11T14:30:00\"\nreadingTime: 5\nfeatured: false           # (optional) untuk featured posts\n---\n\nRequired Fields:\n\ntitle — Judul artikel (string)\nslug — URL-friendly slug (kebab-case)\nsummary — Deskripsi singkat, compelling (1-2 kalimat)\ntype — Jenis konten:\n\nnote — Catatan pendek, quick takes\nessay — Tulisan mendalam, eksploratif\narticle — Tutorial, panduan terstruktur\n\n\ncategory — Kategori utama (pilih salah satu):\n\nTech — Teknologi, programming, tools\nRefleksi — Personal reflection, thoughts\nProduktivitas — Productivity, workflow\nLinux — Linux, terminal, sysadmin\nCoding — Coding practices, patterns\nLife — Lifestyle, experiences\n\n\ntags — Array tags (lowercase, kebab-case)\ndate — ISO timestamp dengan jam (YYYY-MM-DDTHH:mm:ss)\nreadingTime — Estimasi menit baca (~200 kata/menit)\n\nOptional Fields:\n\nfeatured — Boolean, untuk featured posts di homepage"
      },
      {
        "title": "Format B: Read Items (read/)",
        "body": "---\ntitle: \"Judul Artikel/Bacaan\"\nslug: judul-artikel-bacaan\nsnippet: \"Quote atau snippet menarik dari artikel (1-2 kalimat).\"\nsource: \"nama-situs.com\"\nurl: \"https://link-ke-artikel.com\"\ntags: [programming, career]\ndate: \"2026-02-11T18:00:00\"\n---\n\n## Catatan Personal (Optional)\n\nKomentar atau catatan tentang bacaan ini...\n\nRequired Fields:\n\ntitle — Judul artikel (string)\nslug — URL-friendly slug (kebab-case)\nsnippet — Quote/excerpt menarik dari artikel\nsource — Domain sumber (e.g., github.com, dev.to)\nurl — Link lengkap ke artikel asli\ntags — Array tags (lowercase)\ndate — ISO timestamp\n\nBody Content: Optional, untuk catatan personal"
      },
      {
        "title": "Format C: Special Pages (about, now)",
        "body": "---\ntitle: \"About\"  # atau \"Now\"\n---\n\nContent langsung di sini...\nMendukung semua fitur MDX (callouts, highlight, mermaid, dll).\n\nMinimal frontmatter: Hanya title"
      },
      {
        "title": "1. Callouts (14 Types)",
        "body": "<Callout type=\"info\" title=\"Judul Callout\">\nIsi callout di sini.\n</Callout>\n\nAvailable types:\n\ninfo — Informasi umum (biru)\ntip — Tips & tricks (hijau)\nwarning — Peringatan (kuning)\ndanger — Danger/error (merah)\nsuccess — Success message (hijau cerah)\nnote — Catatan (abu-abu)\nexample — Contoh (ungu)\nbug — Bug report (merah)\nquestion — Pertanyaan (biru muda)\nabstract — Abstract/summary (indigo)\nimportant — Penting (orange)\ncaution — Hati-hati (kuning gelap)\nquote — Kutipan (krem)\ncite — Sitasi (krem gelap)\n\nObsidian Blockquote Syntax:\n\n> [!info] Judul Callout\n> Isi callout menggunakan sintaks Obsidian."
      },
      {
        "title": "2. Mermaid Diagrams",
        "body": "```mermaid\ngraph TD\n    A[Start] --> B{Decision}\n    B -->|Yes| C[Action]\n    B -->|No| D[End]\n```\n\nSupported diagrams (Mermaid v11):\n\ngraph / flowchart — Flowchart\nsequenceDiagram — Sequence diagram\npie — Pie chart\nclassDiagram — UML class diagram\nstateDiagram-v2 — UML state diagram\nerDiagram — Entity relationship diagram\ngantt — Gantt chart\nmindmap — Mind map\ntimeline — Timeline\n\nFeatures:\n\nAuto-render dengan tema terang/gelap\nUnique ID per diagram (no conflicts)\nResponsive container"
      },
      {
        "title": "3. LaTeX Math (KaTeX)",
        "body": "Inline: $E = mc^2$\n\nBlock:\n$$\n\\int_0^\\infty e^{-x} dx = 1\n$$\n\nPowered by KaTeX 0.16 — Fast math rendering"
      },
      {
        "title": "4. WikiLinks (Internal Links)",
        "body": "<WikiLink to=\"slug-artikel\" label=\"Teks yang Ditampilkan\" />\n\nFeatures:\n\nLink mati (slug not found) → strikethrough otomatis\nAuto-deteksi dari semua posts"
      },
      {
        "title": "5. Highlight",
        "body": "<Highlight>teks yang di-highlight</Highlight>\n\nAtau gunakan HTML tag:\n<mark>teks yang di-highlight</mark>"
      },
      {
        "title": "6. YouTube Embed",
        "body": "<YouTube url=\"https://youtube.com/watch?v=VIDEO_ID\" title=\"Judul Video\" />\n\nFeatures:\n\nResponsive iframe\nAuto-aspect ratio 16:9"
      },
      {
        "title": "7. Code Blocks (Shiki Syntax Highlighting)",
        "body": "```typescript\nfunction hello(name: string): string {\n  return `Hello, ${name}!`;\n}\n```\n\nFeatures:\n\nPowered by Shiki with github-dark-dimmed theme\nCopy button included\nMulti-language support (TypeScript, Python, Bash, dll)"
      },
      {
        "title": "8. GFM (GitHub Flavored Markdown)",
        "body": "Tables:\n\n| Column 1 | Column 2 |\n|----------|----------|\n| Value A  | Value B  |\n\nTask Lists:\n\n- [x] Completed task\n- [ ] Uncompleted task\n\nStrikethrough:\n\n~~deleted text~~"
      },
      {
        "title": "9. Backlinks",
        "body": "Auto-generated di setiap artikel detail. Menampilkan artikel lain yang me-link ke artikel ini."
      },
      {
        "title": "10. Graph View",
        "body": "Interactive force-directed graph menampilkan koneksi antar konten."
      },
      {
        "title": "11. Table of Contents (TOC)",
        "body": "Sticky di desktop (right sidebar)\nCollapsible bottom bar di mobile\nActive heading tracking\nProgress bar"
      },
      {
        "title": "Color Tokens (HSL-based)",
        "body": "Dark Mode (Default):\n\n--background — Navy gelap (#1A1A2E)\n--foreground — Cream (#F5E6D3)\n--primary — Gold/amber (aksen utama)\n--accent — Warm gold (hover states)\n--card — Navy lebih terang\n\nLight Mode:\n\n--background — Cream hangat\n--foreground — Navy gelap\n--primary — Amber gelap\n--card — Cream lebih gelap\n\nUsage:\n\n// ✅ Gunakan semantic tokens\n<div className=\"bg-background text-foreground\">\n  <button className=\"bg-primary text-primary-foreground\">\n    Klik\n  </button>\n</div>\n\n// ❌ Jangan hardcode warna\n<div className=\"bg-[#1A1A2E] text-[#F5E6D3]\">"
      },
      {
        "title": "Font Stack",
        "body": "FontUsageSpace GroteskHeadings & navigationSource Serif 4Body text artikel (serif)InterUI elements & labelsJetBrains MonoCode blocks & inline code"
      },
      {
        "title": "Glass Morphism",
        "body": "<div className=\"glass glass-hover rounded-xl p-6\">\n  Konten dengan efek kaca transparan\n</div>"
      },
      {
        "title": "1) daily (Smart Daily Note)",
        "body": "Create daily note dengan auto-rollover unchecked tasks dari kemarin.\n\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\nDAILY_DIR=\"$BLOG_ROOT/src/content/daily\"\nmkdir -p \"$DAILY_DIR\"\n\nTODAY=$(date +%Y-%m-%d)\nFILE=\"$DAILY_DIR/$TODAY.mdx\"\nLAST_FILE=$(find \"$DAILY_DIR\" -name \"????-??-??.mdx\" ! -name \"$TODAY.mdx\" 2>/dev/null | sort | tail -n 1)\n\nif [ ! -f \"$FILE\" ]; then\n  cat > \"$FILE\" <<EOF\n---\ntitle: \"Daily Note: $TODAY\"\ndate: \"$TODAY\"\ntype: daily\ntags: [daily]\n---\n\n# Daily Note: $TODAY\n\nEOF\n\n  if [ -n \"$LAST_FILE\" ]; then\n    PENDING=$(grep \"\\- \\[ \\]\" \"$LAST_FILE\" || true)\n    if [ -n \"$PENDING\" ]; then\n      echo \"## Rollover Tasks\" >> \"$FILE\"\n      echo \"\" >> \"$FILE\"\n      echo \"$PENDING\" >> \"$FILE\"\n      echo \"\" >> \"$FILE\"\n    fi\n  fi\n  \n  cat >> \"$FILE\" <<EOF\n## Tasks Today\n\n- [ ] \n\n## Log\n\nEOF\n  echo \"✅ Created: $FILE\"\nelse\n  echo \"📂 Exists: $FILE\"\nfi"
      },
      {
        "title": "2) fetch_last (Style Reference)",
        "body": "Fetch latest file untuk style reference. Supports all categories including special pages.\n\n# Input: CATEGORY (writing, articles, read, daily, about, now)\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\ncase \"$CATEGORY\" in\n  \"daily\") DIR=\"$BLOG_ROOT/src/content/daily\" ;;\n  \"writing\") DIR=\"$BLOG_ROOT/src/content/writing\" ;;\n  \"articles\") DIR=\"$BLOG_ROOT/src/content/articles\" ;;\n  \"read\") DIR=\"$BLOG_ROOT/src/content/read\" ;;\n  \"about\") \n    cat \"$BLOG_ROOT/src/content/about.mdx\"\n    exit 0\n    ;;\n  \"now\") \n    cat \"$BLOG_ROOT/src/content/now.mdx\"\n    exit 0\n    ;;\n  *) echo \"❌ Unknown category\"; exit 1 ;;\nesac\nLAST_FILE=$(ls -t \"$DIR\"/*.mdx 2>/dev/null | head -n 1)\nif [ -f \"$LAST_FILE\" ]; then\n  echo \"📄 REFERENSI GAYA ($LAST_FILE):\"\n  head -n 50 \"$LAST_FILE\"\nelse\n  echo \"❌ Belum ada file di $CATEGORY\"\nfi"
      },
      {
        "title": "3) write (Universal Writer + BangunAI Style)",
        "body": "Write new content dengan frontmatter lengkap.\n\nFor Writing/Articles:\n\nCATEGORY=\"writing\"  # atau \"articles\"\nFILENAME=\"judul-artikel.mdx\"\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\n\ncat > \"$BLOG_ROOT/src/content/$CATEGORY/$FILENAME\" <<'EOF'\n---\ntitle: \"Judul Artikel Baru\"\nslug: judul-artikel-baru\nsummary: \"Ringkasan singkat tentang artikel ini yang menarik perhatian pembaca.\"\ntype: note\ncategory: Tech\ntags: [react, typescript, tutorial]\ndate: \"2026-02-12T15:00:00\"\nreadingTime: 5\n---\n\n## Introduction\n\nParagraf pembuka yang compelling dan menarik perhatian.\n\n<Callout type=\"tip\" title=\"Pro Tip\">\nGunakan callouts untuk highlight informasi penting!\n</Callout>\n\n## Section 1\n\n### Subsection A\n\nContent here dengan **bold** dan *italic*.\n\n```typescript\n// Example code dengan syntax highlighting\nfunction example(): string {\n  return \"Hello World\";\n}"
      },
      {
        "title": "Mermaid Example",
        "body": "graph LR\n    A[Input] --> B[Process]\n    B --> C[Output]"
      },
      {
        "title": "Math Example",
        "body": "Inline math: $x^2 + y^2 = z^2$\n\nBlock math:\n$$\n\\sum_{i=1}^{n} i = \\frac{n(n+1)}{2}\n$$"
      },
      {
        "title": "Internal Link",
        "body": "Check out <WikiLink to=\"other-article\" label=\"this related article\" />."
      },
      {
        "title": "Conclusion",
        "body": "Kesimpulan yang solid dan actionable.\nEOF\n\necho \"✅ Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME\"\n\n**For Read Items:**\n```bash\nCATEGORY=\"read\"\nFILENAME=\"interesting-article.mdx\"\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\n\ncat > \"$BLOG_ROOT/src/content/$CATEGORY/$FILENAME\" <<'EOF'\n---\ntitle: \"Interesting Article Title\"\nslug: interesting-article\nsnippet: \"A compelling quote or snippet from the article that captures its essence.\"\nsource: \"website.com\"\nurl: \"https://website.com/article\"\ntags: [tech, programming, career]\ndate: \"2026-02-12T15:00:00\"\n---\n\n## Key Takeaways\n\n- Point 1: Important insight\n- Point 2: Actionable advice\n- Point 3: Thought-provoking idea\n\n## Personal Notes\n\nMy thoughts and commentary about this article...\n\n<Callout type=\"note\">\nThis reminds me of a similar concept in...\n</Callout>\nEOF\n\necho \"✅ Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME\""
      },
      {
        "title": "4) log (Append Log)",
        "body": "Append timestamped log to today's daily note.\n\n# Input: CONTENT=\"...\"\nTODAY=$(date +%Y-%m-%d)\nFILE=\"/home/hades/BangunAI-Blog/src/content/daily/$TODAY.mdx\"\nif [ ! -f \"$FILE\" ]; then \n  echo \"❌ Run 'daily' workflow first!\"\n  exit 1\nfi\necho \"- $(date +%H:%M) $CONTENT\" >> \"$FILE\"\necho \"✅ Logged to: $FILE\""
      },
      {
        "title": "5) read (Smart Read)",
        "body": "Smart search content by keyword.\n\n# Input: FILE=\"...\"\nfind \"/home/hades/BangunAI-Blog/src/content\" -name \"*$FILE*.mdx\" | head -n 1 | xargs -r cat"
      },
      {
        "title": "6) update_about (Update About Page)",
        "body": "Update about.mdx with MDX content.\n\n# Input: CONTENT=\"...\"\nFILE=\"/home/hades/BangunAI-Blog/src/content/about.mdx\"\ncat > \"$FILE\" <<EOF\n---\ntitle: \"About\"\n---\n\n$CONTENT\nEOF\necho \"✅ Updated: $FILE\""
      },
      {
        "title": "7) update_now (Update Now Page)",
        "body": "Update now.mdx with current activities.\n\n# Input: CONTENT=\"...\"\nFILE=\"/home/hades/BangunAI-Blog/src/content/now.mdx\"\nCURRENT_DATE=$(date +\"%B %Y\")\ncat > \"$FILE\" <<EOF\n---\ntitle: \"Now\"\n---\n\n## Apa yang Sedang Saya Kerjakan\n\n*Terakhir diperbarui: $CURRENT_DATE*\n\nHalaman ini terinspirasi dari [nownownow.com](https://nownownow.com) — tempat saya mencatat apa yang sedang saya fokuskan saat ini.\n\n---\n\n$CONTENT\n\n---\n\n> *Halaman ini adalah snapshot dari kehidupan saya saat ini. Bukan resume, bukan portofolio — hanya update jujur tentang apa yang sedang saya kerjakan.*\nEOF\necho \"✅ Updated: $FILE\""
      },
      {
        "title": "8) verify_index (Verify Content)",
        "body": "Verify content auto-import statistics.\n\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\necho \"📊 Content Statistics:\"\necho \"\"\necho \"Writing posts: $(ls -1 \"$BLOG_ROOT/src/content/writing\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Articles: $(ls -1 \"$BLOG_ROOT/src/content/articles\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Read items: $(ls -1 \"$BLOG_ROOT/src/content/read\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Daily notes: $(ls -1 \"$BLOG_ROOT/src/content/daily\"/*.mdx 2>/dev/null | wc -l)\"\necho \"\"\necho \"Special files:\"\necho \"- about.mdx: $(test -f \"$BLOG_ROOT/src/content/about.mdx\" && echo \"✅\" || echo \"❌\")\"\necho \"- now.mdx: $(test -f \"$BLOG_ROOT/src/content/now.mdx\" && echo \"✅\" || echo \"❌\")\"\necho \"- index.ts: $(test -f \"$BLOG_ROOT/src/content/index.ts\" && echo \"✅\" || echo \"❌\")\""
      },
      {
        "title": "📋 Content Category Guidelines",
        "body": "CategoryPathUse CaseType OptionsExampleswritingsrc/content/writing/Personal notes, essaysnote, essayReflections, quick takes, deep thoughtsarticlessrc/content/articles/Technical tutorials, guidesarticleHow-to guides, technical deep divesreadsrc/content/read/Reading notes, link curationN/A (special format)Curated articles, bookmarksdailysrc/content/daily/Daily notes, tasks, logsdailyTask tracking, daily logsaboutsrc/content/about.mdxAbout page (static)N/APersonal bio, site infonowsrc/content/now.mdxCurrent activitiesN/AWhat I'm doing now"
      },
      {
        "title": "Category Values",
        "body": "Choose wisely untuk category field:\n\nTech — Teknologi, programming, tools, frameworks\nRefleksi — Personal reflection, thoughts, philosophy\nProduktivitas — Productivity tips, workflow, GTD\nLinux — Linux, terminal, system administration\nCoding — Coding practices, patterns, best practices\nLife — Lifestyle, personal experiences, stories"
      },
      {
        "title": "1. Frontmatter Consistency",
        "body": "DO:\n\ntitle: \"Belajar React Hooks di 2026\"\nslug: belajar-react-hooks-2026\ntype: note\ncategory: Tech\ntags: [react, hooks, javascript]\ndate: \"2026-02-12T15:30:00\"\n\nDON'T:\n\ntitle: belajar-react-hooks    # Missing quotes\nslug: Belajar React Hooks     # Not kebab-case\ntype: blog                     # Invalid type\ncategory: technology           # Typo/wrong value\ntags: React, Hooks             # Not array format\ndate: \"2026-02-12\"            # Missing time"
      },
      {
        "title": "2. File Naming",
        "body": "DO:\n\nbelajar-react-hooks-2026.mdx\nsetup-neovim-lua.mdx\nrefleksi-tahun-2025.mdx\n\nDON'T:\n\nBlog Post 1.mdx              # Spaces, not descriptive\ntemp.mdx                     # Non-descriptive\nNEW_POST.mdx                 # Uppercase, underscore"
      },
      {
        "title": "3. Content Structure",
        "body": "Recommended structure:\n\n---\nfrontmatter here\n---\n\n## Introduction (H2)\nBrief intro, hook the reader.\n\n<Callout type=\"info\">\nContext or prerequisite info.\n</Callout>\n\n## Main Section 1 (H2)\n\n### Subsection A (H3)\nContent...\n\n### Subsection B (H3)\nContent...\n\n## Main Section 2 (H2)\n\n### Examples (H3)\nCode or examples...\n\n## Conclusion (H2)\nSummary and takeaways."
      },
      {
        "title": "4. Using MDX Components",
        "body": "DO:\n\n<Callout type=\"tip\" title=\"Pro Tip\">\nUse semantic components for better UX.\n</Callout>\n\n<WikiLink to=\"related-article\" label=\"Read more about this\" />\n\nDON'T:\n\n<div style=\"background: yellow; padding: 10px;\">\nHardcoded styling instead of using Callout\n</div>\n\n<a href=\"/artikel/related-article\">Read more</a>\n<!-- Should use WikiLink instead -->"
      },
      {
        "title": "5. Date & Time Format",
        "body": "ISO timestamp with time:\n\ndate: \"2026-02-12T15:30:00\"  # YYYY-MM-DDTHH:mm:ss\n\nDisplayed as:\n\nDetail page: 11 Februari 2026, 14:30\nCard list: 11 Feb · 14:30"
      },
      {
        "title": "6. Reading Time Estimation",
        "body": "# Count words (exclude frontmatter)\nWORD_COUNT=$(tail -n +$(grep -n \"^---$\" file.mdx | tail -1 | cut -d: -f1) file.mdx | wc -w)\n\n# Calculate reading time (200 words/minute)\nREADING_TIME=$(( (WORD_COUNT + 199) / 200 ))\n\n# Add to frontmatter\nreadingTime: $READING_TIME"
      },
      {
        "title": "7. Tags Best Practices",
        "body": "Use lowercase\nUse kebab-case for multi-word tags\nKeep tags consistent across posts\nPrefer specific over generic tags\n\nGood tags:\n\ntags: [react-hooks, typescript, state-management]\n\nBad tags:\n\ntags: [React Hooks, programming, stuff]"
      },
      {
        "title": "Local Development",
        "body": "# Start dev server\ncd /home/hades/BangunAI-Blog\nbun run dev\n# Open http://localhost:8080"
      },
      {
        "title": "Create New Content",
        "body": "Fetch style reference:\nCATEGORY=\"writing\" bash fetch_last.sh\n\n\n\nCreate new file:\ncat > src/content/writing/new-post.mdx <<'EOF'\n---\ntitle: \"New Post\"\nslug: new-post\nsummary: \"Brief summary\"\ntype: note\ncategory: Tech\ntags: [tag1, tag2]\ndate: \"$(date -Iseconds)\"\nreadingTime: 5\n---\n\nContent here...\nEOF\n\n\n\nVerify auto-import:\n# File otomatis terdeteksi via import.meta.glob\n# Check di browser: http://localhost:8080/writing\n\n\n\nBuild & deploy:\nbun run build\nbun run preview"
      },
      {
        "title": "Git Workflow",
        "body": "# Add new content\ngit add src/content/writing/new-post.mdx\ngit commit -m \"Add: new blog post about X\"\n\n# Rename (preserve history)\ngit mv src/content/writing/old.mdx src/content/writing/new.mdx\ngit commit -m \"Rename: old post to new name\"\n\n# Delete (tracked)\ngit rm src/content/writing/unwanted.mdx\ngit commit -m \"Remove: unwanted post\"\n\n# Push\ngit push origin main"
      },
      {
        "title": "Issue: Content not showing",
        "body": "Check:\n\nValid frontmatter? (all required fields present)\nValid MDX syntax? (no unclosed tags)\nFile in correct directory?\nDev server restarted?"
      },
      {
        "title": "Issue: Mermaid not rendering",
        "body": "Check:\n\nValid Mermaid syntax?\nDiagram type supported?\nCheck browser console for errors"
      },
      {
        "title": "Issue: WikiLink shows strikethrough",
        "body": "Reason: Target slug not found\n\nFix:\n\nVerify target slug exists\nCheck spelling\nEnsure target file has valid frontmatter"
      },
      {
        "title": "Issue: LaTeX not rendering",
        "body": "Check:\n\nValid LaTeX syntax?\nEscaped special characters?\nUsing $ or $$ delimiters correctly?"
      },
      {
        "title": "Frontmatter Cheatsheet",
        "body": "Writing/Articles:\n\n---\ntitle: \"Title\"\nslug: slug\nsummary: \"Summary\"\ntype: note|essay|article\ncategory: Tech|Refleksi|Produktivitas|Linux|Coding|Life\ntags: [tag1, tag2]\ndate: \"YYYY-MM-DDTHH:mm:ss\"\nreadingTime: number\n---\n\nRead:\n\n---\ntitle: \"Title\"\nslug: slug\nsnippet: \"Snippet\"\nsource: \"domain.com\"\nurl: \"https://...\"\ntags: [tag1, tag2]\ndate: \"YYYY-MM-DDTHH:mm:ss\"\n---\n\nSpecial Pages:\n\n---\ntitle: \"About|Now\"\n---"
      },
      {
        "title": "MDX Components Cheatsheet",
        "body": "ComponentUsageCallout<Callout type=\"info\" title=\"...\">...</Callout>Mermaid```mermaid ... ```LaTeX$...$ or $$...$$WikiLink<WikiLink to=\"slug\" label=\"...\" />Highlight<Highlight>...</Highlight>YouTube<YouTube url=\"...\" title=\"...\" />"
      },
      {
        "title": "File Locations Cheatsheet",
        "body": "TypeLocationWritingsrc/content/writing/*.mdxArticlessrc/content/articles/*.mdxReadsrc/content/read/*.mdxDailysrc/content/daily/*.mdxAboutsrc/content/about.mdxNowsrc/content/now.mdxIndexsrc/content/index.ts"
      },
      {
        "title": "🎉 Summary",
        "body": "Skill ini fully integrated dengan BangunAI Blog:\n\n✅ 8 workflows ready to use\n✅ 3 frontmatter formats supported\n✅ Complete MDX components reference\n✅ Obsidian-like features documented\n✅ Design system guidelines\n✅ Best practices & troubleshooting\n✅ Auto-import via import.meta.glob\n✅ Git-based operations\n✅ Production-ready\n\nHomepage: https://github.com/dwirx/BangunAI-Blog"
      }
    ],
    "body": "BangunAI Blog Manager (Digital Garden + Content Workflow)\n\nHomepage: React 18 + Vite + MDX + shadcn/ui\nBlog Root: /home/hades/BangunAI-Blog\nContent Root: /home/hades/BangunAI-Blog/src/content\nTech Stack: TypeScript, Tailwind CSS, Mermaid 11, KaTeX, Shiki\n\nSkill ini menggabungkan:\n\nworkflow custom untuk blog content (daily, fetch style, universal writer, logging, smart read)\nMDX authoring untuk React-based digital garden\nObsidian-like features (callouts, mermaid diagrams, LaTeX math, wikilinks, backlinks)\nAuto-import system via import.meta.glob\n🌿 BangunAI Blog Fundamentals\n\nBlog ini adalah Digital Garden & Knowledge Base dengan fitur terinspirasi dari Obsidian.\n\nStruktur Proyek\n/home/hades/BangunAI-Blog/\n├── src/\n│   ├── content/\n│   │   ├── writing/       # Blog posts (notes, essays)\n│   │   ├── articles/      # Technical articles, tutorials\n│   │   ├── read/          # Reading notes, link curation\n│   │   ├── daily/         # Daily notes (tasks, logs)\n│   │   ├── about.mdx      # About page (single file)\n│   │   ├── now.mdx        # Now page (current activities)\n│   │   └── index.ts       # Auto-import loader\n│   ├── components/        # React components (40+ shadcn/ui)\n│   │   ├── Callout.tsx    # 14 tipe callouts\n│   │   ├── MermaidDiagram.tsx  # Mermaid renderer\n│   │   ├── WikiLink.tsx   # Internal linking\n│   │   ├── Backlinks.tsx  # Auto backlinks\n│   │   ├── GraphView.tsx  # Knowledge graph\n│   │   └── ui/            # shadcn/ui components\n│   ├── pages/             # Route pages\n│   ├── lib/               # Utilities\n│   │   ├── date.ts        # Date formatting\n│   │   └── utils.ts       # Class utilities\n│   └── data/\n│       ├── posts.ts       # Helper functions\n│       └── types.ts       # TypeScript types\n├── public/                # Static assets\n├── skill/                 # Agent skills (this!)\n└── package.json           # Dependencies\n\nContent Types\nType\tDescription\tLocation\tFeatures\nWriting\tPersonal notes, essays\tsrc/content/writing/\tFilter by type (note/essay), category, tags\nArticles\tTechnical tutorials, guides\tsrc/content/articles/\tGrouped by year\nRead\tCurated readings with notes\tsrc/content/read/\tSource URL, snippet, tags\nDaily\tDaily notes, tasks, logs\tsrc/content/daily/\tRollover tasks, timestamps\nAbout\tAbout page (MDX)\tsrc/content/about.mdx\tSingle static page\nNow\tCurrent activities\tsrc/content/now.mdx\tUpdated regularly\nAuto-Import System\n\nFile src/content/index.ts auto-detect semua .mdx files via import.meta.glob:\n\n// NO MANUAL REGISTRATION NEEDED!\nconst writingModules = import.meta.glob(\"./writing/*.mdx\", { eager: true });\nconst articleModules = import.meta.glob(\"./articles/*.mdx\", { eager: true });\nconst readModules = import.meta.glob(\"./read/*.mdx\", { eager: true });\n\n\nBenefits: Create file → Auto-detected → Available immediately\n\n📝 Frontmatter Formats\nFormat A: Standard Posts (writing, articles, daily)\n---\ntitle: \"Judul Artikel Yang Menarik\"\nslug: judul-artikel-yang-menarik\nsummary: \"Ringkasan singkat 1-2 kalimat yang compelling.\"\ntype: note                # note | essay | article\ncategory: Tech            # Tech | Refleksi | Produktivitas | Linux | Coding | Life\ntags: [react, typescript, tutorial]\ndate: \"2026-02-11T14:30:00\"\nreadingTime: 5\nfeatured: false           # (optional) untuk featured posts\n---\n\n\nRequired Fields:\n\ntitle — Judul artikel (string)\nslug — URL-friendly slug (kebab-case)\nsummary — Deskripsi singkat, compelling (1-2 kalimat)\ntype — Jenis konten:\nnote — Catatan pendek, quick takes\nessay — Tulisan mendalam, eksploratif\narticle — Tutorial, panduan terstruktur\ncategory — Kategori utama (pilih salah satu):\nTech — Teknologi, programming, tools\nRefleksi — Personal reflection, thoughts\nProduktivitas — Productivity, workflow\nLinux — Linux, terminal, sysadmin\nCoding — Coding practices, patterns\nLife — Lifestyle, experiences\ntags — Array tags (lowercase, kebab-case)\ndate — ISO timestamp dengan jam (YYYY-MM-DDTHH:mm:ss)\nreadingTime — Estimasi menit baca (~200 kata/menit)\n\nOptional Fields:\n\nfeatured — Boolean, untuk featured posts di homepage\nFormat B: Read Items (read/)\n---\ntitle: \"Judul Artikel/Bacaan\"\nslug: judul-artikel-bacaan\nsnippet: \"Quote atau snippet menarik dari artikel (1-2 kalimat).\"\nsource: \"nama-situs.com\"\nurl: \"https://link-ke-artikel.com\"\ntags: [programming, career]\ndate: \"2026-02-11T18:00:00\"\n---\n\n## Catatan Personal (Optional)\n\nKomentar atau catatan tentang bacaan ini...\n\n\nRequired Fields:\n\ntitle — Judul artikel (string)\nslug — URL-friendly slug (kebab-case)\nsnippet — Quote/excerpt menarik dari artikel\nsource — Domain sumber (e.g., github.com, dev.to)\nurl — Link lengkap ke artikel asli\ntags — Array tags (lowercase)\ndate — ISO timestamp\n\nBody Content: Optional, untuk catatan personal\n\nFormat C: Special Pages (about, now)\n---\ntitle: \"About\"  # atau \"Now\"\n---\n\nContent langsung di sini...\nMendukung semua fitur MDX (callouts, highlight, mermaid, dll).\n\n\nMinimal frontmatter: Hanya title\n\n🧩 MDX Components Available\n1. Callouts (14 Types)\n<Callout type=\"info\" title=\"Judul Callout\">\nIsi callout di sini.\n</Callout>\n\n\nAvailable types:\n\ninfo — Informasi umum (biru)\ntip — Tips & tricks (hijau)\nwarning — Peringatan (kuning)\ndanger — Danger/error (merah)\nsuccess — Success message (hijau cerah)\nnote — Catatan (abu-abu)\nexample — Contoh (ungu)\nbug — Bug report (merah)\nquestion — Pertanyaan (biru muda)\nabstract — Abstract/summary (indigo)\nimportant — Penting (orange)\ncaution — Hati-hati (kuning gelap)\nquote — Kutipan (krem)\ncite — Sitasi (krem gelap)\n\nObsidian Blockquote Syntax:\n\n> [!info] Judul Callout\n> Isi callout menggunakan sintaks Obsidian.\n\n2. Mermaid Diagrams\n```mermaid\ngraph TD\n    A[Start] --> B{Decision}\n    B -->|Yes| C[Action]\n    B -->|No| D[End]\n```\n\n\nSupported diagrams (Mermaid v11):\n\ngraph / flowchart — Flowchart\nsequenceDiagram — Sequence diagram\npie — Pie chart\nclassDiagram — UML class diagram\nstateDiagram-v2 — UML state diagram\nerDiagram — Entity relationship diagram\ngantt — Gantt chart\nmindmap — Mind map\ntimeline — Timeline\n\nFeatures:\n\nAuto-render dengan tema terang/gelap\nUnique ID per diagram (no conflicts)\nResponsive container\n3. LaTeX Math (KaTeX)\nInline: $E = mc^2$\n\nBlock:\n$$\n\\int_0^\\infty e^{-x} dx = 1\n$$\n\n\nPowered by KaTeX 0.16 — Fast math rendering\n\n4. WikiLinks (Internal Links)\n<WikiLink to=\"slug-artikel\" label=\"Teks yang Ditampilkan\" />\n\n\nFeatures:\n\nLink mati (slug not found) → strikethrough otomatis\nAuto-deteksi dari semua posts\n5. Highlight\n<Highlight>teks yang di-highlight</Highlight>\n\nAtau gunakan HTML tag:\n<mark>teks yang di-highlight</mark>\n\n6. YouTube Embed\n<YouTube url=\"https://youtube.com/watch?v=VIDEO_ID\" title=\"Judul Video\" />\n\n\nFeatures:\n\nResponsive iframe\nAuto-aspect ratio 16:9\n7. Code Blocks (Shiki Syntax Highlighting)\n```typescript\nfunction hello(name: string): string {\n  return `Hello, ${name}!`;\n}\n```\n\n\nFeatures:\n\nPowered by Shiki with github-dark-dimmed theme\nCopy button included\nMulti-language support (TypeScript, Python, Bash, dll)\n8. GFM (GitHub Flavored Markdown)\n\nTables:\n\n| Column 1 | Column 2 |\n|----------|----------|\n| Value A  | Value B  |\n\n\nTask Lists:\n\n- [x] Completed task\n- [ ] Uncompleted task\n\n\nStrikethrough:\n\n~~deleted text~~\n\n9. Backlinks\n\nAuto-generated di setiap artikel detail. Menampilkan artikel lain yang me-link ke artikel ini.\n\n10. Graph View\n\nInteractive force-directed graph menampilkan koneksi antar konten.\n\n11. Table of Contents (TOC)\nSticky di desktop (right sidebar)\nCollapsible bottom bar di mobile\nActive heading tracking\nProgress bar\n🎨 Design System\nColor Tokens (HSL-based)\n\nDark Mode (Default):\n\n--background — Navy gelap (#1A1A2E)\n--foreground — Cream (#F5E6D3)\n--primary — Gold/amber (aksen utama)\n--accent — Warm gold (hover states)\n--card — Navy lebih terang\n\nLight Mode:\n\n--background — Cream hangat\n--foreground — Navy gelap\n--primary — Amber gelap\n--card — Cream lebih gelap\n\nUsage:\n\n// ✅ Gunakan semantic tokens\n<div className=\"bg-background text-foreground\">\n  <button className=\"bg-primary text-primary-foreground\">\n    Klik\n  </button>\n</div>\n\n// ❌ Jangan hardcode warna\n<div className=\"bg-[#1A1A2E] text-[#F5E6D3]\">\n\nFont Stack\nFont\tUsage\nSpace Grotesk\tHeadings & navigation\nSource Serif 4\tBody text artikel (serif)\nInter\tUI elements & labels\nJetBrains Mono\tCode blocks & inline code\nGlass Morphism\n<div className=\"glass glass-hover rounded-xl p-6\">\n  Konten dengan efek kaca transparan\n</div>\n\n🔧 Workflows\n1) daily (Smart Daily Note)\n\nCreate daily note dengan auto-rollover unchecked tasks dari kemarin.\n\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\nDAILY_DIR=\"$BLOG_ROOT/src/content/daily\"\nmkdir -p \"$DAILY_DIR\"\n\nTODAY=$(date +%Y-%m-%d)\nFILE=\"$DAILY_DIR/$TODAY.mdx\"\nLAST_FILE=$(find \"$DAILY_DIR\" -name \"????-??-??.mdx\" ! -name \"$TODAY.mdx\" 2>/dev/null | sort | tail -n 1)\n\nif [ ! -f \"$FILE\" ]; then\n  cat > \"$FILE\" <<EOF\n---\ntitle: \"Daily Note: $TODAY\"\ndate: \"$TODAY\"\ntype: daily\ntags: [daily]\n---\n\n# Daily Note: $TODAY\n\nEOF\n\n  if [ -n \"$LAST_FILE\" ]; then\n    PENDING=$(grep \"\\- \\[ \\]\" \"$LAST_FILE\" || true)\n    if [ -n \"$PENDING\" ]; then\n      echo \"## Rollover Tasks\" >> \"$FILE\"\n      echo \"\" >> \"$FILE\"\n      echo \"$PENDING\" >> \"$FILE\"\n      echo \"\" >> \"$FILE\"\n    fi\n  fi\n  \n  cat >> \"$FILE\" <<EOF\n## Tasks Today\n\n- [ ] \n\n## Log\n\nEOF\n  echo \"✅ Created: $FILE\"\nelse\n  echo \"📂 Exists: $FILE\"\nfi\n\n2) fetch_last (Style Reference)\n\nFetch latest file untuk style reference. Supports all categories including special pages.\n\n# Input: CATEGORY (writing, articles, read, daily, about, now)\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\ncase \"$CATEGORY\" in\n  \"daily\") DIR=\"$BLOG_ROOT/src/content/daily\" ;;\n  \"writing\") DIR=\"$BLOG_ROOT/src/content/writing\" ;;\n  \"articles\") DIR=\"$BLOG_ROOT/src/content/articles\" ;;\n  \"read\") DIR=\"$BLOG_ROOT/src/content/read\" ;;\n  \"about\") \n    cat \"$BLOG_ROOT/src/content/about.mdx\"\n    exit 0\n    ;;\n  \"now\") \n    cat \"$BLOG_ROOT/src/content/now.mdx\"\n    exit 0\n    ;;\n  *) echo \"❌ Unknown category\"; exit 1 ;;\nesac\nLAST_FILE=$(ls -t \"$DIR\"/*.mdx 2>/dev/null | head -n 1)\nif [ -f \"$LAST_FILE\" ]; then\n  echo \"📄 REFERENSI GAYA ($LAST_FILE):\"\n  head -n 50 \"$LAST_FILE\"\nelse\n  echo \"❌ Belum ada file di $CATEGORY\"\nfi\n\n3) write (Universal Writer + BangunAI Style)\n\nWrite new content dengan frontmatter lengkap.\n\nFor Writing/Articles:\n\nCATEGORY=\"writing\"  # atau \"articles\"\nFILENAME=\"judul-artikel.mdx\"\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\n\ncat > \"$BLOG_ROOT/src/content/$CATEGORY/$FILENAME\" <<'EOF'\n---\ntitle: \"Judul Artikel Baru\"\nslug: judul-artikel-baru\nsummary: \"Ringkasan singkat tentang artikel ini yang menarik perhatian pembaca.\"\ntype: note\ncategory: Tech\ntags: [react, typescript, tutorial]\ndate: \"2026-02-12T15:00:00\"\nreadingTime: 5\n---\n\n## Introduction\n\nParagraf pembuka yang compelling dan menarik perhatian.\n\n<Callout type=\"tip\" title=\"Pro Tip\">\nGunakan callouts untuk highlight informasi penting!\n</Callout>\n\n## Section 1\n\n### Subsection A\n\nContent here dengan **bold** dan *italic*.\n\n```typescript\n// Example code dengan syntax highlighting\nfunction example(): string {\n  return \"Hello World\";\n}\n\nMermaid Example\ngraph LR\n    A[Input] --> B[Process]\n    B --> C[Output]\n\nMath Example\n\nInline math: $x^2 + y^2 = z^2$\n\nBlock math: $$ \\sum_{i=1}^{n} i = \\frac{n(n+1)}{2} $$\n\nInternal Link\n\nCheck out <WikiLink to=\"other-article\" label=\"this related article\" />.\n\nConclusion\n\nKesimpulan yang solid dan actionable. EOF\n\necho \"✅ Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME\"\n\n\n**For Read Items:**\n```bash\nCATEGORY=\"read\"\nFILENAME=\"interesting-article.mdx\"\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\n\ncat > \"$BLOG_ROOT/src/content/$CATEGORY/$FILENAME\" <<'EOF'\n---\ntitle: \"Interesting Article Title\"\nslug: interesting-article\nsnippet: \"A compelling quote or snippet from the article that captures its essence.\"\nsource: \"website.com\"\nurl: \"https://website.com/article\"\ntags: [tech, programming, career]\ndate: \"2026-02-12T15:00:00\"\n---\n\n## Key Takeaways\n\n- Point 1: Important insight\n- Point 2: Actionable advice\n- Point 3: Thought-provoking idea\n\n## Personal Notes\n\nMy thoughts and commentary about this article...\n\n<Callout type=\"note\">\nThis reminds me of a similar concept in...\n</Callout>\nEOF\n\necho \"✅ Created: $BLOG_ROOT/src/content/$CATEGORY/$FILENAME\"\n\n4) log (Append Log)\n\nAppend timestamped log to today's daily note.\n\n# Input: CONTENT=\"...\"\nTODAY=$(date +%Y-%m-%d)\nFILE=\"/home/hades/BangunAI-Blog/src/content/daily/$TODAY.mdx\"\nif [ ! -f \"$FILE\" ]; then \n  echo \"❌ Run 'daily' workflow first!\"\n  exit 1\nfi\necho \"- $(date +%H:%M) $CONTENT\" >> \"$FILE\"\necho \"✅ Logged to: $FILE\"\n\n5) read (Smart Read)\n\nSmart search content by keyword.\n\n# Input: FILE=\"...\"\nfind \"/home/hades/BangunAI-Blog/src/content\" -name \"*$FILE*.mdx\" | head -n 1 | xargs -r cat\n\n6) update_about (Update About Page)\n\nUpdate about.mdx with MDX content.\n\n# Input: CONTENT=\"...\"\nFILE=\"/home/hades/BangunAI-Blog/src/content/about.mdx\"\ncat > \"$FILE\" <<EOF\n---\ntitle: \"About\"\n---\n\n$CONTENT\nEOF\necho \"✅ Updated: $FILE\"\n\n7) update_now (Update Now Page)\n\nUpdate now.mdx with current activities.\n\n# Input: CONTENT=\"...\"\nFILE=\"/home/hades/BangunAI-Blog/src/content/now.mdx\"\nCURRENT_DATE=$(date +\"%B %Y\")\ncat > \"$FILE\" <<EOF\n---\ntitle: \"Now\"\n---\n\n## Apa yang Sedang Saya Kerjakan\n\n*Terakhir diperbarui: $CURRENT_DATE*\n\nHalaman ini terinspirasi dari [nownownow.com](https://nownownow.com) — tempat saya mencatat apa yang sedang saya fokuskan saat ini.\n\n---\n\n$CONTENT\n\n---\n\n> *Halaman ini adalah snapshot dari kehidupan saya saat ini. Bukan resume, bukan portofolio — hanya update jujur tentang apa yang sedang saya kerjakan.*\nEOF\necho \"✅ Updated: $FILE\"\n\n8) verify_index (Verify Content)\n\nVerify content auto-import statistics.\n\nBLOG_ROOT=\"/home/hades/BangunAI-Blog\"\necho \"📊 Content Statistics:\"\necho \"\"\necho \"Writing posts: $(ls -1 \"$BLOG_ROOT/src/content/writing\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Articles: $(ls -1 \"$BLOG_ROOT/src/content/articles\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Read items: $(ls -1 \"$BLOG_ROOT/src/content/read\"/*.mdx 2>/dev/null | wc -l)\"\necho \"Daily notes: $(ls -1 \"$BLOG_ROOT/src/content/daily\"/*.mdx 2>/dev/null | wc -l)\"\necho \"\"\necho \"Special files:\"\necho \"- about.mdx: $(test -f \"$BLOG_ROOT/src/content/about.mdx\" && echo \"✅\" || echo \"❌\")\"\necho \"- now.mdx: $(test -f \"$BLOG_ROOT/src/content/now.mdx\" && echo \"✅\" || echo \"❌\")\"\necho \"- index.ts: $(test -f \"$BLOG_ROOT/src/content/index.ts\" && echo \"✅\" || echo \"❌\")\"\n\n📋 Content Category Guidelines\nCategory\tPath\tUse Case\tType Options\tExamples\nwriting\tsrc/content/writing/\tPersonal notes, essays\tnote, essay\tReflections, quick takes, deep thoughts\narticles\tsrc/content/articles/\tTechnical tutorials, guides\tarticle\tHow-to guides, technical deep dives\nread\tsrc/content/read/\tReading notes, link curation\tN/A (special format)\tCurated articles, bookmarks\ndaily\tsrc/content/daily/\tDaily notes, tasks, logs\tdaily\tTask tracking, daily logs\nabout\tsrc/content/about.mdx\tAbout page (static)\tN/A\tPersonal bio, site info\nnow\tsrc/content/now.mdx\tCurrent activities\tN/A\tWhat I'm doing now\nCategory Values\n\nChoose wisely untuk category field:\n\nTech — Teknologi, programming, tools, frameworks\nRefleksi — Personal reflection, thoughts, philosophy\nProduktivitas — Productivity tips, workflow, GTD\nLinux — Linux, terminal, system administration\nCoding — Coding practices, patterns, best practices\nLife — Lifestyle, personal experiences, stories\n🎯 Best Practices\n1. Frontmatter Consistency\n\nDO:\n\ntitle: \"Belajar React Hooks di 2026\"\nslug: belajar-react-hooks-2026\ntype: note\ncategory: Tech\ntags: [react, hooks, javascript]\ndate: \"2026-02-12T15:30:00\"\n\n\nDON'T:\n\ntitle: belajar-react-hooks    # Missing quotes\nslug: Belajar React Hooks     # Not kebab-case\ntype: blog                     # Invalid type\ncategory: technology           # Typo/wrong value\ntags: React, Hooks             # Not array format\ndate: \"2026-02-12\"            # Missing time\n\n2. File Naming\n\nDO:\n\nbelajar-react-hooks-2026.mdx\nsetup-neovim-lua.mdx\nrefleksi-tahun-2025.mdx\n\n\nDON'T:\n\nBlog Post 1.mdx              # Spaces, not descriptive\ntemp.mdx                     # Non-descriptive\nNEW_POST.mdx                 # Uppercase, underscore\n\n3. Content Structure\n\nRecommended structure:\n\n---\nfrontmatter here\n---\n\n## Introduction (H2)\nBrief intro, hook the reader.\n\n<Callout type=\"info\">\nContext or prerequisite info.\n</Callout>\n\n## Main Section 1 (H2)\n\n### Subsection A (H3)\nContent...\n\n### Subsection B (H3)\nContent...\n\n## Main Section 2 (H2)\n\n### Examples (H3)\nCode or examples...\n\n## Conclusion (H2)\nSummary and takeaways.\n\n4. Using MDX Components\n\nDO:\n\n<Callout type=\"tip\" title=\"Pro Tip\">\nUse semantic components for better UX.\n</Callout>\n\n<WikiLink to=\"related-article\" label=\"Read more about this\" />\n\n\nDON'T:\n\n<div style=\"background: yellow; padding: 10px;\">\nHardcoded styling instead of using Callout\n</div>\n\n<a href=\"/artikel/related-article\">Read more</a>\n<!-- Should use WikiLink instead -->\n\n5. Date & Time Format\n\nISO timestamp with time:\n\ndate: \"2026-02-12T15:30:00\"  # YYYY-MM-DDTHH:mm:ss\n\n\nDisplayed as:\n\nDetail page: 11 Februari 2026, 14:30\nCard list: 11 Feb · 14:30\n6. Reading Time Estimation\n# Count words (exclude frontmatter)\nWORD_COUNT=$(tail -n +$(grep -n \"^---$\" file.mdx | tail -1 | cut -d: -f1) file.mdx | wc -w)\n\n# Calculate reading time (200 words/minute)\nREADING_TIME=$(( (WORD_COUNT + 199) / 200 ))\n\n# Add to frontmatter\nreadingTime: $READING_TIME\n\n7. Tags Best Practices\nUse lowercase\nUse kebab-case for multi-word tags\nKeep tags consistent across posts\nPrefer specific over generic tags\n\nGood tags:\n\ntags: [react-hooks, typescript, state-management]\n\n\nBad tags:\n\ntags: [React Hooks, programming, stuff]\n\n🚀 Development Workflow\nLocal Development\n# Start dev server\ncd /home/hades/BangunAI-Blog\nbun run dev\n# Open http://localhost:8080\n\nCreate New Content\n\nFetch style reference:\n\nCATEGORY=\"writing\" bash fetch_last.sh\n\n\nCreate new file:\n\ncat > src/content/writing/new-post.mdx <<'EOF'\n---\ntitle: \"New Post\"\nslug: new-post\nsummary: \"Brief summary\"\ntype: note\ncategory: Tech\ntags: [tag1, tag2]\ndate: \"$(date -Iseconds)\"\nreadingTime: 5\n---\n\nContent here...\nEOF\n\n\nVerify auto-import:\n\n# File otomatis terdeteksi via import.meta.glob\n# Check di browser: http://localhost:8080/writing\n\n\nBuild & deploy:\n\nbun run build\nbun run preview\n\nGit Workflow\n# Add new content\ngit add src/content/writing/new-post.mdx\ngit commit -m \"Add: new blog post about X\"\n\n# Rename (preserve history)\ngit mv src/content/writing/old.mdx src/content/writing/new.mdx\ngit commit -m \"Rename: old post to new name\"\n\n# Delete (tracked)\ngit rm src/content/writing/unwanted.mdx\ngit commit -m \"Remove: unwanted post\"\n\n# Push\ngit push origin main\n\n🔍 Troubleshooting\nIssue: Content not showing\n\nCheck:\n\nValid frontmatter? (all required fields present)\nValid MDX syntax? (no unclosed tags)\nFile in correct directory?\nDev server restarted?\nIssue: Mermaid not rendering\n\nCheck:\n\nValid Mermaid syntax?\nDiagram type supported?\nCheck browser console for errors\nIssue: WikiLink shows strikethrough\n\nReason: Target slug not found\n\nFix:\n\nVerify target slug exists\nCheck spelling\nEnsure target file has valid frontmatter\nIssue: LaTeX not rendering\n\nCheck:\n\nValid LaTeX syntax?\nEscaped special characters?\nUsing $ or $$ delimiters correctly?\n📚 Quick Reference\nFrontmatter Cheatsheet\n\nWriting/Articles:\n\n---\ntitle: \"Title\"\nslug: slug\nsummary: \"Summary\"\ntype: note|essay|article\ncategory: Tech|Refleksi|Produktivitas|Linux|Coding|Life\ntags: [tag1, tag2]\ndate: \"YYYY-MM-DDTHH:mm:ss\"\nreadingTime: number\n---\n\n\nRead:\n\n---\ntitle: \"Title\"\nslug: slug\nsnippet: \"Snippet\"\nsource: \"domain.com\"\nurl: \"https://...\"\ntags: [tag1, tag2]\ndate: \"YYYY-MM-DDTHH:mm:ss\"\n---\n\n\nSpecial Pages:\n\n---\ntitle: \"About|Now\"\n---\n\nMDX Components Cheatsheet\nComponent\tUsage\nCallout\t<Callout type=\"info\" title=\"...\">...</Callout>\nMermaid\t```mermaid ... ```\nLaTeX\t$...$ or $$...$$\nWikiLink\t<WikiLink to=\"slug\" label=\"...\" />\nHighlight\t<Highlight>...</Highlight>\nYouTube\t<YouTube url=\"...\" title=\"...\" />\nFile Locations Cheatsheet\nType\tLocation\nWriting\tsrc/content/writing/*.mdx\nArticles\tsrc/content/articles/*.mdx\nRead\tsrc/content/read/*.mdx\nDaily\tsrc/content/daily/*.mdx\nAbout\tsrc/content/about.mdx\nNow\tsrc/content/now.mdx\nIndex\tsrc/content/index.ts\n🎉 Summary\n\nSkill ini fully integrated dengan BangunAI Blog:\n\n✅ 8 workflows ready to use\n✅ 3 frontmatter formats supported\n✅ Complete MDX components reference\n✅ Obsidian-like features documented\n✅ Design system guidelines\n✅ Best practices & troubleshooting\n✅ Auto-import via import.meta.glob\n✅ Git-based operations\n✅ Production-ready\n\nHomepage: https://github.com/dwirx/BangunAI-Blog"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/dwirx/tulisai",
    "publisherUrl": "https://clawhub.ai/dwirx/tulisai",
    "owner": "dwirx",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/tulisai",
    "downloadUrl": "https://openagent3.xyz/downloads/tulisai",
    "agentUrl": "https://openagent3.xyz/skills/tulisai/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tulisai/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tulisai/agent.md"
  }
}