A Modern Cyber-Geek personal landing page for job hunting. Built as a single static page with a declarative, data-driven architecture: the UI is just a shell, all content lives in data/*.json.
Stack: Next.js 16 (App Router, static export) · TypeScript · Tailwind CSS v4 · Three.js / react-three-fiber · WebGL shaders · Canvas 2D · cmdk · motion.
- Bento-grid layout of frosted-glass "pods" over a cursor-tracing mesh grid.
- Dual-rail navigation: a
⌘K/Ctrl+Kcommand palette and a magnifying bottom dock. - Five "show-off" modules:
- Tech Stack Dashboard — htop-style panel + Canvas 2D particle text (mouse-repelled, spring-back).
- Experience Timeline — git graph +
git showdiff with text-scramble decode. - Live Music Visualizer — vinyl wall + GLSL shader spectrum driven by simulated data.
- Travel Footprints — 3D rotating globe (real coastlines) with radar-ping markers.
- System State + a styled
console.logeaster egg (open F12, then typehire).
- i18n: English (default), 中文, 日本語 — toggled from the dock, persisted to
localStorage.
Edit the JSON in data/ — no UI code changes needed. Next.js statically injects it at build time (SSG).
data/
├── profile.json # status, coords, tech-stack metrics, socials
├── timeline.json # career commits
├── concerts.json # live shows
└── travel.json # travel footprints (lat/lng + notes)
Any human-readable field can be either a plain string or a per-locale object that falls back to English:
"tagline": { "en": "Building...", "zh": "打造...", "ja": "..." }UI strings live in src/i18n/messages.ts. Add a locale in src/i18n/config.ts.
npm install
npm run dev # http://localhost:3000
npm run build # static export to ./outStatic export (output: "export"). Push to GitHub and import on Vercel (or any static host) — editing a data/*.json file and pushing re-triggers a build/deploy.