A modern, responsive portfolio built with Next.js 16, React 19, and TailwindCSS 4
Live Demo β’ Features β’ Tech Stack β’ Getting Started β’ Structure
- Dark/Light Theme Toggle - Seamless theme switching with system preference detection and localStorage persistence
- Smooth Animations - Built with Motion (Framer Motion) for fluid, modern animations
- Responsive Design - Mobile-first design that looks stunning on all devices
- Custom Typography - Utilizes Geist font family and custom Hanken Grotesk variable font
- Handwritten Font - Uses the Caveat Google Font for playful, handwritten annotations in the hero section
- Asset Preloading - Preloads essential images (e.g., Logo_easter.webp) to improve load performance and ensure instant display of the avatar Easter egg
- Dynamic Hero Backgrounds - Theme-aware background images for the hero section, adapting to light and dark modes.
- Profile Avatar - Animated profile image with theme-aware accent colors
- Interactive Avatar Easter Egg - Click the avatar to toggle a surprise version with ripple effects, bounceβpop animation, and a click sound
- Dynamic Background Images - Features distinct background images for light and dark themes, enhancing visual appeal.
- Personal Stats - Display years of experience, projects completed, and other metrics
- Social Links - Easy access to Twitter/X, LinkedIn, GitHub, Instagram, Pinterest, and Email
- Live Spotify Activity - Real-time display of currently playing or last played song via Spotify API integration, with robust fallback values for album art, song name, and artist information.
- Tech Stack Display - Interactive tech icons with tooltips showing expertise
- Career Timeline - Professional experience with role highlights
- Interactive Cards - Hover effects and smooth transitions
- Accomplishment Highlights - Key achievements with chevron animations
- Featured Projects Grid - Display of 7 production-ready projects
- Interactive Project Details - Project cards are clickable to open a full-screen modal with detailed information, animated transitions, and portal rendering.
- Project Cards - Each card includes:
- Project name and tagline
- Description and tech stack
- Status indicator
- Live demo and GitHub links
- Project Detail Modal - Displays an expanded view of a project with a larger image, tagline, detailed description, full tech stack, status, and a direct link to the live site.
- Show More/Less - Initially displays 4 projects with expandable view
- GitHub Activity Calendar - Visual contribution graph using
react-github-calendar - Contribution Counter - Real-time total contributions fetched via GitHub GraphQL API
- Profile Link - Direct link to GitHub profile
- Showcase of certifications, awards, and notable accomplishments
- Featured On Video Player - Embeds a testimonial video with a custom thumbnail overlay.
- Click-Outside-to-Pause - Automatically pauses the video if the user clicks outside the player area.
- Auto-Reset on End - Video state resets to the thumbnail view once playback finishes.
- Interactive Play Button - Overlay with a play icon that provides visual feedback on hover.
- Personal introduction with animated avatar
- Skills showcase with technology icons
- Website Visitor Counter - Displays the total number of unique visitors to the portfolio with an animated number display, fetched from a backend API.
- Dedicated Guestbook β A standalone page (
/guestbook) for visitors to leave messages, feedback, or greetings. - Integrated Comments β Utilizes the enhanced comments functionality for user interaction.
- SEO Optimized β Dedicated metadata for improved search engine visibility.
- User Authentication β Google OAuth integration with token handling via URL parameters and localStorage.
- Enhanced Login Redirect β Stores the current page path before Google OAuth, ensuring users are seamlessly returned to the exact page and comments section after successful authentication.
- Auth Success Page β Captures
accessTokenfrom OAuth redirect, stores it inlocalStorage, and intelligently redirects users back to their original page and the comments section. - View & Post Comments β Displays a paginated list of comments with avatars, names, timestamps, and allows loggedβin users to submit new comments.
- Responsive Design β Styled to match the siteβs theme and works seamlessly on mobile devices.
- Dynamic Sitemap - Auto-generated sitemap for better search engine indexing
- Robots.txt - Configured for optimal crawling
- Meta Tags - Comprehensive Open Graph and Twitter Card metadata
- Structured Data - Proper heading hierarchy and semantic HTML
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 16.2.0 | React Framework (App Router) |
| React | 19.2.4 | UI Library |
| TypeScript | 5.x | Type Safety |
| Technology | Purpose |
|---|---|
| TailwindCSS v4 | Utility-first CSS |
| tw-animate-css | CSS Animations |
| class-variance-authority | Component Variants |
| clsx | Conditional Classes |
| tailwind-merge | Class Merging |
| Technology | Purpose |
|---|---|
| Radix UI | Headless UI Primitives |
| Lucide React | Icon Library |
| Motion | Animations |
| Technology | Purpose |
|---|---|
| Axios | HTTP Client |
| react-github-calendar | GitHub Contributions |
| Technology | Purpose |
|---|---|
| @vercel/analytics | Website Analytics |
| @vercel/speed-insights | Real User Monitoring (RUM) & Insights |
| Technology | Purpose |
|---|---|
| ESLint | Code Linting |
| Prettier | Code Formatting |
| Husky | Git Hooks |
| lint-staged | Staged Files Linting |
next_portfolio/ βββ app/ # Next.js App Router β βββ blogs/ # Blog section β βββ guestbook/ # Guestbook page for visitor messages β β βββ page.tsx # Guestbook page content β βββ globals.css # Global styles & theme variables β βββ layout.tsx # Root layout with providers β βββ page.tsx # Home page with metadata β βββ robots.ts # Robots.txt configuration β βββ sitemap.ts # Dynamic sitemap generation β βββ components/ β βββ AboutMe/ # About section β βββ Achievments/ # Achievements section β βββ CountUp.jsx # Animated number display component β βββ Experience/ # Work experience section β βββ Footer/ # Footer component β β βββ Footer.tsx # Main footer layout β β βββ FooterBlur.tsx # Background blur effect for footer β β βββ VisitorCounter.tsx # Component to display website visitor count β βββ GitHub/ # GitHub activity section β β βββ GitHub.tsx # Server component (fetches data) β β βββ GitHubCalendarClient.tsx # Client component (renders calendar) β βββ HeroSection/ # Hero section components β β βββ Hero.tsx # Main hero wrapper β β βββ ActiveStatus.tsx # Discord status β β βββ GetInTouch.tsx # CTA button β β βββ Intro.tsx # Introduction text β β βββ SocialLinks.tsx # Social media links β β βββ SongActivity.tsx # Spotify integration β β βββ Stats.tsx # Personal statistics β β βββ TechStack.tsx # Technology icons β βββ Navbar/ # Navigation with theme toggle β βββ Projects/ # Projects section β β βββ Projects.tsx # Projects data & container β β βββ ProjectsGrid.tsx # Grid layout, handles project detail modal state and rendering via portal β β βββ ProjectCard.tsx # Individual project card, now clickable to open detail modal β βββ Comments/ # Comments section with authentication and posting β β βββ Comments.tsx # Client component for displaying and submitting comments β βββ ui/ # Reusable UI components β βββ hooks/ β βββ ThemeProvider.tsx # Theme context & hook β βββ lib/ β βββ utils.ts # Utility functions (cn helper) β βββ public/ # Static assets β βββ Logo.webp # Site logo β βββ HankenGrotesk-Variable.ttf # Custom font β βββ [project_images].webp # Project screenshots β βββ types/ # TypeScript type definitions β βββ configuration files βββ next.config.ts # Next.js configuration βββ tsconfig.json # TypeScript configuration βββ tailwind.config.ts # TailwindCSS configuration βββ eslint.config.mjs # ESLint configuration βββ .lintstagedrc.json # Lint-staged configuration
- Node.js 18.17 or later
- npm, yarn, pnpm, or bun
- Docker (if running with Docker)
-
Clone the repository
bash git clone https://github.com/kaihere14/next_portfolio.git cd next_portfolio
-
Install dependencies
bash npm install
yarn install
pnpm install
-
Set up environment variables
Create a
.env.localfile in the root directory:env
GITHUB_PATH=your_github_personal_access_token
NEXT_PUBLIC_SITE_URL=https://your-domain.com
-
Run the development server
bash npm run dev
-
Open your browser
Navigate to http://localhost:3000
-
Build the Docker image
bash docker build -t next_portfolio .
-
Run the Docker container
bash docker run -p 3000:3000 next_portfolio
-
Open your browser
Navigate to http://localhost:3000
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run format |
Format code with Prettier |
npm run check |
Check code formatting |
npm run check-types |
TypeScript type checking |
The portfolio supports dark and light modes with:
- System preference detection - Automatically matches OS theme
- Manual toggle - Switch themes via navbar button
- No flash - Theme is applied before hydration
- Persistence - Theme choice saved in localStorage
- Hero Backgrounds - Automatically switches between
light_hero.pnganddark_hero.pngbased on the active theme. - Smooth View Transitions - Enjoy a visually appealing transition effect when switching themes, originating from the click position.
- Reduced Motion Preference - The theme transition respects the user's
prefers-reduced-motionsetting for accessibility.
Theme-aware variables are defined in globals.css:
css :root { --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); /_ ... more variables _/ }
.dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); /_ ... more variables _/ }
/_ Variables used for view transitions _/ :root { --theme-click-x: 0px; --theme-click-y: 0px; }
Edit components/Projects/Projects.tsx:
typescript const projects: ProjectType[] = [ { id: "your-project", name: "Project Name", tagline: "Short Tagline", description: "Full description of the project", image: "/project_image.webp", tech: ["React", "Node.js", "MongoDB"], status: "All Systems Operational", link: "https://live-demo.com", githubLink: "https://github.com/username/repo", }, // ... more projects ];
Edit components/HeroSection/TechStack.tsx:
typescript export const techStack = [ { name: "Technology Name", icon: "https://skillicons.dev/icons?i=tech", desc: "Category", }, // ... more technologies ];
Edit components/HeroSection/SocialLinks.tsx to add or modify social media links.
The easiest way to deploy is using Vercel. This project is configured to automatically collect Vercel Analytics and Vercel Speed Insights when deployed to Vercel.
- Push your code to GitHub
- Import the repository in Vercel
- Add environment variables (if any)
- Deploy!
This portfolio can be deployed on any platform that supports Next.js, including those that leverage Docker containers:
- Netlify
- Railway
- AWS Amplify
- Self-hosted (VPS with Node.js or Docker)
- Docker-compatible platforms (e.g., Kubernetes, Docker Swarm, Google Cloud Run, AWS ECS/Fargate)
| Variable | Required | Description |
|---|---|---|
GITHUB_PATH |
Yes | GitHub Personal Access Token for GraphQL API |
NEXT_PUBLIC_SITE_URL |
No | Site URL for SEO (defaults to https://armandev.space) |
Contributions are welcome! Feel free to:
- 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 open source and available under the MIT License.
Arman Thakur - Full Stack Developer
- π Website: armandev.space
- π§ Email: armanthakur200814@gmail.com
- πΌ LinkedIn: Arman Thakur
- π¦ Twitter/X: @armankiyotaka
- π GitHub: @kaihere14
Made with β€οΈ by Arman Thakur
