5.8 KiB
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:
- Attach your identity to every post — photo, bio, links. Anonymous content kills E-E-A-T and defeats the whole purpose.
- 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)
- "How I built X" case studies — highest value. Recruiters read these. (DigiKedai bot, self-hosted mem0, mailcow email platform, NAS product delivery, SifuMail.)
- "Hard problem → solution" tutorials — e.g. "The Traefik forward-auth gotcha that cost me a day", "Site-to-site OpenVPN behind CGNAT".
- Gotcha / debugging posts — short, extremely Google-friendly, compound over time.
- Tool roundups & comparisons — I have genuine first-hand material (Astro vs WP, Gitea vs GitHub, Foundry vs Hardhat).
- 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 1–2 = 1/week → Month 3 = 2/week → Month 4+ = 1–2/week mixing 500-word tactical posts with 2,000+ word guides.
- Ship a
notesentry 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)
---
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 alang:field in frontmatter. - Never let "I should translate this" block publishing an English post.