A modern, responsive portfolio website showcasing my work, experience, and skills as a full-stack developer. Built with Next.js, TypeScript, and Tailwind CSS.
Visit the live site: https://info-appiahkelvin.vercel.app
- Modern UI/UX: Clean, glassmorphism-inspired design with smooth animations
- Dark/Light Mode: Toggle between dark and light themes with persistent preferences
- Responsive Design: Fully responsive across all device sizes
- Project Showcase: Display featured projects with galleries, technologies, and impact
- GitHub Integration: Live GitHub contribution calendar
- SEO Optimized: Comprehensive meta tags, Open Graph, and structured data
- Performance: Optimized images, caching, and fast page loads
- Accessibility: Semantic HTML, ARIA labels, and keyboard navigation support
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: shadcn/ui
- Database: Supabase (PostgreSQL)
- Icons: Lucide React, React Icons
- Carousel: Embla Carousel
- Marquee: react-fast-marquee
- GitHub Calendar: react-github-calendar
- Forms: React Hook Form + Zod
- Poppins: Headings and primary text
- Geist Mono: Code and technical content
Before you begin, ensure you have the following installed:
- Node.js 20.x or higher
- npm, yarn, or pnpm
- Git
git clone https://github.com/yourusername/folio.git
cd folionpm install
# or
yarn install
# or
pnpm installCreate a .env.local file in the root directory:
# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY=your_supabase_anon_key
# Site Configuration (optional)
NEXT_PUBLIC_SITE_URL=https://yourdomain.com- Create a new project at supabase.com
- Create a
projectstable with the following schema:
CREATE TABLE projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
description TEXT NOT NULL,
hero_image TEXT NOT NULL,
gallery TEXT[] DEFAULT '{}',
url TEXT DEFAULT '',
github TEXT DEFAULT '',
technologies TEXT[] DEFAULT '{}',
team TEXT NOT NULL,
role TEXT NOT NULL,
start_date TIMESTAMPTZ NOT NULL,
end_date TIMESTAMPTZ NOT NULL,
status TEXT NOT NULL,
category TEXT NOT NULL,
is_featured BOOLEAN DEFAULT false,
key_features TEXT[] DEFAULT '{}',
impact TEXT DEFAULT '',
created_at TIMESTAMPTZ DEFAULT NOW()
);- Enable Row Level Security (RLS) and configure policies as needed
npm run dev
# or
yarn dev
# or
pnpm devOpen http://localhost:3000 in your browser to see the result.
folio/
βββ app/
β βββ assets/ # Images, SVGs, and static assets
β βββ components/ # React components
β β βββ Content/ # Main content sections
β β β βββ About/ # About, Experience, Education, Skills
β β β βββ Projects/# Project showcase components
β β βββ ProfileCard/ # Profile sidebar component
β βββ Global/ # Global utilities and constants
β βββ globals.css # Global styles and Tailwind config
β βββ layout.tsx # Root layout with metadata
β βββ page.tsx # Home page
βββ components/
β βββ ui/ # shadcn/ui components
βββ lib/
β βββ utils.ts # Utility functions
βββ utils/
β βββ supabase/ # Supabase client utilities
βββ public/ # Static files (favicons, manifest, etc.)
βββ README.md
Edit app/Global/Strings.tsx to update:
- Profile information
- About content
- Experience entries
- Education details
- Skills and technologies
- Social media links
- Global styles:
app/globals.css - Theme colors: CSS custom properties in
:rootand.dark - Component styles: Tailwind classes with custom utilities
- Profile image:
app/assets/images/profile2.png - Background texture:
app/assets/images/bg-texture.png - Technology icons:
app/assets/svgs/
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run format- Format code with Prettiernpm run format:check- Check code formatting
- Push your code to GitHub
- Import your repository on Vercel
- Add environment variables in Vercel dashboard
- Deploy!
The site will be automatically deployed on every push to the main branch.
Make sure to set these in your deployment platform:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEYNEXT_PUBLIC_SITE_URL(optional, defaults to Vercel URL)
- Meta Tags: Comprehensive Open Graph and Twitter Card support
- Structured Data: JSON-LD schema for Person and Organization
- Image Optimization: Next.js Image component with automatic optimization
- Caching: Supabase queries cached for optimal performance
- Font Optimization: Next.js font optimization for Poppins and Geist Mono
- Semantic HTML5 elements
- ARIA labels and roles
- Keyboard navigation support
- Screen reader friendly
- WCAG compliant color contrasts
This project is private and proprietary.
Kelvin Appiah
- Portfolio: https://info-appiahkelvin.vercel.app
- GitHub: @KelpyShades
- Founder: 404-Not-Null
- Lead: Class-io
- shadcn/ui for beautiful UI components
- Vercel for hosting
- Supabase for backend infrastructure
- Next.js team for the amazing framework
Built with β€οΈ using Next.js and TypeScript