Files
2026-09-09 03:07:29 +08:00

115 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Content Guide — what to write & what to avoid
Read this **before** planning or writing any post on blog.hoelee.com. It encodes the positioning, taxonomy, post types, cadence, and anti-patterns so every piece of content serves the two goals: get hired, and win freelance clients.
---
## 1. The job of every post
A post is not "content marketing". It is a **proof-of-expertise artifact**. After reading it, a recruiter or client should think: *"this person can actually do this, and I trust how they explain it."*
Two hard rules flow from that:
1. **Attach your identity to every post** — photo, bio, links. Anonymous content kills E-E-A-T and defeats the whole purpose.
2. **Pitch to learners, not experts.** Most search traffic comes from people learning. Write down, not up.
---
## 2. Categories (stable — don't invent new ones casually)
Use these 7 categories. Everything else is a free-form **tag** (`traefik`, `solidity`, `gitea`, `n8n`…).
| Category | What goes in it |
|---|---|
| `engineering` | Java/Spring, PHP/CodeIgniter, React/TS, WordPress deep dives |
| `devops` | Docker/Portainer, Traefik, Cloudflare tunnels, NAS, backups, monitoring — **my most differentiated material** |
| `ai` | n8n workflows, Telegram bots, local LLM (LM Studio), mem0 memory stack, TTS |
| `web3` | Solidity, Foundry/Hardhat, ERC-20/721, Chainlink — honestly framed |
| `tutorials` | Beginner-facing how-tos |
| `case-studies` | "How I built X" — the portfolio |
| `notes` | Short low-friction entries: fixes, gotchas, link roundups |
---
## 3. Post types that work (ranked by hiring ROI)
1. **"How I built X" case studies** — highest value. Recruiters read these. (DigiKedai bot, self-hosted mem0, mailcow email platform, NAS product delivery, SifuMail.)
2. **"Hard problem → solution" tutorials** — e.g. "The Traefik forward-auth gotcha that cost me a day", "Site-to-site OpenVPN behind CGNAT".
3. **Gotcha / debugging posts** — short, extremely Google-friendly, compound over time.
4. **Tool roundups & comparisons** — I have genuine first-hand material (Astro vs WP, Gitea vs GitHub, Foundry vs Hardhat).
5. **Config / recipe posts** — reusable Traefik/Docker/Pi-hole configs with explanation.
---
## 4. The "hard job done → public post" template
When I finish a difficult piece of work, publish with this shape. It is simultaneously a tutorial, a case study, and a proof-of-expertise — the highest-ROI post type I can write.
```
① The problem → phrased as the searchable question a learner would type
② What I tried & why it failed → the debugging story (this is what no one else can copy)
③ The fix → runnable code/config, explained
④ What I'd do differently → shows judgment, not just luck
⑤ The result → one quantified outcome
```
---
## 5. Cadence
- **Realistic target:** 2 posts/month to start, then 1/week.
- Sonmez playbook: Month 12 = 1/week → Month 3 = 2/week → Month 4+ = 12/week mixing 500-word tactical posts with 2,000+ word guides.
- **Ship a `notes` entry anytime** I solve something — keeps the feed alive between deep posts.
- Long guides bring search traffic; short posts keep me consistent.
---
## 6. Frontmatter shape (reference)
```yaml
---
title: "How I built the DigiKedai Telegram bot"
description: "A ~155-char meta description with the target keyword."
pubDate: 2026-09-06
category: case-studies
tags: ["telegram", "n8n", "docker", "cloudflare"]
ogImage: "/og/digikedai-bot.png" # 1200×630, custom per post
draft: false
---
```
**No `lang:` field** — language is derived from the file location:
- `posts/hello-world.md` → English (`en`)
- `posts/zh/hello-world.md` → Chinese (`zh`), served at `/posts/zh/hello-world/`
---
## 7. What to AVOID (anti-patterns)
| Anti-pattern | Why it hurts |
|---|---|
| **Anonymous / no author identity** | Kills E-E-A-T; defeats the name-search strategy. Always show photo + bio + sameAs links. |
| **Writing for experts, not learners** | Most search traffic is beginners. |
| **AI-spam / content-farm filler** | Google aggressively demotes unedited AI churn. My first-hand case studies are the moat — never dilute them with filler. |
| **Perfectionism before publishing** | Procrastination. Ship it, edit later. A dormant blog is worse than an imperfect one (mine was dormant Dec 2023 → now). |
| **Reused logo as og:image** | Every post needs its own 1200×630 image, or shares look broken. |
| **Orphaned / thin pages** | hoelee.com has ~400 orphaned image-attachment pages. Don't recreate — keep the sitemap clean. |
| **Hosting on Medium/Dev.to as primary** | Platform risk + no SEO ownership. Use them for **syndication only** (cross-post + canonical back to my domain). |
| **Overclaiming Web3 experience** | Be honest: "learning Foundry, deployed test ERC-20/721" is credible; "production DeFi engineer" is not yet. |
| **Broken resume/CV link** | About page + author bio must link a *working* resume. Fix the source of truth. |
| **Monetizing before audience** | No ads, sponsored posts, or ebooks yet. Build trust + traffic for a year first. |
---
## 8. i18n policy
- **English is primary and non-negotiable** — the whole SEO strategy targets English queries.
- **Chinese (zh): translate every post.** Same filename in `posts/zh/` (auto language-switch). Opens zh-SG/zh-MY search and covers bilingual recruiters.
- **Malay: skip for v1** — no dev-audience demand (the main site already has a dangling Malay config; don't repeat it).
### File layout (enforced by code)
- English posts: `src/content/posts/*.md` (flat, no subfolder).
- Chinese posts: `src/content/posts/zh/*.md` (subfolder → `/posts/zh/<slug>/`).
- Language is derived from the folder (see `src/lib/lang.ts`), so **do not** set a `lang:` field in frontmatter.
- Never let "I should translate this" block publishing an English post.