A premium, full-stack portfolio with an integrated blog system β built with React 19, Express, and MongoDB
π Live Site β’ β¨ Features β’ π Tech Stack β’ π Architecture β’ π Getting Started β’ βοΈ Deployment
This portfolio follows a "Technical Precision" aesthetic β a grid-based, high-contrast design language inspired by:
- Bloomberg Terminal β Information density with clarity
- Linear β Clean, systematic design with subtle animations
- Vercel β Minimalist elegance with purposeful whitespace
| Aspect | Implementation |
|---|---|
| Layout | Strict grid system with consistent 5xl max-width container |
| Typography | Inter font family with tight tracking for headings |
| Colors | Slate-based palette with emerald/amber accents |
| Borders | Unified border-grid utility with centralized control |
| Dark Mode | Full dark mode support with smooth drop transition |
| Motion | Subtle, purposeful animations using Framer Motion |
A beautiful, instant theme switch with a liquid drop animation that expands from the toggle button:
- Smooth
clip-pathanimation using custom easing - Spring-based icon rotation with glow effects
- Ripple feedback on the toggle button
- Custom Cursor Follower β A playful, context-aware cursor that responds to hoverable elements
- Smooth Scroll β Lenis-powered butter-smooth scrolling experience
- Command Palette β Spotlight-style search with
Cmd+K/Ctrl+K - Gradient Switcher β Switchable hero gradients (Deep Space, Obsidian Luster, Aurora Borealis)
| Section | Description |
|---|---|
| Hero | Split-row layout with profile image, status indicators, and social links |
| Selected Work | Bento grid showcasing projects with live/code links |
| Experience | Timeline-style professional experience display |
| Technical Arsenal | 4Γ4 grid of technologies with shimmer hover effects |
| Figma Designs | Gallery of design work with "pop" hover animations |
| About | Personal introduction with CTA button |
| Visitor Counter | Real-time visitor tracking with animated display |
- Blog Feed (
/blog) β Grid of posts fetched from the API - Single Post (
/blog/:slug) β Dynamic post pages with full content - Admin Login (
/admin) β Secured admin authentication with JWT - Admin Dashboard (
/admin/dashboard) β Create, Edit, and Delete posts - 404 Page β Custom animated "Signal Lost" page for missing routes
- React Helmet β Dynamic
<title>and<meta>tags per page - Open Graph / Twitter Cards β Rich social sharing previews
- Sitemap & Robots.txt β Search engine indexing support
- Vercel Analytics β Built-in traffic tracking
React 19.2.0 β UI Library
React Router DOM 7.x β Client-side routing
Vite 6.0.0 β Build tool
Tailwind CSS 4.0.0 β Utility-first styling (v4 with @theme)
Framer Motion 12.x β Animation library
Lenis 1.3.17 β Smooth scroll engine
react-helmet-async β Dynamic SEO meta tags
Lucide React β Icon library
clsx + tailwind-merge β Conditional class utilities
@vercel/analytics β Traffic analytics
Express 5.x β Node.js web framework
Mongoose 9.x β MongoDB ODM
bcryptjs β Password hashing
jsonwebtoken (JWT) β Authentication tokens
cors β Cross-origin resource sharing
dotenv β Environment variable management
MongoDB Atlas β Cloud-hosted NoSQL database
Professional_Portfolio/
βββ src/ # Frontend Source
β βββ App.jsx # Root component & routing
β βββ main.jsx # Entry point (HelmetProvider)
β βββ index.css # Global styles & Tailwind config
β β
β βββ components/
β β βββ common/
β β β βββ SEO.jsx # Reusable SEO meta tag component
β β βββ layout/
β β β βββ Nav.jsx # Navigation with theme toggle & search
β β β βββ GridBackground.jsx # Full-page grid overlay
β β β βββ Footer.jsx # Site footer with links
β β βββ sections/
β β β βββ Hero.jsx # Hero with gradient switcher
β β β βββ Projects.jsx # Bento grid project showcase
β β β βββ Experience.jsx # Professional timeline
β β β βββ TechStack.jsx # Technology grid
β β β βββ FigmaDesigns.jsx # Design portfolio
β β β βββ About.jsx # Personal introduction
β β β βββ CodeShowcase.jsx # Code snippet display
β β βββ ui/
β β β βββ CursorFollower.jsx # Custom cursor component
β β β βββ SearchCommand.jsx # Command palette modal
β β β βββ VisitorCounter.jsx # Analytics display
β β β βββ SectionSeparator.jsx
β β β βββ CodeBlock.jsx # Syntax-highlighted code blocks
β β βββ utils/
β β βββ SmoothScroll.jsx # Lenis scroll wrapper
β β
β βββ pages/
β β βββ Home.jsx # Main portfolio page
β β βββ Blog.jsx # Blog feed (fetches from API)
β β βββ BlogPost.jsx # Single post page (dynamic)
β β βββ AdminLogin.jsx # Admin authentication
β β βββ AdminDashboard.jsx # Post management (CRUD)
β β βββ NotFound.jsx # 404 page with animation
β β
β βββ hooks/
β β βββ useCalEmbed.js # Cal.com scheduling integration
β βββ utils/
β βββ cn.js # clsx + tailwind-merge utility
β
βββ blog/server/ # Backend API
β βββ src/
β β βββ server.js # Express app entry point
β β βββ controllers/ # Route handlers
β β βββ models/ # Mongoose schemas (Post, Admin)
β β βββ routes/ # API route definitions
β β βββ middleware/ # Auth middleware (JWT)
β βββ vercel.json # Vercel serverless config
β βββ package.json
β
βββ public/ # Static assets
β βββ tech/ # Technology icons
β βββ robots.txt # Search engine rules
β βββ sitemap.xml # SEO sitemap
β
βββ vercel.json # Frontend SPA routing config
- Node.js 18+
- npm
- MongoDB Atlas account (for the blog backend)
# Clone the repository
git clone https://github.com/gitit24x7/MyPortfolio.git
# Navigate to frontend
cd Professional_Portfolio
# Install dependencies
npm install
# Create .env file
echo "VITE_API_URL=http://localhost:3001" > .env
# Start development server
npm run dev# Navigate to backend
cd Professional_Portfolio/blog/server
# Install dependencies
npm install
# Create .env file with your credentials
# DATABASE_URL=mongodb+srv://your-connection-string
# JWT_SECRET=your-secret-key
# Start backend server
npm run dev| Command | Location | Description |
|---|---|---|
npm run dev |
Frontend | Start Vite dev server with HMR |
npm run build |
Frontend | Production build to dist/ |
npm run preview |
Frontend | Preview production build locally |
npm run dev |
Backend | Start Express server with watch mode |
npm start |
Backend | Start Express server (production) |
This project is a Monorepo β both Frontend and Backend live in one repository. Deploy both to Vercel for free.
- Push code to GitHub.
- Import repository to Vercel.
- Root Directory:
Professional_Portfolio - Build Command:
npm run build - Output Directory:
dist - Environment Variables:
VITE_API_URLβ Your Backend URL (from Step 2)
- Import the same repository to Vercel as a new project.
- Project Name:
my-portfolio-backend - Root Directory:
Professional_Portfolio/blog/server - Framework Preset:
Other - Environment Variables:
DATABASE_URLβ Your MongoDB Atlas connection stringJWT_SECRETβ A random secret string
- Click Deploy and copy the domain.
- Go to your Frontend project on Vercel β Settings β Environment Variables.
- Set
VITE_API_URLto your Backend URL (e.g.,https://my-backend.vercel.app). - Redeploy the Frontend.
Edit the gradients array in Hero.jsx:
const gradients = [
{ name: "Deep Space", class: "bg-gradient-to-br from-black via-indigo-950 ..." },
{ name: "Custom", class: "bg-gradient-to-br from-..." }
]Update the projects array in Projects.jsx:
{
title: "New Project",
description: "...",
tech: ["React", "Node.js"],
size: "large", // or "small"
liveUrl: "https://...",
githubUrl: "https://github.com/..."
}This project is licensed under the MIT License β see the LICENSE file for details.
Built with β€οΈ by Aditya Ojha
