A modern, interactive portfolio website built with React, TypeScript, and Vite. Features a responsive design, dark mode support, animated UI components, and an interactive chatbot powered by Gemini AI.
- Responsive Design - Mobile-first approach with tailored breakpoints
- Dark Mode - System-wide dark theme support with theme toggle
- Animated UI - Smooth animations using Framer Motion
- Interactive CV Viewer - PDF resume viewer with clickable links
- Typing Effect - Dynamic role display with typing animation
- Chatbot - AI-powered chat interface using Gemini API
- Project Showcase - Display of projects with descriptions and links
- Certifications - Organized certification gallery
- Gallery - Image gallery for creative work
- Graphic Designs - Showcase of graphic design portfolio
- Presentations - Presentation viewer and manager
- Frontend Framework: React 18 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS + PostCSS
- UI Components: shadcn/ui
- Animations: Framer Motion
- PDF Handling: react-pdf
- Icons: lucide-react
- Backend Services: Supabase
- AI: Google Gemini API
- Hosting: Vercel
- Testing: Vitest
- Node.js (v18 or higher)
- Bun (or npm/yarn as alternative)
-
Clone the repository
git clone <repository-url> cd Portfolio-main
-
Install dependencies
bun install # or npm install -
Create environment variables Create a
.env.localfile in the root directory:VITE_GEMINI_API_KEY=your_gemini_api_key VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key -
Start development server
bun dev # or npm run devThe app will be available at
http://localhost:5173
bun devbun run buildbun run previewbun run testPortfolio-main/
├── src/
│ ├── components/ # React components
│ │ ├── ui/ # shadcn/ui components
│ │ ├── Hero.tsx # Hero section with CV viewer
│ │ ├── Chatbot.tsx # AI chatbot component
│ │ └── ... # Other components
│ ├── pages/ # Page components
│ ├── app/
│ │ └── api/ # API routes
│ │ └── chat/ # Chat API endpoint
│ ├── services/ # External service integrations
│ │ └── geminiService.ts
│ ├── lib/ # Utility functions
│ │ └── supabase/ # Supabase configuration
│ ├── data/ # Static data
│ ├── hooks/ # Custom React hooks
│ ├── assets/ # Images and media
│ └── main.tsx # Entry point
├── public/ # Static files
│ ├── resumes/ # Resume/CV files
│ ├── gallery/ # Gallery images
│ ├── graphic-designs/ # Graphic design samples
│ └── presentations/ # Presentation files
├── supabase/ # Supabase functions
│ └── functions/
│ └── chat/ # Chat function
├── vite.config.ts # Vite configuration
├── tailwind.config.ts # Tailwind configuration
└── package.json # Dependencies
- Hero - Landing section with profile image, CV viewer, and contact buttons
- About - About me section
- TechStack - Technology skills display
- Projects - Project portfolio showcase
- Experience - Work experience timeline
- Certifications - Professional certifications
- Gallery - Creative work gallery
- GraphicDesigns - Graphic design portfolio
- Chatbot - AI-powered chat assistant
- PresentationViewer - Presentation display
The app defaults to dark mode and supports theme toggle. Theme preference is stored and persists across sessions.
Resume PDFs are viewed with full interactivity including:
- Text selection
- Clickable links and URLs
- Multi-page navigation
The layout adapts to different screen sizes:
- Mobile:
< 640px - Tablet:
640px - 1024px - Desktop:
> 1024px
| Variable | Description |
|---|---|
VITE_GEMINI_API_KEY |
Google Gemini API key for AI chatbot |
VITE_SUPABASE_URL |
Supabase project URL |
VITE_SUPABASE_ANON_KEY |
Supabase anonymous key |
This project is configured for deployment on Vercel. Configuration is in vercel.json.
- Push code to GitHub
- Connect repository to Vercel
- Add environment variables in Vercel dashboard
- Deploy automatically on push to main branch
bun run build
# Deploy the dist/ directoryThis project is personal portfolio content. Feel free to use it as a template but replace content with your own.
- Email: caadlawony@gmail.com
- Location: Bagamanoc, Catanduanes, Philippines
Built using React, TypeScript, and Vite