Skip to content

Shreekant-04/portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Portfolio

A modern, production-ready personal portfolio built with React Router, Vite, TypeScript, and a Node.js/Express backend. Showcases projects, skills, certifications, and contact information, with an admin panel for content management.

Portfolio Screenshot


Features

  • ⚑️ Fast, optimized, and SEO-friendly
  • πŸ› οΈ Built with React Router, TypeScript, and Vite
  • 🎨 Tailwind CSS for rapid UI development
  • πŸ“± Responsive and mobile-friendly
  • πŸ† Dynamic skills and certifications (fetched from backend)
  • πŸ—‚οΈ Project showcase with images and categories
  • πŸ“¬ Contact page with email integration
  • 🧩 Modular component structure
  • 🐳 Docker-ready for deployment
  • πŸ•ΈοΈ PWA support (manifest, favicons, offline-ready)
  • πŸ“ˆ Analytics and performance insights (Vercel Analytics, Speed Insights)
  • πŸ”’ Admin panel for managing portfolio content

Tech Stack

  • Frontend: React, React Router, Vite, TypeScript, Tailwind CSS
  • Backend: Node.js, Express, MongoDB, Mongoose
  • Admin: React + Vite (separate app)
  • Other: Docker, PWA, SEO meta tags, Open Graph, Email (Nodemailer), Analytics

Monorepo Structure

portfolio/
β”‚
β”œβ”€β”€ admin/         # Admin panel (React + Vite)
β”œβ”€β”€ frontend/      # Main portfolio frontend (React, Vite, TypeScript)
β”œβ”€β”€ server/        # Backend API (Node.js, Express, MongoDB)
└── README.md      # Project documentation

Frontend

  • app/components/ – React components (Navbar, Sidebar, Home, Projects, Skills, Contact, etc.)
  • app/routes/ – Route files for each page
  • app/assets/ – Images and icons
  • public/ – Favicons, manifest, robots.txt, sitemap, Open Graph images

Backend

  • controllers/ – API controllers (projects, certificates, contact, etc.)
  • models/ – Mongoose schemas (Project, Certificate)
  • routes/ – Express routes (public, admin, auth)
  • utils/ – Utilities (email, error handling, logger)
  • views/ – Email templates (Pug)
  • public/ – Static files

Admin

  • React + Vite app for managing portfolio content (projects, skills, certificates, etc.)

Getting Started

Prerequisites

  • Node.js (v18+ recommended)
  • npm or yarn
  • MongoDB

Installation

Clone the repository and install dependencies for each package:

# Clone the repository
git clone https://github.com/Shreekant-04/portfolio.git
cd portfolio

# Install frontend
cd frontend
npm install

# Install backend
cd ../server
npm install

# Install admin panel
cd ../admin
npm install

Development

Frontend

cd frontend
npm run dev

Visit http://localhost:5173

Backend

cd server
npm start

API runs on http://localhost:2204 by default.

Admin

cd admin
npm run dev

Visit http://localhost:5174 (or as configured).

Building for Production

# Frontend
cd frontend
npm run build

# Backend
cd ../server
npm run build # (if applicable)

Deployment

Docker

Build and run with Docker:

docker build -t portfolio-app .
docker run -p 3000:3000 portfolio-app

Other Platforms

You can deploy the build output to any static hosting or Node.js server, including Vercel, Netlify, AWS, Azure, DigitalOcean, and more.


API Endpoints

  • GET /api/v1/public/projects – List all projects
  • GET /api/v1/public/certificate – List all certificates
  • POST /api/v1/public/contact – Send a contact message (email integration)

PWA & SEO

  • Includes manifest.json, favicons, robots.txt, and sitemap.xml for SEO and PWA support.
  • Meta tags for Open Graph and Twitter Cards are set up for all main pages.

Folder Structure

