Build Log#Next.js#Bilingual#Engineering
Shipping MLog from Scratch
Published: Mar 2, 2026Updated: Mar 2, 2026Reading time: 1 min
How we shipped the first MLog release with bilingual routing, a Markdown content layer, and a warm glassmorphism system.
Why locale-prefixed routes
We adopted /zh and /en instead of runtime language toggles. This gives us:
- clearer SEO signals for each language,
- shareable URLs without extra parameters,
- stable slug-based switching between languages.
Content contract
Each post lives under content/posts/<slug>/ with zh.md and en.md. Frontmatter is validated at build time, so malformed dates and missing required fields fail fast.
title: string
date: ISO date
summary: string
tags: string[]
category: string
cover?: string
draft?: boolean
updated?: ISO date
Visual direction
We intentionally borrowed the feel of the reference project, not the exact layout:
- warm gradient atmosphere,
- translucent glass cards,
- restrained spring motions,
- single-column fallback on mobile.
The goal is clarity first, motion second.
What comes next
- publish more real posts,
- improve translation coverage,
- iterate on homepage information architecture.