A modern, full-stack portfolio website built with Next.js 15, React 19, and TypeScript. Features an interactive design, blog system, authentication, and comprehensive project showcase.
- Animated Dot Background: Canvas-based particle animation that responds to mouse movement
- Smooth Scrolling: Enhanced user experience with scroll-to-top functionality
- Section Navigation: Dynamic section selector for easy page navigation
- Responsive Design: Optimized for all device sizes
- Blog System: Full CRUD blog functionality with slug-based routing
- Timeline Component: Interactive career/education timeline
- Project Showcase: Comprehensive portfolio of development work
- Technology Stack Display: Visual representation of skills and proficiency
- User Registration/Login: Secure authentication system
- JWT Token Management: Secure session handling
- Password Encryption: bcryptjs for secure password hashing
- Protected Routes: Role-based access control
- MongoDB Integration: Full database connectivity for content management
- Dynamic Content: Real-time data fetching and updates
- Blog Management: Complete blog post lifecycle management
- React 19 - Latest React with concurrent features
- Next.js 15 - Full-stack React framework with App Router
- TypeScript - Type-safe development
- SCSS Modules - Modular styling with advanced CSS features
- React Icons - Comprehensive icon library
- Next.js API Routes - Serverless API endpoints
- MongoDB - NoSQL database for content storage
- JWT - JSON Web Token authentication
- bcryptjs - Password hashing and security
- Docker - Containerized deployment
- GitHub Actions - CI/CD pipeline
- ESLint - Code quality and consistency
- Vercel - Production deployment platform
- Node.js 18+
- MongoDB instance (local or cloud)
- GitHub Personal Access Token (for repository data)
- Docker (optional, for containerized deployment)
-
Clone the repository
git clone <your-repository-url> cd Portfolio-Website
-
Install dependencies
npm install
-
Environment Setup Create a
.env.localfile in the root directory:MONGODB_URI=your_mongodb_connection_string CLIENT_DB=portfolio JWT_SECRET=your_jwt_secret_key GITHUB_TOKEN=your_github_personal_access_token
GitHub Token Setup:
- Go to GitHub Settings > Personal Access Tokens
- Click "Generate new token (classic)"
- Select scopes:
repo(for public repos) orrepo+ additional permissions (for private repos) - Copy the token and add it to your
.env.localfile - Note: Without a token, GitHub API rate limits are much more restrictive (60 vs 5000 requests/hour)
-
Initialize Database
npm run init-db
-
Start Development Server
npm run dev
Open http://localhost:3000 to view the website.
src/
βββ app/ # Next.js App Router
β βββ _components/ # Reusable React components
β β βββ about.tsx # About section component
β β βββ blogsComponent.tsx # Blog listing component
β β βββ dotbackground.tsx # Animated background
β β βββ footer.tsx # Site footer
β β βββ header.tsx # Navigation header
β β βββ projects.tsx # Project showcase
β β βββ technology.tsx # Tech stack display
β β βββ timeline.tsx # Career timeline
β βββ api/ # API routes
β β βββ auth/ # Authentication endpoints
β β βββ blogs/ # Blog CRUD operations
β β βββ github-repos/ # GitHub integration
β β βββ timeline/ # Timeline data
β βββ blogs/ # Blog pages
β βββ register/ # User registration
βββ context/ # React Context providers
βββ models/ # TypeScript type definitions
βββ styles/ # SCSS modules
βββ utils/ # Utility functions
# Build the Docker image
docker build -t portfolio-website .
# Run the container
docker run -p 3000:3000 --env-file .env.local portfolio-website# Start all services
docker-compose up -d
# Stop all services
docker-compose downnpm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run init-db # Initialize databasePOST /api/auth/register- User registrationPOST /api/auth/login- User loginPOST /api/auth/verify- Token verification
GET /api/blogs- Retrieve all blog postsGET /api/blogs/[slug]- Get specific blog postPOST /api/blogs- Create new blog postPUT /api/blogs/[slug]- Update blog postDELETE /api/blogs/[slug]- Delete blog post
GET /api/timeline- Career timeline dataGET /api/tech- Technology stack informationGET /api/github-repos- GitHub repository data
The dot background uses HTML5 Canvas to create a responsive particle system that reacts to mouse movement, providing an engaging visual experience.
Full-featured blog with:
- Markdown support
- Slug-based routing
- SEO optimization
- Draft/publish workflow
- Scheduled publishing
Dynamic visualization of skills and technologies with:
- Animated progress bars
- Technology logos
- Experience levels
- Project associations
- Password Hashing: bcryptjs with salt rounds
- JWT Authentication: Secure token-based auth
- CORS Protection: Configured for production
- Input Validation: Server-side validation for all inputs
- XSS Protection: Sanitized content rendering
- Mobile-first approach
- Optimized for tablets and desktops
- Touch-friendly interactions
- Adaptive layouts
- Next.js App Router: Latest routing system
- Image Optimization: Next.js Image component
- Code Splitting: Automatic route-based splitting
- Static Generation: Pre-built pages where possible
- Turbopack: Ultra-fast development builds
- Built-in performance monitoring
- Error boundary implementation
- SEO optimized meta tags
- Structured data for search engines
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Erick Tran - enVId Tech
- Next.js team for the amazing framework
- React team for the powerful library
- MongoDB for robust database solutions
- Vercel for seamless deployment
β Star this repository if you found it helpful!