Every page — including the new World Cup page — is now reachable from the ⌘K command palette.
Retired the experimental AI blog and its weekly cron writer.
The site now builds without any secrets — database and Redis clients connect lazily.
Added a World Cup 2026 page with live scores and match detail, reached from a new “etc” menu in the header.
Restructured the tech stack into titled category rows for faster scanning.
Added a Components page — a live showcase of UI built for the site: tags input, code block, and terminal block.
Added this changelog page — a timeline of big milestones, linked from the header.
Added a ⌘K command palette with section navigation, project search, social links, and quick actions.
Shipped a page-view counter backed by Drizzle and Redis dedup, with a cumulative views chart.
Animated dotted world map on the cover, marking Ho Chi Minh City.
Typing animation cycling through roles in the profile section.
Root-level error boundary so failures land softly instead of a blank screen.
Added a bookmarks section — a public reading log of tools and resources.
Dedicated project detail pages with image galleries, zoom, and richer descriptions.
Profile download menu — export the resume as PDF, Markdown, or JSON.
Experience, education, certifications, and awards sections, plus a table-of-contents minimap.
Full SEO pass — metadata, OG image, sitemap, robots.txt, and llms.txt.
Top scroll progress bar and a sound engine wired to the @soundcn registry.
Hero cover, profile, overview, and social-links sections built out.
Coding section with a GitHub contribution heatmap and activity stats.
New sticky header with theme toggle and profile constants.
Dropped i18n entirely — the site is now English-only.
Turborepo + Next.js scaffold with a shared `@repo/core` package.
Husky, lint-staged, commitlint, and GitHub Actions CI.
Canonical profile data lives in `content/profile/*.md`.