Personal portfolio website built with Next.js, showcasing my experience, projects, and contact information.
Live site: stoppieboy-github-io.vercel.app
| Layer | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Styling | Tailwind CSS |
| Data fetching | Apollo Client + GitHub GraphQL API |
| KV store | Vercel KV |
| Font | Urbanist via next/font/google |
| Deployment | Vercel |
data.json — no code change needed to add a new roleapp/
layout.jsx # Root layout, metadata (OG + Twitter cards), Navbar
page.jsx # Page composition — assembles all sections
api/get-repos/ # API route — fetches pinned GitHub repos via GraphQL
components/
Home.jsx # Hero section
About.jsx # About section
Experience.jsx # Experience section
Projects.jsx # Projects section (client component)
Contact.jsx # Contact section
Navbar.jsx # Fixed navbar with mobile hamburger menu
SocialLinks.jsx # Vertical social icon strip
Skill.jsx # Inline skill highlight chip
data.json # Content data — experience entries, about text, email
public/assets/ # Static icons and images
styles/globals.css # Global styles and Tailwind component layer
read:user scope (for the GraphQL API)about_text and email in production)git clone https://github.com/stoppieboy/stoppieboy.github.io.git
cd stoppieboy.github.io
npm install
.env.local file:
GITHUB_ACCESS_TOKEN=your_github_token_here
KV_REST_API_URL=your_vercel_kv_url
KV_REST_API_TOKEN=your_vercel_kv_token
npm run dev
Open http://localhost:3000.
npm run build
npm start
npm run lint
npm test
All site content is driven by data.json — no component code changes needed for routine updates:
{
"email": "you@example.com",
"about_text": "...",
"experience": [
{
"title": "Job Title",
"company": "Company Name",
"duration": "Month Year – Month Year",
"description": ["Bullet one.", "Bullet two."]
}
]
}
Pinned GitHub projects are fetched live from the GitHub API — pin/unpin repos on GitHub and they update automatically.
The site is deployed on Vercel. Push to main to trigger a production deploy. Environment variables (GITHUB_ACCESS_TOKEN, KV_REST_API_URL, KV_REST_API_TOKEN) must be set in the Vercel project settings.