From 3c5facc4bb6cb8e922d91d52bb6d69f4e142a01f Mon Sep 17 00:00:00 2001 From: anhvuFE Date: Sat, 9 May 2026 15:02:27 +0700 Subject: [PATCH 1/6] feat(github): add live recent activity widget Fetches public events from GitHub API for anhvuFE, maps them to a compact list with relative time. Cached in sessionStorage for 5 min to stay friendly with the unauthenticated rate limit. The widget appears below the contributions calendar and only fetches when the GitHub section actually scrolls into view. --- src/components/github/GitHubActivity.tsx | 5 + src/components/github/RecentActivity.tsx | 319 +++++++++++++++++++++++ 2 files changed, 324 insertions(+) create mode 100644 src/components/github/RecentActivity.tsx diff --git a/src/components/github/GitHubActivity.tsx b/src/components/github/GitHubActivity.tsx index fb5f30c..fb3596d 100644 --- a/src/components/github/GitHubActivity.tsx +++ b/src/components/github/GitHubActivity.tsx @@ -1,6 +1,7 @@ import React from "react"; import { Box, Container, Typography, Paper, useTheme, useMediaQuery } from "@mui/material"; import { GitHubCalendar } from "react-github-calendar"; +import RecentActivity from "./RecentActivity"; const GitHubActivity: React.FC = () => { const theme = useTheme(); @@ -88,6 +89,10 @@ const GitHubActivity: React.FC = () => { }} /> + + + + ); diff --git a/src/components/github/RecentActivity.tsx b/src/components/github/RecentActivity.tsx new file mode 100644 index 0000000..4a4a861 --- /dev/null +++ b/src/components/github/RecentActivity.tsx @@ -0,0 +1,319 @@ +import React, { useEffect, useRef, useState } from "react"; +import { Box, Typography, Chip, CircularProgress } from "@mui/material"; +import { + Commit as CommitIcon, + CallSplit as ForkIcon, + Star as StarIcon, + MergeType as PRIcon, + BugReport as IssueIcon, + Folder as RepoIcon, + GitHub as GitHubIcon +} from "@mui/icons-material"; + +const USERNAME = "anhvuFE"; +const CACHE_KEY = "gh-activity-v1"; +const CACHE_TTL_MS = 5 * 60 * 1000; +const MAX_EVENTS = 5; + +interface ActivityEvent { + type: "commit" | "pr" | "issue" | "star" | "fork" | "create"; + repo: string; + message: string; + url: string; + date: string; +} + +interface ApiEvent { + id: string; + type: string; + created_at: string; + repo: { name: string }; + payload: { + commits?: Array<{ message: string; sha: string }>; + action?: string; + pull_request?: { title: string; html_url: string; merged?: boolean }; + issue?: { title: string; html_url: string }; + ref_type?: string; + ref?: string; + }; +} + +function shorten(text: string, max = 60): string { + if (text.length <= max) return text; + return text.slice(0, max - 1).trimEnd() + "…"; +} + +function relativeTime(iso: string): string { + const diff = Date.now() - new Date(iso).getTime(); + const m = Math.round(diff / 60000); + if (m < 1) return "just now"; + if (m < 60) return `${m}m ago`; + const h = Math.round(m / 60); + if (h < 24) return `${h}h ago`; + const d = Math.round(h / 24); + if (d < 30) return `${d}d ago`; + return new Date(iso).toLocaleDateString("en-US", { month: "short", day: "numeric" }); +} + +function mapEvent(e: ApiEvent): ActivityEvent | null { + const repoUrl = `https://github.com/${e.repo.name}`; + switch (e.type) { + case "PushEvent": { + const first = e.payload.commits?.[0]; + if (!first) return null; + return { + type: "commit", + repo: e.repo.name, + message: shorten(first.message.split("\n")[0]), + url: `${repoUrl}/commit/${first.sha}`, + date: e.created_at + }; + } + case "PullRequestEvent": + if (!e.payload.pull_request) return null; + return { + type: "pr", + repo: e.repo.name, + message: `${e.payload.action} PR: ${shorten(e.payload.pull_request.title)}`, + url: e.payload.pull_request.html_url, + date: e.created_at + }; + case "IssuesEvent": + if (!e.payload.issue) return null; + return { + type: "issue", + repo: e.repo.name, + message: `${e.payload.action} issue: ${shorten(e.payload.issue.title)}`, + url: e.payload.issue.html_url, + date: e.created_at + }; + case "WatchEvent": + return { + type: "star", + repo: e.repo.name, + message: `starred ${e.repo.name}`, + url: repoUrl, + date: e.created_at + }; + case "ForkEvent": + return { + type: "fork", + repo: e.repo.name, + message: `forked ${e.repo.name}`, + url: repoUrl, + date: e.created_at + }; + case "CreateEvent": + if (e.payload.ref_type === "repository" || e.payload.ref_type === "branch") { + return { + type: "create", + repo: e.repo.name, + message: `created ${e.payload.ref_type}${e.payload.ref ? ` ${e.payload.ref}` : ""}`, + url: repoUrl, + date: e.created_at + }; + } + return null; + default: + return null; + } +} + +const iconMap: Record = { + commit: , + pr: , + issue: , + star: , + fork: , + create: +}; + +const colorMap: Record = { + commit: "#0eaddf", + pr: "#a855f7", + issue: "#f59e0b", + star: "#FFD700", + fork: "#22c55e", + create: "#3dc4ee" +}; + +const RecentActivity: React.FC = () => { + const [events, setEvents] = useState(null); + const [error, setError] = useState(null); + const ref = useRef(null); + const fetched = useRef(false); + + useEffect(() => { + const el = ref.current; + if (!el) return; + if (typeof IntersectionObserver === "undefined") { + load(); + return; + } + const io = new IntersectionObserver( + (entries) => { + for (const entry of entries) { + if (entry.isIntersecting) { + io.disconnect(); + load(); + break; + } + } + }, + { rootMargin: "200px" } + ); + io.observe(el); + return () => io.disconnect(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const load = async () => { + if (fetched.current) return; + fetched.current = true; + + try { + const cached = sessionStorage.getItem(CACHE_KEY); + if (cached) { + const parsed = JSON.parse(cached) as { ts: number; data: ActivityEvent[] }; + if (Date.now() - parsed.ts < CACHE_TTL_MS) { + setEvents(parsed.data); + return; + } + } + } catch { + /* ignore */ + } + + try { + const res = await fetch(`https://api.github.com/users/${USERNAME}/events/public?per_page=30`); + if (!res.ok) throw new Error(`GitHub API ${res.status}`); + const json = (await res.json()) as ApiEvent[]; + const mapped = json.map(mapEvent).filter((e): e is ActivityEvent => e !== null).slice(0, MAX_EVENTS); + setEvents(mapped); + try { + sessionStorage.setItem(CACHE_KEY, JSON.stringify({ ts: Date.now(), data: mapped })); + } catch { + /* quota exceeded */ + } + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to load activity"); + } + }; + + return ( + + + + + Live activity + + + + + + {events === null && !error && ( + + + + Fetching from github.com… + + + )} + + {error && ( + + Couldn't load — see github.com/{USERNAME} + + )} + + {events && events.length === 0 && ( + + No public activity in the past few days. + + )} + + {events && events.length > 0 && ( + + {events.map((e, i) => ( + + + {iconMap[e.type]} + + + {e.message} + + + + ))} + + )} + + ); +}; + +export default RecentActivity; From ee2848d1364ee4fb9fafa8f699bc2b4b4edb4704 Mon Sep 17 00:00:00 2001 From: anhvuFE Date: Sat, 9 May 2026 15:04:22 +0700 Subject: [PATCH 2/6] feat(footer): make terminal interactive The footer terminal now accepts real input. Commands include: help, whoami, about, skills, projects, contact, echo, clear, plus a couple of easter eggs for sudo and rm. ArrowUp/Down walks through prior commands. Input lives inside the terminal box, so clicking anywhere in the body focuses it. --- src/components/footer/Footer.tsx | 357 ++++++++++++++++++++++++------- 1 file changed, 274 insertions(+), 83 deletions(-) diff --git a/src/components/footer/Footer.tsx b/src/components/footer/Footer.tsx index bea709a..98deaf2 100644 --- a/src/components/footer/Footer.tsx +++ b/src/components/footer/Footer.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { Box, Container, Typography, IconButton } from "@mui/material"; import { ArrowUpward as ArrowUpIcon } from "@mui/icons-material"; import MatrixRain from "../sakura/MatrixRain"; @@ -17,58 +17,240 @@ const float = keyframes` const MONO = '"Fira Code", "JetBrains Mono", Menlo, Monaco, Consolas, "Courier New", monospace'; interface Line { - prompt?: string; + prompt?: boolean; command?: string; output?: React.ReactNode; } +const linkSx = { + color: "#0eaddf", + textDecoration: "underline", + textDecorationColor: "rgba(14, 173, 223, 0.3)", + textUnderlineOffset: 3, + transition: "all 0.2s ease", + "&:hover": { + color: "#3dc4ee", + textDecorationColor: "#3dc4ee" + } +}; + +const dotSx = (color: string) => ({ + width: 12, + height: 12, + borderRadius: "50%", + background: color, + flexShrink: 0 +}); + +const initialLines: Line[] = [ + { prompt: true, command: "whoami" }, + { output: Vũ Xuân Anh — Full Stack Developer }, + { prompt: true, command: "cat /status" }, + { + output: ( + + + available for new opportunities + + ) + }, + { prompt: true, command: "help" }, + { + output: ( + + try: about{" · "} + skills{" · "} + projects{" · "} + contact{" · "} + clear + + ) + } +]; + +interface CommandResult { + output?: React.ReactNode; + clear?: boolean; +} + +function runCommand(input: string): CommandResult { + const trimmed = input.trim(); + if (!trimmed) return { output: null }; + const [cmd, ...args] = trimmed.split(/\s+/); + const arg = args.join(" "); + + switch (cmd.toLowerCase()) { + case "help": + return { + output: ( + + available: about,{" "} + skills,{" "} + projects,{" "} + contact,{" "} + whoami,{" "} + echo <text>,{" "} + clear + + ) + }; + case "whoami": + return { output: Vũ Xuân Anh — Full Stack Developer }; + case "about": + case "cat": + if (cmd.toLowerCase() === "cat" && arg.toLowerCase() !== "about" && arg.toLowerCase() !== "skills") { + return { output: cat: {arg || "missing operand"}: No such file }; + } + if (cmd.toLowerCase() === "cat" && arg.toLowerCase() === "skills") { + return { + output: ( + + react, typescript, node, next.js, mui, postgres, mongo, docker, aws + + ) + }; + } + return { + output: ( + + full-stack dev, ~3 yrs across 4 companies. frontend-leaning. currently @ neliSoftwares. + + ) + }; + case "skills": + return { + output: ( + + react, typescript, node, next.js, mui, postgres, mongo, docker, aws + + ) + }; + case "projects": + case "ls": + return { + output: ( + + scroll up and tap the{" "} + Projects bento card for case studies + + ) + }; + case "contact": + return { + output: ( + + github.com/anhvuFE + {" "} + linkedin + {" "} + vuxuananh22@gmail.com + + ) + }; + case "echo": + return { output: {arg} }; + case "clear": + return { clear: true }; + case "sudo": + return { output: nice try. }; + case "rm": + return { output: permission denied. }; + default: + return { + output: ( + + command not found: {cmd} — try{" "} + help + + ) + }; + } +} + const Footer: React.FC = () => { - const scrollToTop = (): void => { + const [history, setHistory] = useState(initialLines); + const [input, setInput] = useState(""); + const [historyIndex, setHistoryIndex] = useState(null); + const inputRef = useRef(null); + const bodyRef = useRef(null); + + const commandHistory = useMemo( + () => history.filter((l) => l.prompt && l.command).map((l) => l.command as string), + [history] + ); + + const scrollToTop = useCallback((): void => { window.scrollTo({ top: 0, behavior: "smooth" }); - }; + }, []); const currentYear: number = new Date().getFullYear(); - const lines: Line[] = [ - { command: "whoami" }, - { output: Vũ Xuân Anh — Full Stack Developer }, - {}, - { command: "cat /status" }, - { - output: ( - - - available for new opportunities - - ) - }, - {}, - { command: "ls ~/contact" }, - { - output: ( - - github.com/anhvuFE - {" "} - linkedin.com/xu... - {" "} - vuxuananh22@gmail.com - - ) + const focusInput = useCallback(() => { + inputRef.current?.focus({ preventScroll: true }); + }, []); + + useEffect(() => { + if (bodyRef.current) { + bodyRef.current.scrollTop = bodyRef.current.scrollHeight; + } + }, [history]); + + const submit = useCallback(() => { + const value = input; + const result = runCommand(value); + if (result.clear) { + setHistory([]); + } else { + setHistory((prev) => [ + ...prev, + { prompt: true, command: value }, + ...(result.output !== null && result.output !== undefined ? [{ output: result.output }] : []) + ]); + } + setInput(""); + setHistoryIndex(null); + }, [input]); + + const onKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + e.preventDefault(); + submit(); + return; + } + if (e.key === "ArrowUp") { + e.preventDefault(); + if (commandHistory.length === 0) return; + const next = historyIndex === null ? commandHistory.length - 1 : Math.max(0, historyIndex - 1); + setHistoryIndex(next); + setInput(commandHistory[next] ?? ""); + return; + } + if (e.key === "ArrowDown") { + e.preventDefault(); + if (historyIndex === null) return; + const next = historyIndex + 1; + if (next >= commandHistory.length) { + setHistoryIndex(null); + setInput(""); + } else { + setHistoryIndex(next); + setInput(commandHistory[next] ?? ""); + } + } }, - {}, - { command: "echo $LOCATION" }, - { output: Hanoi, Vietnam · GMT+7 } - ]; + [submit, commandHistory, historyIndex] + ); return ( { - {/* Terminal window */} - {/* Title bar */} { userSelect: "none" }} > - vuxuananh@portfolio: ~ + vuxuananh@portfolio: ~ — interactive - {/* Body */} - {lines.map((line, i) => ( + {history.map((line, i) => ( - {line.command && ( + {line.prompt && ( <> vu@portfolio : @@ -171,33 +355,60 @@ const Footer: React.FC = () => { {line.command} )} - {line.output && {line.output}} - {!line.command && !line.output && <> } + {line.output && {line.output}} + {!line.prompt && !line.output && <> } ))} - {/* Active prompt with blinking cursor */} vu@portfolio : ~ ) => setInput(e.target.value)} + onKeyDown={onKeyDown} + spellCheck={false} + autoComplete="off" + autoCapitalize="off" + autoCorrect="off" + aria-label="terminal input" sx={{ - display: "inline-block", - width: "0.55em", - height: "1em", - background: "#0eaddf", - animation: `${blink} 1s step-end infinite`, - verticalAlign: "text-bottom" + flex: 1, + background: "transparent", + border: "none", + outline: "none", + color: "#e6edf3", + fontFamily: MONO, + fontSize: "inherit", + caretColor: "#0eaddf", + padding: 0, + minWidth: 0 }} /> + {input.length === 0 && ( + + )} - {/* Below-terminal credit */} { }} > {`// © ${currentYear} Vũ Xuân Anh`} - {"// built with React, TypeScript & MUI"} + {"// type 'help' in the terminal above"} ); }; -const dotSx = (color: string) => ({ - width: 12, - height: 12, - borderRadius: "50%", - background: color, - flexShrink: 0 -}); - -const linkSx = { - color: "#0eaddf", - textDecoration: "underline", - textDecorationColor: "rgba(14, 173, 223, 0.3)", - textUnderlineOffset: 3, - transition: "all 0.2s ease", - "&:hover": { - color: "#3dc4ee", - textDecorationColor: "#3dc4ee" - } -}; - export default Footer; From c1b43f9203345e773df8fc53cf54e92ba4a7a1d8 Mon Sep 17 00:00:00 2001 From: anhvuFE Date: Sat, 9 May 2026 15:06:54 +0700 Subject: [PATCH 3/6] feat(palette): add Cmd+K command palette Lazy-loaded dialog with fuzzy search across sections, contact actions and external links. Cmd/Ctrl+K toggles it; Arrow keys navigate, Enter opens, Esc closes. The header gets a small search button next to the nav (chip on desktop with platform-aware shortcut hint, icon button on mobile). --- src/App.tsx | 26 +- src/components/header/Header.tsx | 87 +++++- src/components/palette/CommandPalette.tsx | 337 ++++++++++++++++++++++ 3 files changed, 435 insertions(+), 15 deletions(-) create mode 100644 src/components/palette/CommandPalette.tsx diff --git a/src/App.tsx b/src/App.tsx index a4b167a..0da57af 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { lazy, Suspense, useCallback, useEffect, useState } from "react"; import { ThemeProvider, createTheme, CssBaseline } from "@mui/material"; import "./App.css"; import Header from "./components/header/Header"; @@ -8,6 +8,8 @@ import Footer from "./components/footer/Footer"; import CursorGlow from "./components/effects/CursorGlow"; import ScrollReveal from "./components/effects/ScrollReveal"; +const CommandPalette = lazy(() => import("./components/palette/CommandPalette")); + const theme = createTheme({ palette: { mode: "dark", @@ -98,11 +100,26 @@ const theme = createTheme({ }); function App(): React.ReactElement { + const [paletteOpen, setPaletteOpen] = useState(false); + + const closePalette = useCallback(() => setPaletteOpen(false), []); + + useEffect(() => { + const handler = (e: KeyboardEvent) => { + if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { + e.preventDefault(); + setPaletteOpen((prev) => !prev); + } + }; + window.addEventListener("keydown", handler); + return () => window.removeEventListener("keydown", handler); + }, []); + return ( -
+
setPaletteOpen(true)} />
@@ -110,6 +127,11 @@ function App(): React.ReactElement {
+ {paletteOpen && ( + + + + )} ); } diff --git a/src/components/header/Header.tsx b/src/components/header/Header.tsx index ea8fe10..57e118a 100644 --- a/src/components/header/Header.tsx +++ b/src/components/header/Header.tsx @@ -19,9 +19,14 @@ import { GitHub as GitHubIcon, LinkedIn as LinkedInIcon, Facebook as FacebookIcon, - MailOutline as MailIcon + MailOutline as MailIcon, + Search as SearchIcon } from "@mui/icons-material"; +interface HeaderProps { + onOpenPalette?: () => void; +} + interface NavItem { id: string; label: string; @@ -36,11 +41,18 @@ const navItems: NavItem[] = [ { id: "contact", label: "Contact" }, ]; -const Header: React.FC = () => { +const Header: React.FC = ({ onOpenPalette }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [activeSection, setActiveSection] = useState("home"); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("md")); + const [isApple, setIsApple] = useState(false); + + useEffect(() => { + if (typeof navigator !== "undefined") { + setIsApple(/Mac|iPhone|iPad|iPod/i.test(navigator.platform || navigator.userAgent)); + } + }, []); const trigger = useScrollTrigger({ disableHysteresis: true, @@ -167,19 +179,68 @@ const Header: React.FC = () => { {item.label} ))} + {onOpenPalette && ( + + + + {isApple ? "⌘ K" : "Ctrl K"} + + + )} ) : ( - setIsMenuOpen(true)} - sx={{ - color: "#e6edf3", - width: 40, - height: 40 - }} - > - - + + {onOpenPalette && ( + + + + )} + setIsMenuOpen(true)} + aria-label="Open menu" + sx={{ + color: "#e6edf3", + width: 40, + height: 40 + }} + > + + + )} diff --git a/src/components/palette/CommandPalette.tsx b/src/components/palette/CommandPalette.tsx new file mode 100644 index 0000000..2d250ac --- /dev/null +++ b/src/components/palette/CommandPalette.tsx @@ -0,0 +1,337 @@ +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { + Dialog, + DialogContent, + TextField, + Box, + Typography, + InputAdornment, + Chip +} from "@mui/material"; +import { + Search as SearchIcon, + Person as PersonIcon, + Code as CodeIcon, + GitHub as GitHubIcon, + Work as WorkIcon, + EmojiEvents as TrophyIcon, + Build as BuildIcon, + FolderSpecial as ProjectsIcon, + MailOutline as MailIcon, + Description as ResumeIcon, + LinkedIn as LinkedInIcon, + Home as HomeIcon, + KeyboardReturn as EnterIcon, + KeyboardArrowUp as UpIcon, + KeyboardArrowDown as DownIcon +} from "@mui/icons-material"; + +interface PaletteItem { + id: string; + label: string; + group: "Sections" | "Contact" | "Links"; + hint?: string; + icon: React.ReactElement; + hash?: string; + url?: string; + scrollTop?: boolean; +} + +const ITEMS: PaletteItem[] = [ + { id: "home", label: "Home", group: "Sections", icon: , scrollTop: true }, + { id: "about", label: "About", group: "Sections", icon: , hash: "about" }, + { id: "skills", label: "Skills", group: "Sections", icon: , hash: "skills" }, + { id: "github", label: "GitHub Activity", group: "Sections", icon: , hash: "github" }, + { id: "experience", label: "Experience", group: "Sections", icon: , hash: "experience" }, + { id: "certificates", label: "Certificates", group: "Sections", icon: , hash: "certificates" }, + { id: "services", label: "Services", group: "Sections", icon: , hash: "services" }, + { id: "projects", label: "Projects", group: "Sections", icon: , hash: "projects" }, + { + id: "contact", + label: "Contact form", + group: "Sections", + icon: , + hash: "contact" + }, + { + id: "email", + label: "Email vuxuananh22@gmail.com", + group: "Contact", + hint: "mailto", + icon: , + url: "mailto:vuxuananh22@gmail.com" + }, + { + id: "github-link", + label: "GitHub @anhvuFE", + group: "Links", + hint: "external", + icon: , + url: "https://github.com/anhvuFE" + }, + { + id: "linkedin-link", + label: "LinkedIn", + group: "Links", + hint: "external", + icon: , + url: "https://www.linkedin.com/in/xu%C3%A2n-anh-v%C5%A9-515580367/" + }, + { + id: "cv", + label: "Download CV", + group: "Links", + hint: "PDF", + icon: , + url: process.env.PUBLIC_URL + "/portfolio/static/media/CV-VuXuanAnh.pdf" + } +]; + +function score(query: string, label: string): number { + if (!query) return 1; + const q = query.toLowerCase(); + const l = label.toLowerCase(); + if (l === q) return 100; + if (l.startsWith(q)) return 80; + if (l.includes(q)) return 60; + // fuzzy: each query char appears in order + let li = 0; + for (let qi = 0; qi < q.length; qi++) { + while (li < l.length && l[li] !== q[qi]) li++; + if (li === l.length) return 0; + li++; + } + return 30; +} + +interface CommandPaletteProps { + open: boolean; + onClose: () => void; +} + +const CommandPalette: React.FC = ({ open, onClose }) => { + const [query, setQuery] = useState(""); + const [activeIndex, setActiveIndex] = useState(0); + const inputRef = useRef(null); + + const filtered = useMemo(() => { + return ITEMS.map((item) => ({ item, s: score(query, item.label) })) + .filter((x) => x.s > 0) + .sort((a, b) => b.s - a.s) + .map((x) => x.item); + }, [query]); + + const grouped = useMemo(() => { + const groups = new Map(); + for (const item of filtered) { + const existing = groups.get(item.group); + if (existing) existing.push(item); + else groups.set(item.group, [item]); + } + return Array.from(groups.entries()); + }, [filtered]); + + useEffect(() => { + if (open) { + setQuery(""); + setActiveIndex(0); + requestAnimationFrame(() => inputRef.current?.focus()); + } + }, [open]); + + useEffect(() => { + setActiveIndex(0); + }, [query]); + + const execute = useCallback( + (item: PaletteItem) => { + onClose(); + if (item.scrollTop) { + if (window.location.hash) { + window.history.pushState(null, "", window.location.pathname + window.location.search); + window.dispatchEvent(new HashChangeEvent("hashchange")); + } + window.scrollTo({ top: 0, behavior: "smooth" }); + return; + } + if (item.hash) { + window.location.hash = item.hash; + return; + } + if (item.url) { + if (item.url.startsWith("http")) { + window.open(item.url, "_blank", "noopener,noreferrer"); + } else { + window.location.href = item.url; + } + } + }, + [onClose] + ); + + const onKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "ArrowDown") { + e.preventDefault(); + setActiveIndex((i) => Math.min(i + 1, filtered.length - 1)); + } else if (e.key === "ArrowUp") { + e.preventDefault(); + setActiveIndex((i) => Math.max(i - 1, 0)); + } else if (e.key === "Enter") { + e.preventDefault(); + const item = filtered[activeIndex]; + if (item) execute(item); + } + }, + [filtered, activeIndex, execute] + ); + + let runningIndex = -1; + + return ( + + + + setQuery(e.target.value)} + onKeyDown={onKeyDown} + placeholder="Search sections, contacts, links…" + fullWidth + variant="standard" + InputProps={{ + disableUnderline: true, + startAdornment: ( + + + + ), + sx: { fontSize: "1rem", color: "#e6edf3" } + }} + inputProps={{ "aria-label": "Command palette search" }} + /> + + + + {filtered.length === 0 ? ( + + + No results for "{query}" + + + ) : ( + grouped.map(([group, items]) => ( + + + {group} + + {items.map((item) => { + runningIndex++; + const isActive = runningIndex === activeIndex; + return ( + execute(item)} + onMouseEnter={() => setActiveIndex(runningIndex)} + sx={{ + display: "flex", + alignItems: "center", + gap: 1.5, + px: 1.5, + py: 1.25, + borderRadius: 1.5, + cursor: "pointer", + background: isActive ? "rgba(14, 173, 223, 0.12)" : "transparent", + border: "1px solid", + borderColor: isActive ? "rgba(14, 173, 223, 0.25)" : "transparent", + transition: "all 0.12s ease", + color: isActive ? "#0eaddf" : "#e6edf3" + }} + > + + {item.icon} + + {item.label} + {item.hint && ( + + )} + {isActive && ( + + )} + + ); + })} + + )) + )} + + + + + + + navigate + + + + open + + + + esc to close + + + + + ); +}; + +export default CommandPalette; From 64923a1a85570d8ab3b847c669c9d5aed06cc7b7 Mon Sep 17 00:00:00 2001 From: anhvuFE Date: Sat, 9 May 2026 15:09:49 +0700 Subject: [PATCH 4/6] feat(projects): add project case studies section New bento card opens a drawer with three project case studies, each laid out as Problem -> Approach -> Result with the stack as chips at the bottom. Lazy-loaded like the other sections. Numbers in the result blocks are placeholders the user fills in. --- src/components/bento/BentoGrid.tsx | 24 ++- src/components/bento/previews.tsx | 19 +- src/components/projects/Projects.tsx | 262 ++++++++++++++++++++++++ src/components/projects/projectsData.ts | 86 ++++++++ 4 files changed, 385 insertions(+), 6 deletions(-) create mode 100644 src/components/projects/Projects.tsx create mode 100644 src/components/projects/projectsData.ts diff --git a/src/components/bento/BentoGrid.tsx b/src/components/bento/BentoGrid.tsx index 8ee4f8b..fc8a46c 100644 --- a/src/components/bento/BentoGrid.tsx +++ b/src/components/bento/BentoGrid.tsx @@ -8,7 +8,8 @@ import { ExperiencePreview, CertsPreview, ServicesPreview, - ContactPreview + ContactPreview, + ProjectsPreview } from "./previews"; import GitHubPreview from "./GitHubPreview"; @@ -19,6 +20,7 @@ const Services = lazy(() => import("../services/Services")); const Qualification = lazy(() => import("../qualification/Qualification")); const Certificate = lazy(() => import("../certificate/Certificate")); const Contact = lazy(() => import("../contact/Contact")); +const Projects = lazy(() => import("../projects/Projects")); type SectionKey = | "about" @@ -27,7 +29,8 @@ type SectionKey = | "experience" | "certificates" | "services" - | "contact"; + | "contact" + | "projects"; const sectionContent: Record> = { about: About, @@ -36,7 +39,8 @@ const sectionContent: Record> = experience: Qualification, certificates: Certificate, services: Services, - contact: Contact + contact: Contact, + projects: Projects }; const DrawerLoader: React.FC = () => ( @@ -52,7 +56,8 @@ const validKeys = new Set([ "experience", "certificates", "services", - "contact" + "contact", + "projects" ]); const BentoGrid: React.FC = () => { @@ -97,7 +102,8 @@ const BentoGrid: React.FC = () => { experience: () => open("experience"), certificates: () => open("certificates"), services: () => open("services"), - contact: () => open("contact") + contact: () => open("contact"), + projects: () => open("projects") }), [open] ); @@ -185,6 +191,14 @@ const BentoGrid: React.FC = () => { onClick={handlers.services} gridColumn={{ md: "5 / span 2" }} /> + } + onClick={handlers.projects} + gridColumn={{ xs: "1 / -1", md: "1 / -1" }} + /> ( ); + +export const ProjectsPreview: React.FC = () => ( + + + + + 3 case studies + + + + Shopify app · Marketing rebuild · Ops dashboard + + + Problem → Approach → Result for each + + +); diff --git a/src/components/projects/Projects.tsx b/src/components/projects/Projects.tsx new file mode 100644 index 0000000..545059d --- /dev/null +++ b/src/components/projects/Projects.tsx @@ -0,0 +1,262 @@ +import React from "react"; +import { + Box, + Container, + Typography, + Card, + CardContent, + Chip, + Stack, + Button, + Divider +} from "@mui/material"; +import { + CheckCircle as CheckIcon, + Lightbulb as LightbulbIcon, + Build as BuildIcon, + TrendingUp as TrendingUpIcon, + OpenInNew as OpenInNewIcon +} from "@mui/icons-material"; +import { projects, ProjectCaseStudy } from "./projectsData"; + +const SectionTitle: React.FC<{ icon: React.ReactNode; label: string; color: string }> = ({ + icon, + label, + color +}) => ( + + {icon} + + {label} + + +); + +const ProjectCard: React.FC<{ project: ProjectCaseStudy }> = ({ project }) => ( + + + + + + + + {project.role} + + {project.company && ( + <> + · + + {project.company} + + + )} + + + + + {project.title} + + {project.oneLiner} + + + + + + } + label="Problem" + color="#f59e0b" + /> + + {project.problem} + + + + + } + label="Approach" + color={project.accent} + /> + + {project.approach.map((step, i) => ( + + + {i + 1} + + + {step} + + + ))} + + + + + } + label="Result" + color="#22c55e" + /> + + {project.result.map((r, i) => ( + + + + {r} + + + ))} + + + + + {project.stack.map((tech) => ( + + ))} + {project.links?.map((link) => ( + + ))} + + + +); + +const Projects: React.FC = () => { + return ( + + + + + Project case studies + + + Problem · Approach · Result + + + + + {projects.map((p) => ( + + ))} + + + + ); +}; + +export default Projects; diff --git a/src/components/projects/projectsData.ts b/src/components/projects/projectsData.ts new file mode 100644 index 0000000..f102eda --- /dev/null +++ b/src/components/projects/projectsData.ts @@ -0,0 +1,86 @@ +export interface ProjectCaseStudy { + id: string; + title: string; + role: string; + company?: string; + period: string; + oneLiner: string; + problem: string; + approach: string[]; + result: string[]; + stack: string[]; + links?: { label: string; url: string }[]; + accent: string; +} + +// Replace the placeholders below with real numbers and detail before showing +// this section to recruiters. Anything you don't have yet, leave as a TODO so +// it stays visible. + +export const projects: ProjectCaseStudy[] = [ + { + id: "neli-shopify-app", + title: "Shopify merchant app — neliSoftwares", + role: "Software Engineer", + company: "neliSoftwares", + period: "Jul 2025 — Present", + oneLiner: "Embedded Shopify app helping merchants manage [TODO: feature].", + problem: + "Merchants needed [TODO: describe the merchant pain — e.g. faster bulk product edits, theme integrations, custom workflows]. Existing solutions were either too generic or required engineering hours per store.", + approach: [ + "Built the embedded admin UI with Polaris Web Components and App Bridge.", + "Wired Prisma + Postgres for per-shop data; Redis for session and cache.", + "Integrated Shopify GraphQL Admin API with retry + rate-limit handling.", + "Added webhook handlers for shop install / uninstall / data update events." + ], + result: [ + "[TODO: ship metric — e.g. installs, MRR, conversion lift]", + "[TODO: perf metric — e.g. p95 < 500ms]", + "[TODO: any GitHub stars / merchant testimonials]" + ], + stack: ["TypeScript", "React", "Polaris", "Prisma", "Postgres", "Redis", "Shopify"], + accent: "#0eaddf" + }, + { + id: "technixo-frontend", + title: "Frontend rebuild — Technixo", + role: "Frontend Developer", + company: "Technixo", + period: "Dec 2023 — Apr 2024", + oneLiner: "Rewrote the marketing surface from legacy templates to a modern React + TypeScript stack.", + problem: + "Legacy templates were hard to update, slow on mobile, and inconsistent across pages.", + approach: [ + "Migrated the page templates to React + TypeScript with shared layout components.", + "Set up component library and design tokens to keep visual consistency.", + "Optimized images and bundles to hit a healthy Lighthouse score on mobile." + ], + result: [ + "[TODO: lighthouse before / after]", + "[TODO: dev velocity — pages/week, designer review turnaround]" + ], + stack: ["React", "TypeScript", "CSS Modules"], + accent: "#a855f7" + }, + { + id: "true-connect", + title: "Internal dashboard — True Connect", + role: "Frontend Developer", + company: "True Connect", + period: "Jul 2022 — Feb 2023", + oneLiner: "Built dashboards for the operations team to monitor and act on customer data.", + problem: + "Ops were piecing together insights from multiple systems with spreadsheets, which was slow and error-prone.", + approach: [ + "Designed table-heavy screens with virtualization for large data sets.", + "Wired the JS/TS frontend to internal APIs with optimistic updates for common actions.", + "Iterated with the ops team weekly to remove the slowest manual steps." + ], + result: [ + "[TODO: time saved per shift]", + "[TODO: error rate before / after]" + ], + stack: ["JavaScript", "TypeScript"], + accent: "#22c55e" + } +]; From 6f95526ee23e113beb0855426b0e350c51fa52d5 Mon Sep 17 00:00:00 2001 From: anhvuFE Date: Sat, 9 May 2026 15:15:57 +0700 Subject: [PATCH 5/6] feat(github): pre-fetch activity at build time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace runtime fetch (which hit the unauthenticated 60-req/hr GitHub rate limit) with a prebuild script. The script writes a JSON snapshot that the widget imports statically. The build never blocks on a failed GitHub call — if the request fails, the existing JSON is reused. Set GITHUB_TOKEN in CI to refresh authenticated and skip the rate limit. --- README.md | 14 ++ package.json | 1 + scripts/fetch-github-activity.js | 151 ++++++++++++++ src/components/github/RecentActivity.tsx | 224 ++++----------------- src/components/github/recent-activity.json | 40 ++++ 5 files changed, 245 insertions(+), 185 deletions(-) create mode 100644 scripts/fetch-github-activity.js create mode 100644 src/components/github/recent-activity.json diff --git a/README.md b/README.md index e18becf..647a826 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,17 @@ npm run deploy # gh-pages -d build (uses homepage in package.json) GitHub Pages is configured via `homepage` in `package.json`. The `deploy` script publishes the `build/` folder to the `gh-pages` branch. +### Prebuild hook + +`npm run build` runs `scripts/fetch-github-activity.js` first. The script +calls the public GitHub events API for the user, maps the response into +the shape the UI expects, and writes +`src/components/github/recent-activity.json`. If the request fails (rate +limit, network), the existing JSON is kept so the build never breaks. + +Set `GITHUB_TOKEN` (or `GH_TOKEN`) in your environment to authenticate +the request and avoid the unauthenticated 60-req/hr limit. + ## Image pipeline `scripts/optimize-images.js` regenerates JPG + WebP variants from the source @@ -68,6 +79,9 @@ node scripts/optimize-images.js `scripts/generate-favicon.js` regenerates the favicon set in `public/` from `src/assets/avatar.jpg`. +`scripts/fetch-github-activity.js` runs as a prebuild hook (see above). You +can run it on demand to refresh local data without doing a full build. + ## Project structure ``` diff --git a/package.json b/package.json index 3ed3053..b632a39 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "start": "react-scripts start", "predeploy": "npm run build", "deploy": "gh-pages -d build", + "prebuild": "node scripts/fetch-github-activity.js", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" diff --git a/scripts/fetch-github-activity.js b/scripts/fetch-github-activity.js new file mode 100644 index 0000000..0084127 --- /dev/null +++ b/scripts/fetch-github-activity.js @@ -0,0 +1,151 @@ +/* eslint-disable */ +const fs = require("fs"); +const path = require("path"); +const https = require("https"); + +const USERNAME = process.env.GITHUB_USERNAME || "anhvuFE"; +const OUT = path.join(__dirname, "..", "src", "components", "github", "recent-activity.json"); +const MAX_EVENTS = 5; + +function shorten(text, max = 60) { + if (!text) return ""; + const oneLine = text.split("\n")[0]; + if (oneLine.length <= max) return oneLine; + return oneLine.slice(0, max - 1).trimEnd() + "…"; +} + +function mapEvent(e) { + const repo = e.repo?.name; + if (!repo) return null; + const repoUrl = `https://github.com/${repo}`; + const date = e.created_at; + + switch (e.type) { + case "PushEvent": { + const commits = e.payload?.commits || []; + const first = commits[0]; + if (!first) return null; + const msg = shorten(first.message); + const more = commits.length > 1 ? ` (+${commits.length - 1} more)` : ""; + return { + type: "commit", + repo, + message: `${msg}${more} in ${repo}`, + url: `${repoUrl}/commit/${first.sha}`, + date + }; + } + case "PullRequestEvent": { + if (!e.payload?.pull_request) return null; + const title = shorten(e.payload.pull_request.title); + const num = e.payload.pull_request.number; + const desc = title ? `: ${title}` : num ? ` #${num}` : ""; + return { + type: "pr", + repo, + message: `${e.payload.action} PR${desc} in ${repo}`, + url: e.payload.pull_request.html_url || `${repoUrl}/pulls`, + date + }; + } + case "IssuesEvent": { + if (!e.payload?.issue) return null; + const title = shorten(e.payload.issue.title); + const num = e.payload.issue.number; + const desc = title ? `: ${title}` : num ? ` #${num}` : ""; + return { + type: "issue", + repo, + message: `${e.payload.action} issue${desc} in ${repo}`, + url: e.payload.issue.html_url || `${repoUrl}/issues`, + date + }; + } + case "WatchEvent": + return { type: "star", repo, message: `starred ${repo}`, url: repoUrl, date }; + case "ForkEvent": + return { type: "fork", repo, message: `forked ${repo}`, url: repoUrl, date }; + case "CreateEvent": + if (e.payload?.ref_type === "repository" || e.payload?.ref_type === "branch") { + const ref = e.payload.ref ? ` ${e.payload.ref}` : ""; + return { + type: "create", + repo, + message: `created ${e.payload.ref_type}${ref}`, + url: repoUrl, + date + }; + } + return null; + default: + return null; + } +} + +function fetchEvents() { + return new Promise((resolve, reject) => { + const options = { + hostname: "api.github.com", + path: `/users/${USERNAME}/events/public?per_page=30`, + headers: { + "User-Agent": "portfolio-prebuild", + Accept: "application/vnd.github+json" + } + }; + const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; + if (token) options.headers.Authorization = `Bearer ${token}`; + + const req = https.get(options, (res) => { + let body = ""; + res.on("data", (chunk) => (body += chunk)); + res.on("end", () => { + if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { + try { + resolve(JSON.parse(body)); + } catch (err) { + reject(new Error(`Invalid JSON from GitHub: ${err.message}`)); + } + } else { + reject(new Error(`GitHub API ${res.statusCode}: ${body.slice(0, 200)}`)); + } + }); + }); + req.on("error", reject); + req.setTimeout(10000, () => { + req.destroy(new Error("GitHub API request timed out")); + }); + }); +} + +function readExisting() { + try { + return JSON.parse(fs.readFileSync(OUT, "utf8")); + } catch { + return null; + } +} + +(async () => { + let payload; + try { + const events = await fetchEvents(); + const mapped = events.map(mapEvent).filter((e) => e !== null).slice(0, MAX_EVENTS); + payload = { fetchedAt: new Date().toISOString(), events: mapped }; + console.log(`[github] fetched ${mapped.length} events for ${USERNAME}`); + } catch (err) { + console.warn(`[github] fetch failed (${err.message}); keeping existing data`); + const existing = readExisting(); + if (existing) { + console.log(`[github] using cached data from ${existing.fetchedAt}`); + return; + } + payload = { fetchedAt: new Date().toISOString(), events: [] }; + } + + fs.mkdirSync(path.dirname(OUT), { recursive: true }); + fs.writeFileSync(OUT, JSON.stringify(payload, null, 2) + "\n"); + console.log(`[github] wrote ${OUT}`); +})().catch((err) => { + console.error(err); + process.exit(0); // never block build +}); diff --git a/src/components/github/RecentActivity.tsx b/src/components/github/RecentActivity.tsx index 4a4a861..a190809 100644 --- a/src/components/github/RecentActivity.tsx +++ b/src/components/github/RecentActivity.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useRef, useState } from "react"; -import { Box, Typography, Chip, CircularProgress } from "@mui/material"; +import React from "react"; +import { Box, Typography, Chip } from "@mui/material"; import { Commit as CommitIcon, CallSplit as ForkIcon, @@ -7,41 +7,27 @@ import { MergeType as PRIcon, BugReport as IssueIcon, Folder as RepoIcon, - GitHub as GitHubIcon + GitHub as GitHubIcon, + OpenInNew as OpenInNewIcon } from "@mui/icons-material"; +import data from "./recent-activity.json"; const USERNAME = "anhvuFE"; -const CACHE_KEY = "gh-activity-v1"; -const CACHE_TTL_MS = 5 * 60 * 1000; -const MAX_EVENTS = 5; interface ActivityEvent { type: "commit" | "pr" | "issue" | "star" | "fork" | "create"; repo: string; message: string; - url: string; + url?: string; date: string; } -interface ApiEvent { - id: string; - type: string; - created_at: string; - repo: { name: string }; - payload: { - commits?: Array<{ message: string; sha: string }>; - action?: string; - pull_request?: { title: string; html_url: string; merged?: boolean }; - issue?: { title: string; html_url: string }; - ref_type?: string; - ref?: string; - }; +interface ActivityData { + fetchedAt: string; + events: ActivityEvent[]; } -function shorten(text: string, max = 60): string { - if (text.length <= max) return text; - return text.slice(0, max - 1).trimEnd() + "…"; -} +const activity = data as ActivityData; function relativeTime(iso: string): string { const diff = Date.now() - new Date(iso).getTime(); @@ -55,70 +41,6 @@ function relativeTime(iso: string): string { return new Date(iso).toLocaleDateString("en-US", { month: "short", day: "numeric" }); } -function mapEvent(e: ApiEvent): ActivityEvent | null { - const repoUrl = `https://github.com/${e.repo.name}`; - switch (e.type) { - case "PushEvent": { - const first = e.payload.commits?.[0]; - if (!first) return null; - return { - type: "commit", - repo: e.repo.name, - message: shorten(first.message.split("\n")[0]), - url: `${repoUrl}/commit/${first.sha}`, - date: e.created_at - }; - } - case "PullRequestEvent": - if (!e.payload.pull_request) return null; - return { - type: "pr", - repo: e.repo.name, - message: `${e.payload.action} PR: ${shorten(e.payload.pull_request.title)}`, - url: e.payload.pull_request.html_url, - date: e.created_at - }; - case "IssuesEvent": - if (!e.payload.issue) return null; - return { - type: "issue", - repo: e.repo.name, - message: `${e.payload.action} issue: ${shorten(e.payload.issue.title)}`, - url: e.payload.issue.html_url, - date: e.created_at - }; - case "WatchEvent": - return { - type: "star", - repo: e.repo.name, - message: `starred ${e.repo.name}`, - url: repoUrl, - date: e.created_at - }; - case "ForkEvent": - return { - type: "fork", - repo: e.repo.name, - message: `forked ${e.repo.name}`, - url: repoUrl, - date: e.created_at - }; - case "CreateEvent": - if (e.payload.ref_type === "repository" || e.payload.ref_type === "branch") { - return { - type: "create", - repo: e.repo.name, - message: `created ${e.payload.ref_type}${e.payload.ref ? ` ${e.payload.ref}` : ""}`, - url: repoUrl, - date: e.created_at - }; - } - return null; - default: - return null; - } -} - const iconMap: Record = { commit: , pr: , @@ -138,71 +60,10 @@ const colorMap: Record = { }; const RecentActivity: React.FC = () => { - const [events, setEvents] = useState(null); - const [error, setError] = useState(null); - const ref = useRef(null); - const fetched = useRef(false); - - useEffect(() => { - const el = ref.current; - if (!el) return; - if (typeof IntersectionObserver === "undefined") { - load(); - return; - } - const io = new IntersectionObserver( - (entries) => { - for (const entry of entries) { - if (entry.isIntersecting) { - io.disconnect(); - load(); - break; - } - } - }, - { rootMargin: "200px" } - ); - io.observe(el); - return () => io.disconnect(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const load = async () => { - if (fetched.current) return; - fetched.current = true; - - try { - const cached = sessionStorage.getItem(CACHE_KEY); - if (cached) { - const parsed = JSON.parse(cached) as { ts: number; data: ActivityEvent[] }; - if (Date.now() - parsed.ts < CACHE_TTL_MS) { - setEvents(parsed.data); - return; - } - } - } catch { - /* ignore */ - } - - try { - const res = await fetch(`https://api.github.com/users/${USERNAME}/events/public?per_page=30`); - if (!res.ok) throw new Error(`GitHub API ${res.status}`); - const json = (await res.json()) as ApiEvent[]; - const mapped = json.map(mapEvent).filter((e): e is ActivityEvent => e !== null).slice(0, MAX_EVENTS); - setEvents(mapped); - try { - sessionStorage.setItem(CACHE_KEY, JSON.stringify({ ts: Date.now(), data: mapped })); - } catch { - /* quota exceeded */ - } - } catch (err) { - setError(err instanceof Error ? err.message : "Failed to load activity"); - } - }; + const events = activity.events; return ( { color: "#0eaddf" }} > - Live activity + Recent activity - + > + updated {relativeTime(activity.fetchedAt)} + - {events === null && !error && ( - - - - Fetching from github.com… - + {events.length === 0 ? ( + + View activity on github.com/{USERNAME} + - )} - - {error && ( - - Couldn't load — see github.com/{USERNAME} - - )} - - {events && events.length === 0 && ( - - No public activity in the past few days. - - )} - - {events && events.length > 0 && ( + ) : ( {events.map((e, i) => ( Date: Sat, 9 May 2026 15:19:50 +0700 Subject: [PATCH 6/6] feat(seo): add OG, Twitter Card and JSON-LD structured data Adds the SEO surface that lets Google return a rich result and LinkedIn/Facebook/Twitter render a preview when the site is shared: - Open Graph tags (type=profile, url, title, description, image, locale, profile:* fields) - Twitter summary_large_image card - canonical URL - JSON-LD Person schema (jobTitle, sameAs, knowsAbout, worksFor, alumniOf, address) - JSON-LD WebSite schema - 1200x630 og-image generated from the avatar via sharp + SVG composition (scripts/generate-og-image.js) --- public/index.html | 85 +++++++++++++++++++++++++++++ public/og-image.png | Bin 0 -> 127384 bytes scripts/generate-og-image.js | 101 +++++++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 public/og-image.png create mode 100644 scripts/generate-og-image.js diff --git a/public/index.html b/public/index.html index 0aee0f4..10c4ec1 100644 --- a/public/index.html +++ b/public/index.html @@ -8,6 +8,35 @@ name="description" content="Vũ Xuân Anh — Full Stack Developer. React, TypeScript, Node. Portfolio and contact." /> + + + + + + + + + + + + + + + + + + + + + + + @@ -15,6 +44,62 @@ Vũ Xuân Anh — Full Stack Developer + + + + diff --git a/public/og-image.png b/public/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f52b536524b1cad0589e724e074fc4fed71279 GIT binary patch literal 127384 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

kfHE)w32XPr;17KAqDVWMPSG$d&%YQ*i| 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 + ), + blend: "dest-in" + } + ]) + .png() + .toBuffer(); + + const avatarX = PAD; + const avatarY = Math.round((H - AVATAR_SIZE) / 2); + const textX = avatarX + AVATAR_SIZE + 56; + + const svg = ` + + + + + + + + + + + + FULL STACK DEVELOPER + + + + Vũ Xuân Anh + + + + React · TypeScript · Node + + + + + + Hanoi, Vietnam · open to freelance & full-time + + + + anhvuFE.github.io/portfolio + + + + github.com/anhvuFE + + + `; + + await sharp(Buffer.from(svg)) + .composite([{ input: avatarBuffer, top: avatarY, left: avatarX }]) + .png({ quality: 92 }) + .toFile(OUT); + + const bytes = fs.statSync(OUT).size; + console.log(`og-image.png ${W}x${H} ${(bytes / 1024).toFixed(1)} KB`); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +});