A modern, interactive portfolio website built with Next.js that features a ChatGPT-style conversation interface. Visitors discover your story, work, and contact options through an engaging chat experience.
- π£οΈ Conversational UI - Navigate your portfolio through a chat interface
- π― Story-Driven - Hook β Problem β Journey β Proof β Future flow
- π Dark/Light Mode - Theme toggle with localStorage persistence
- πΎ Persistent Chat - Chat progress saved to localStorage
- π± Responsive Design - Works beautifully on all devices
- βΏ Accessible - Keyboard navigation, ARIA labels, focus states
- π¨ Smooth Animations - Framer Motion powered transitions
- π Project Showcase - Case studies with detailed breakdowns
- π§ Contact Form - Integrated contact with validation
- Node.js 18+
- npm or yarn
# Navigate to the project
cd portfolio-chat
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm startsrc/
βββ app/ # Next.js App Router pages
β βββ page.tsx # Main chat experience
β βββ projects/ # Projects listing & case studies
β βββ resume/ # Resume page
β βββ api/contact/ # Contact form API
βββ components/
β βββ chat/ # Chat UI components
β βββ layout/ # TopBar, Footer, ContextPanel
β βββ ui/ # Reusable UI components
βββ context/ # React Context providers
β βββ ChatProvider.tsx # Chat state management
β βββ ThemeProvider.tsx # Theme state management
βββ data/ # Content data files
β βββ chatFlow.ts # Conversation nodes
β βββ projects.ts # Project data
β βββ profile.ts # Personal information
βββ lib/ # Utility functions
βββ utils.ts # Class name helpers
βββ storage.ts # localStorage helpers
βββ keywordRouter.ts # Free-text input routing
Edit src/data/profile.ts to add your information:
export const profile = {
name: "Your Name",
role: "Your Role",
tagline: "Your tagline here",
github: "https://github.com/yourusername",
linkedin: "https://linkedin.com/in/yourusername",
email: "you@example.com",
// ...
};Edit src/data/projects.ts to manage your projects:
export const projects: Project[] = [
{
slug: "my-project",
title: "My Awesome Project",
description: "A brief description",
role: "Full-Stack Developer",
techStack: ["Next.js", "TypeScript", "Tailwind CSS"],
highlights: [
"Key achievement 1",
"Key achievement 2",
],
metrics: [
{ label: "Users", value: "10K+" },
],
links: {
demo: "https://example.com",
github: "https://github.com/...",
},
problem: "The problem this project solved...",
solution: "How I solved it...",
result: "The outcome...",
images: [],
featured: true,
},
// Add more projects...
];Edit src/data/chatFlow.ts to modify the conversation:
export const chatNodes: Record<string, ChatNode> = {
hook: {
id: "hook",
sectionName: "Hook",
messages: [
"Your opening message",
"Another message",
],
suggestedReplies: [
{ text: "Button text", nextNodeId: "next-node-id" },
],
},
// Add more nodes...
};Edit src/app/globals.css to customize colors:
:root {
--color-accent: 20 184 166; /* Teal accent */
/* ... other colors */
}
[data-theme="dark"] {
--color-background: 15 23 42;
/* ... dark theme colors */
}| Route | Description |
|---|---|
/ |
Main chat experience |
/projects |
Grid view of all projects |
/projects/[slug] |
Individual project case study |
/resume |
Resume page with download |
/api/contact |
Contact form handler (POST) |
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS 4
- Animations: Framer Motion
- Icons: Lucide React
- State: React Context + localStorage
- Push to GitHub
- Import to Vercel
- Deploy
The app is a standard Next.js application and can be deployed to:
- Netlify
- Railway
- AWS Amplify
- Any Node.js hosting
The /api/contact endpoint accepts POST requests with:
{
"name": "Visitor Name",
"email": "visitor@example.com",
"message": "Hello!"
}To send actual emails, integrate a service like:
MIT License - feel free to use this for your own portfolio!
If you find this helpful, consider:
- β Starring the repo
- π Reporting issues
- π€ Contributing improvements