Skip to content
View zfengyuu's full-sized avatar
🐶
Building
🐶
Building

Block or report zfengyuu

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
zfengyuu/README.md

zfengyuu — Nguyen Phong Vu Portfolio

Personal portfolio for Nguyen Phong Vu (zfengyuu), built with Astro, TypeScript, Tailwind CSS v4, MDX, and the Graphite / Signal aesthetic.

  • Brand: zfengyuu — Nguyen Phong Vu
  • Identity: Frontend & developer tools / Visual learning
  • Canonical Origin: https://zfengyuu.vercel.app
  • GitHub: https://github.com/zfengyuu

Getting Started

Install & Development

npm ci
npm run dev

Typecheck, Build & Preview

npm run check
npm run build
npm run preview

Architecture & Design System

  • Design System: Graphite / Signal aesthetic with curated tokens (--background, --foreground, --accent, --line, --muted, --hover, --soft).
  • Typography: Geist Sans (UI/Body), Redaction with IBM Plex Serif fallback (Headings/Serif accents), Commit Mono (Code & Metadata).
  • Navigation & Lifecycle: Astro ClientRouter with View Transitions (vt-fade-out / vt-fade-in), theme preservation across DOM swap, and active route detection (/blog/[slug] correctly activates writing).
  • Theme Engine: data-theme="dark" (default) and light, applied before paint via inline script, synced to localStorage key portfolio-theme with fallback, zero flash on reload or navigation.
  • Ambient Motion: 5 concentric arcs (AmbientBackground.astro) with subtle 24fps pointer easing (max 8px amplitude), scroll-driven fade (max(0, 1 - scrollY / 800)), and auto-pause on hidden tab, scroll >= 800px, or prefers-reduced-motion.
  • Accessibility: Focus-visible outlines, "Skip to content" keyboard link, touch-friendly mobile navigation, full functionality when JavaScript is disabled, and immediate static rendering under prefers-reduced-motion.

Route Overview (All 14 Routes)

Route Purpose SEO Status
/ Homepage with hero reveal, 4 verified projects, latest writing index, follow
/about Background, areas of interest, profile schema index, follow (ProfilePage)
/projects Verified projects with source code & demo links index, follow
/developers Developer resources, repository guides, contributing index, follow
/agents Practical 4-step workflow for working with coding agents index, follow
/writing Writing archive sorted by publication date index, follow
/blog/[slug] Articles with TOC, reading time, author, adjacent articles index, follow (BlogPosting)
/press Short & extended bios, official links, copy buttons index, follow
/mentoring Technical conversation guidance (issue trackers) noindex, follow (excluded from sitemap)
/bookshelf Reading notes (empty state) noindex, follow (excluded from sitemap)
/uses Verified tech stack for projects & tools index, follow
/contact Contact channels (GitHub & repository issues) index, follow
/privacy Website preference storage & external link notice index, follow
404 Custom not-found error page noindex, follow (excluded from sitemap)

Where to Edit Content

  • Site Configuration & Social Links: src/config/site.ts
  • Projects & URLs: src/data/projects.ts
  • Developer Resources: src/data/resources.ts
  • Bookshelf Entries: src/data/books.ts
  • Uses & Technologies: src/data/uses.ts
  • Blog Articles: src/content/blog/ (.md, .mdx)
  • Avatar Asset: public/avatar.svg
  • Social Card (Open Graph): public/og/zfengyuu.png (regenerate via python3 scripts/generate-og.py)

Unconfirmed Fields for Nguyen Phong Vu to Provide

The following fields are optional or currently use the empty state per specification:

  1. Email Address: Set in src/config/site.ts (email: null).
  2. Social Profiles (LinkedIn, X/Twitter): Set in src/config/site.ts (linkedin: null, twitter: null).
  3. Formal Location & Work Status / Availability: In src/config/site.ts (location: null, availability: null, bookingUrl: null).
  4. Bookshelf Items: Add books to src/data/books.ts when ready. Adding items will automatically remove noindex and include /bookshelf in the sitemap.
  5. Mentoring / Booking Service: Update src/pages/mentoring.astro and astro.config.mjs when booking options are announced.

Pinned Loading

  1. flow-mind flow-mind Public

    Flowmind is an AI-powered automation platform for creating node-based workflows to scrape web content, process data, and analyze it with AI. Built with Next.js, Better Auth, Tailwind CSS, Shadcn UI…

    TypeScript

  2. shadcn-builder shadcn-builder Public

    Forked from iduspara/shadcn-builder

    TypeScript