--- import BaseLayout from '../layouts/BaseLayout.astro'; import PostList from '../components/PostList.astro'; import { getCollection } from 'astro:content'; import { isEn } from '../lib/lang'; import { SITE } from '../config'; import { sortForListing } from '../lib/sort'; const posts = sortForListing(await getCollection('posts', isEn)); // Featured picks: fixed slugs, not "newest 4", so the front page stays stable after a // publish and keeps answering "who is this and what has he actually run" (scale → // automation → observability → a delivered business result). Falls back to the newest // posts if a slug ever disappears. const FEATURED_SLUGS = [ 'running-production-infrastructure-solo', 'loop-engineering-without-a-coding-agent', 'one-prometheus-for-unraid-synology-and-a-vps', 'self-healing-digital-goods-entitlements', ]; const bySlug = new Map(posts.map((p) => [p.slug, p])); const featured = FEATURED_SLUGS.map((s) => bySlug.get(s)).filter(Boolean); const featuredPosts = featured.length === 4 ? featured : posts.slice(0, 4); ---
{`${SITE.author}

{SITE.author} — full-stack developer & DevOps engineer

I run 162 containers across three self-managed hosts — client sites, a mail platform, CI/CD, workflow automation and this blog — and I build web systems for Malaysian SMEs. I write up what broke, what the evidence said, and how I fixed it.

Read the engineering case studies ↓ Hiring? Profile & stack → Malaysian SME? How I work ↗

{posts.length} posts in English and 中文 · RSS

Latest posts

{posts.length === 0 ? (

No posts yet — check back soon.

) : ( )}

All {posts.length} posts · tag pages