A Next.js (App Router) + Tailwind rebuild of a personal resume-and-case-study page.
npm install
npm run devOpen http://localhost:3000.
Everything you need to change lives in data/resume.js β name, contact info,
thesis line, impact metrics, experience, case studies, skills, and education.
Replace every [bracketed] placeholder, then the whole site updates.
This follows the classic vCard layout: a fixed profile sidebar (photo, name, social links, download-CV button) next to a tabbed content area β About, Resume, Projects, Blog, Contact β that switches sections without scrolling the whole page.
app/layout.jsβ fonts (Fraunces, Public Sans, JetBrains Mono) + global shellapp/page.jsβ manages active tab state, renders Sidebar + the current tabapp/blog/[slug]/page.jsβ full, individually-shareable page per blog postcomponents/Sidebar.jsxβ profile photo/avatar + tab navigation + social iconscomponents/AboutTab.jsxβ thesis, bio, impact metrics, tech stack iconscomponents/ResumeTab.jsxβ experience, education, skills, certificationscomponents/ProjectsTab.jsxβ projects grid with thumbnailscomponents/BlogTab.jsxβ post preview cards with cover imagescomponents/Thumbnail.jsxβ shared image component; shows a soft gradient placeholder instead of a broken-image icon until a real file exists at the pathdata/resume.jsβ your info, single source of truthdata/posts.jsβ your blog posts, single source of truth
Drop files into public/ at the paths already referenced in the data files β
the placeholders will be replaced automatically, no code changes needed:
- Profile photo:
public/profile.jpg(referenced asresume.photo) - Project screenshots:
public/projects/<name>.png(seeimagefield on each entry indata/resume.js) - Blog covers:
public/blog/<slug>.jpg(seecoverfield on each entry indata/posts.js)
Until a file exists at a given path, that spot shows a neutral placeholder instead of a broken image β safe to ship before your real assets are ready.
Push to GitHub and import into Vercel, or run npm run build && npm run start.