Kahuna | Kakapa Student Performance Manager & QA-Elective Lead at WeThinkCode_ Blockchain Enthusiast | Mentor | Quality-Driven Technologist
A modern, animated portfolio website showcasing my professional journey, technical skills, projects, and blog posts. Built with cutting-edge web technologies and designed for performance, accessibility, and user experience.
- π¨ Modern Design: Clean, professional interface with smooth animations and transitions
- π± Fully Responsive: Mobile-first approach, optimized for all screen sizes
- β‘ High Performance: Optimized for speed with Next.js 15 and static generation
- π Dark Mode: Seamless light/dark theme switching with system preference detection
- βΏ Accessible: WCAG compliant with semantic HTML and ARIA labels
- β¨ Interactive Animations: Powered by Framer Motion for engaging user experience
- π Blog System: Dynamic blog with categories, tags, search, and filtering
- π CV Download: Direct download of professional resume
- π SEO Optimized: Meta tags, Open Graph, and structured data for better discoverability
- Framework: Next.js 15.4.2 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS 3.4
- Animations: Framer Motion 11
- Icons: Lucide React
- Package Manager: npm
- Linting: ESLint
- Type Checking: TypeScript strict mode
- Deployment: Vercel (recommended)
- Node.js 18+ installed
- npm or yarn package manager
-
Clone the repository:
git clone https://github.com/Kakapa98/portfolio-2025.git cd portfolio-2025 -
Install dependencies:
npm install
-
Run the development server:
npm run dev
-
Open your browser and navigate to:
http://localhost:3000
# Create optimized production build
npm run build
# Start production server
npm startprofile/
βββ public/ # Static assets
β βββ Mpho-Mofokeng-CV.pdf # Resume/CV file
β βββ manifest.json # PWA manifest
β βββ robots.txt # SEO robots file
βββ src/
β βββ app/ # Next.js App Router
β β βββ admin/ # Admin panel (protected)
β β βββ blog/ # Blog pages
β β β βββ [slug]/ # Individual blog post pages
β β β βββ page.tsx # Blog listing page
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout with metadata
β β βββ page.tsx # Homepage
β βββ components/ # Reusable React components
β β βββ AnimatedBackground.tsx
β β βββ BlogCard.tsx
β β βββ BlogEditor.tsx
β β βββ FloatingElements.tsx
β β βββ MobileMenu.tsx
β β βββ ParticleSystem.tsx
β β βββ TypewriterText.tsx
β βββ contexts/ # React Context providers
β β βββ BlogContext.tsx
β βββ data/ # Data and content
β β βββ blog-posts.ts # Blog posts data
β βββ types/ # TypeScript type definitions
β β βββ blog.ts
β βββ lib/ # Utility functions (if any)
βββ .eslintrc.json # ESLint configuration
βββ .gitignore # Git ignore rules
βββ next.config.ts # Next.js configuration
βββ package.json # Dependencies and scripts
βββ postcss.config.mjs # PostCSS configuration
βββ tailwind.config.ts # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ README.md # This file
The portfolio includes a fully functional blog system with:
- Categories: Quality Assurance, Blockchain, Education, Technology, Personal
- Features: Search, category filtering, tags, read time estimation
- Dynamic Routing: Individual pages for each blog post
- Responsive Cards: Beautiful blog post previews with animations
- Data Storage: Browser localStorage for client-side persistence
Blog posts are stored in src/data/blog-posts.ts with the following structure:
{
id: string
title: string
slug: string
excerpt: string
content: string
category: BlogCategory
date: string
readTime: string
tags: string[]
published: boolean
}The color palette is defined in tailwind.config.ts:
colors: {
primary: {
50: '#eff6ff',
// ... blue shades
900: '#1e3a8a',
},
secondary: {
50: '#f0fdf4',
// ... green shades
900: '#14532d',
}
}Update your details in the following files:
-
Homepage (
src/app/page.tsx):- Hero section (name, title, description)
- About section (bio, professional focus)
- Skills section (technologies, tools)
- Projects section (current work)
- Contact section (email, social links)
-
Metadata (
src/app/layout.tsx):- SEO meta tags
- Open Graph data
- Site title and description
-
CV/Resume (
public/Mpho-Mofokeng-CV.pdf):- Replace with your own PDF resume
Optimized for excellent performance scores:
- β‘ Lighthouse Score: 95+ across all categories
- π― First Contentful Paint: <1.5s
- πΌοΈ Largest Contentful Paint: <2.5s
- π Cumulative Layout Shift: <0.1
- π Time to Interactive: <3s
- Static page generation where possible
- Optimized images and assets
- Code splitting and lazy loading
- Minimal JavaScript bundle size
- Efficient CSS with Tailwind's purge
This project is optimized for Vercel:
-
Push to GitHub:
git add . git commit -m "Initial commit" git push origin main
-
Import to Vercel:
- Go to vercel.com
- Click "New Project"
- Import your GitHub repository
- Vercel will auto-detect Next.js settings
-
Deploy:
- Click "Deploy"
- Your site will be live in minutes
- Automatic deployments on every push
The project can also be deployed to:
- Netlify: Use the Next.js plugin
- AWS Amplify: Connect your repository
- Railway: One-click deployment
- Self-hosted: Use
npm run buildandnpm start
No environment variables are required for basic functionality. The blog system uses browser localStorage for data persistence.
For production deployments, consider adding:
# Optional: Analytics
NEXT_PUBLIC_GA_ID=your-google-analytics-id
# Optional: Contact form backend
NEXT_PUBLIC_FORM_ENDPOINT=your-form-endpointThis is a personal portfolio project, but suggestions and feedback are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/improvement) - Commit your changes (
git commit -m 'Add improvement') - Push to the branch (
git push origin feature/improvement) - Open a Pull Request
Mpho Alphios Mofokeng (Kahuna)
- π§ Personal: alphios988@gmail.com
- π§ Work: mphomofokeng@wethinkcode.co.za
- πΌ LinkedIn: linkedin.com/in/mpho-mofokeng-9b3346237
- π GitHub: @Kakapa98
- π Location: Johannesburg, South Africa
This project is open source and available under the MIT License.
- Built with Next.js
- Styled with Tailwind CSS
- Animated with Framer Motion
- Icons from Lucide
- Deployed on Vercel
Built with β€οΈ by Mpho Alphios Mofokeng (Kahuna)
Empowering the next generation through technology, mentorship, and innovation