A modern, full-stack personal portfolio website built with Next.js, featuring a dynamic admin panel for content management and a beautiful, responsive design.
- Responsive Design: Beautiful, modern UI that works on all devices
- Dark/Light Theme: Toggle between dark and light modes
- Project Showcase: Display your projects with images, descriptions, and links
- Photo Gallery: Showcase your photography or visual work
- About Section: Tell your story with dynamic content management
- Contact Form: Integrated contact form with email notifications
- Smooth Animations: Enhanced user experience with smooth transitions
- Content Management: Full CRUD operations for all content
- Project Management: Add, edit, and delete projects with image uploads
- Photo Management: Upload and organize photos for your gallery
- About Me Editor: Update your personal information and bio
- Contact Settings: Configure contact information and form settings
- Experience & Education: Manage your professional background
- Tech Stack Management: Showcase your skills and technologies
- Social Links: Manage your social media presence
- Authentication: Secure GitHub OAuth integration
- File Uploads: Image upload functionality for projects and photos
- Form Handling: Contact form with Web3Forms integration
- Real-time Database: Convex backend for instant data updates
- Type Safety: Full TypeScript implementation
- Modern Styling: Tailwind CSS for responsive design
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Database: Convex
- Authentication: GitHub OAuth
- Forms: Web3Forms for contact submissions
- UI Components: Custom components with Lucide icons
- Deployment: Vercel-ready
- Node.js 18+
- npm/yarn/pnpm
- Convex account
- GitHub OAuth app (for admin access)
- Web3Forms account (for contact form)
-
Clone the repository
git clone <your-repo-url> cd SamCux-Portfolio
-
Install dependencies
npm install # or yarn install # or pnpm install
-
Set up environment variables Create a
.env.localfile in the root directory:# Convex CONVEX_DEPLOYMENT=your-convex-deployment NEXT_PUBLIC_CONVEX_URL=your-convex-url # GitHub OAuth GITHUB_CLIENT_ID=your-github-client-id GITHUB_CLIENT_SECRET=your-github-client-secret NEXTAUTH_SECRET=your-nextauth-secret NEXTAUTH_URL=http://localhost:3000
-
Set up Convex
npx convex dev
-
Run the development server
npm run dev # or yarn dev # or pnpm dev
-
Open your browser Navigate to http://localhost:3000
├── app/ # Next.js App Router pages
│ ├── (frontend)/ # Public portfolio pages
│ ├── admin/ # Admin panel pages
│ └── api/ # API routes
├── components/ # Reusable React components
│ ├── Admin/ # Admin panel components
│ ├── Contact/ # Contact form components
│ ├── Home/ # Homepage components
│ ├── Photos/ # Photo gallery components
│ ├── Projects/ # Project showcase components
│ └── ui/ # UI utility components
├── convex/ # Convex backend functions
├── hooks/ # Custom React hooks
├── lib/ # Utility functions
├── public/ # Static assets
└── styles/ # Global styles
- Set up GitHub OAuth in your GitHub Developer Settings
- Add your GitHub username to the Convex auth configuration
- Access the admin panel at
/adminafter authentication
- Create a Web3Forms account at web3forms.com
- Get your API key
- Configure it in the admin panel under Contact settings
- Update colors in
tailwind.config.ts - Modify components in the
components/directory - Add new admin features in
app/admin/
- Home (
/): Landing page with hero section - About (
/about): Personal information and bio - Projects (
/projects): Project showcase - Photos (
/photos): Photo gallery - Contact (
/contact): Contact form and information - Admin Panel (
/admin): Content management (requires authentication)
The easiest way to deploy is using Vercel:
- Push your code to GitHub
- Connect your repository to Vercel
- Configure environment variables in Vercel dashboard
- Deploy!
For other platforms, ensure you have:
- Node.js 18+ runtime
- Environment variables configured
- Convex deployment set up
Feel free to reach out if you have any questions or suggestions!
This project is open source and available under the MIT License.