portfolio
β”œβ”€ admin
β”‚  β”œβ”€ eslint.config.js
β”‚  β”œβ”€ index.html
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ public
β”‚  β”‚  └─ vite.svg
β”‚  β”œβ”€ README.md
β”‚  β”œβ”€ src
β”‚  β”‚  β”œβ”€ App.css
β”‚  β”‚  β”œβ”€ App.jsx
β”‚  β”‚  β”œβ”€ assets
β”‚  β”‚  β”‚  └─ react.svg
β”‚  β”‚  β”œβ”€ index.css
β”‚  β”‚  └─ main.jsx
β”‚  └─ vite.config.js
β”œβ”€ frontend
β”‚  β”œβ”€ .dockerignore
β”‚  β”œβ”€ .react-router
β”‚  β”‚  └─ types
β”‚  β”‚     β”œβ”€ +future.ts
β”‚  β”‚     β”œβ”€ +routes.ts
β”‚  β”‚     β”œβ”€ +server-build.d.ts
β”‚  β”‚     └─ app
β”‚  β”‚        β”œβ”€ +types
β”‚  β”‚        β”‚  └─ root.ts
β”‚  β”‚        └─ routes
β”‚  β”‚           └─ +types
β”‚  β”‚              β”œβ”€ contact.ts
β”‚  β”‚              β”œβ”€ home.ts
β”‚  β”‚              β”œβ”€ projects.ts
β”‚  β”‚              β”œβ”€ search.ts
β”‚  β”‚              └─ skills.ts
β”‚  β”œβ”€ app
β”‚  β”‚  β”œβ”€ app.css
β”‚  β”‚  β”œβ”€ assets
β”‚  β”‚  β”‚  β”œβ”€ images
β”‚  β”‚  β”‚  β”‚  β”œβ”€ avatar-1.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ avatar-2.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ avatar-3.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ avatar-4.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-1.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-2.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-3.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-4.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-5.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ blog-6.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ icon-app.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ icon-design.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ icon-dev.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ icon-photo.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ icon-quote.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-1-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-2-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-3-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-4-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-5-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo-6-color.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo.ico
β”‚  β”‚  β”‚  β”‚  β”œβ”€ logo.svg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ my-avatar.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-1.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-2.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-3.jpg
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-4.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-5.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-6.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-7.png
β”‚  β”‚  β”‚  β”‚  β”œβ”€ project-8.jpg
β”‚  β”‚  β”‚  β”‚  └─ project-9.png
β”‚  β”‚  β”‚  └─ uifaces-cartoon-image.jpg
β”‚  β”‚  β”œβ”€ components
β”‚  β”‚  β”‚  β”œβ”€ Common
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Loader.css
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Loader.tsx
β”‚  β”‚  β”‚  β”‚  └─ PageNotFOund.jsx
β”‚  β”‚  β”‚  β”œβ”€ contact
β”‚  β”‚  β”‚  β”‚  └─ Contact.tsx
β”‚  β”‚  β”‚  β”œβ”€ home
β”‚  β”‚  β”‚  β”‚  └─ Home.tsx
β”‚  β”‚  β”‚  β”œβ”€ Navbar.tsx
β”‚  β”‚  β”‚  β”œβ”€ projects
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Projects.tsx
β”‚  β”‚  β”‚  β”‚  └─ Untitled-1.css
β”‚  β”‚  β”‚  β”œβ”€ Resuable
β”‚  β”‚  β”‚  β”‚  └─ Reusable.jsx
β”‚  β”‚  β”‚  β”œβ”€ search
β”‚  β”‚  β”‚  β”‚  └─ Search.tsx
β”‚  β”‚  β”‚  β”œβ”€ Sidebar.tsx
β”‚  β”‚  β”‚  └─ skills
β”‚  β”‚  β”‚     └─ Skills.tsx
β”‚  β”‚  β”œβ”€ root.tsx
β”‚  β”‚  β”œβ”€ routes
β”‚  β”‚  β”‚  β”œβ”€ contact.tsx
β”‚  β”‚  β”‚  β”œβ”€ home.tsx
β”‚  β”‚  β”‚  β”œβ”€ projects.tsx
β”‚  β”‚  β”‚  β”œβ”€ search.tsx
β”‚  β”‚  β”‚  └─ skills.tsx
β”‚  β”‚  β”œβ”€ routes.ts
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ gtag.ts
β”‚  β”‚     └─ schema.ts
β”‚  β”œβ”€ Dockerfile
β”‚  β”œβ”€ package-lock.json
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ public
β”‚  β”‚  β”œβ”€ favicon.ico
β”‚  β”‚  β”œβ”€ favicon128x128.ico
β”‚  β”‚  β”œβ”€ favicon16x16.ico
β”‚  β”‚  β”œβ”€ favicon192x192.ico
β”‚  β”‚  β”œβ”€ favicon256x256.ico
β”‚  β”‚  β”œβ”€ favicon32x32.ico
β”‚  β”‚  β”œβ”€ favicon48x48.ico
β”‚  β”‚  β”œβ”€ favicon512x512.ico
β”‚  β”‚  β”œβ”€ favicon64x64.ico
β”‚  β”‚  β”œβ”€ manifest.json
β”‚  β”‚  β”œβ”€ not-found.jpg
β”‚  β”‚  β”œβ”€ og-image-contact.png
β”‚  β”‚  β”œβ”€ og-image-home.png
β”‚  β”‚  β”œβ”€ og-image-projects.png
β”‚  β”‚  β”œβ”€ og-image-skills.png
β”‚  β”‚  β”œβ”€ profile.jpg
β”‚  β”‚  β”œβ”€ robots.txt
β”‚  β”‚  └─ sitemap.xml
β”‚  β”œβ”€ react-router.config.ts
β”‚  β”œβ”€ README.md
β”‚  β”œβ”€ tsconfig.json
β”‚  └─ vite.config.ts
β”œβ”€ LICENSE
β”œβ”€ README.md
└─ server
   β”œβ”€ app.js
   β”œβ”€ config
   β”‚  β”œβ”€ database.js
   β”‚  β”œβ”€ gridFs.js
   β”‚  └─ multerConfig.js
   β”œβ”€ controllers
   β”‚  β”œβ”€ adminController.js
   β”‚  β”œβ”€ authController.js
   β”‚  β”œβ”€ errorController.js
   β”‚  └─ publicController.js
   β”œβ”€ ecosystem.config.js
   β”œβ”€ index.js
   β”œβ”€ models
   β”‚  β”œβ”€ certificate.js
   β”‚  └─ projectSchema.js
   β”œβ”€ nodemon.json
   β”œβ”€ package-lock.json
   β”œβ”€ package.json
   β”œβ”€ public
   β”‚  β”œβ”€ favicon.ico
   β”‚  └─ robots.txt
   β”œβ”€ routes
   β”‚  β”œβ”€ adminRoutes.js
   β”‚  β”œβ”€ authRoutes.js
   β”‚  β”œβ”€ certificateRoute.js
   β”‚  β”œβ”€ Project.js
   β”‚  └─ publicRoutes.js
   β”œβ”€ utils
   β”‚  β”œβ”€ appError.js
   β”‚  β”œβ”€ catchAsync.js
   β”‚  β”œβ”€ email.js
   β”‚  └─ logger.js
   β”œβ”€ vercel.json
   └─ views
      └─ mail
         β”œβ”€ auto_reply.pug
         β”œβ”€ message.pug
         └─ otp.pug


License

MIT


Linkedin

About

Creative Full-Stack Developer crafting intuitive, user-friendly web experiences with MERN stack.

Topics

Resources

License

Stars

Watchers

Forks