Loading home page
Added a Blocks page — full-page UI blocks rendered inside a Safari frame with a Preview/Code toggle and a resizable file-tree code explorer.
Published the Error Page block: a centered 500 state with a clear message and recovery actions.
Published the CRM Data Table block — sorting, filtering, global search, column controls, row selection, a stonk column, DiceBear avatars, and pagination over 80 rows.
Block state syncs to the URL search params and the Safari address bar.
Published Zod Data Table — generate typed TanStack Table columns from a Zod object schema and row data, with metadata labels and custom cell renderers.
Added complete documentation, empty-state handling, responsive table scrolling, tests, and a one-command shadcn registry install.
Published GitHub Contributions 3D — an interactive Three.js contribution calendar with six color themes, live username lookup, fixed lighting, a proportional base, and date metadata.
Published Scroll Minimap with mirrored left and right placement, container-aware tracking, a conversation demo, and inline installation source.
Added server and browser diagnostics for GitHub contribution and profile-stat requests, including missing-token, network, response, and render details.
Refreshed the profile with the Vietnamese display name, current freelance role, richer experience stacks, and theme-aware generated avatars.
Added local-time handwritten greetings and a dimensional dotted map to the cover.
Rebuilt the GitHub contribution heatmap with responsive cells and theme-safe activity animation.
Redesigned the section minimap with proximity animation, live scroll tracking, detail popovers, and subtle sound feedback.
Hardened animated theme changes against repeated input and added consistent SoundCN feedback to copy and toggle actions.
Moved secondary pages into an icon-led navigation menu and added source inspiration to the footer.
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`.