A dark-themed, minimalistic, Ekesta-inspired portfolio web application built with the MERN stack (MongoDB, Express.js, React.js, Node.js).
- Dark Mode Only with Ekesta-inspired color palette
- Responsive Design - Mobile-first approach
- Smooth Animations using Framer Motion
- Modern UI Components with Material-UI (MUI)
- Ekesta-inspired Elements - Silhouettes, Gotham city skyline, yellow accents
- Home - Hero section with Ekesta silhouette and call-to-action
- whoami - Personal bio with social media links
- Blog - Full markdown support with live editor and syntax highlighting
- Experience - Professional timeline/card layout
- Contact - Form with validation and email integration
- Blog System with markdown editor and live preview
- MongoDB Integration for blog posts and contact messages
- Email Notifications via Nodemailer
- Responsive Navigation with hamburger menu
- SEO Optimized with React Helmet
- Form Validation and error handling
- Real-time Notifications with React Hot Toast
- Node.js (v16 or higher)
- MongoDB (local or cloud)
- Git
- Clone the repository
git clone <your-repo-url>
cd ekesta-portfolio- Install Backend Dependencies
cd backend
npm install- Install Frontend Dependencies
cd ../frontend
npm install- Set up Environment Variables
Create .env file in the backend directory:
NODE_ENV=development
PORT=5000
MONGODB_URI=mongodb://localhost:27017/ekesta-portfolio
FRONTEND_URL=http://localhost:3000
# Email configuration (for contact form)
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
EMAIL_FROM=your-email@gmail.com
EMAIL_TO=your-email@gmail.com
# JWT Secret (for future authentication if needed)
JWT_SECRET=your-super-secret-ekesta-key-change-this-in-production- Start MongoDB Make sure MongoDB is running on your system:
# For local MongoDB installation
mongod
# Or use MongoDB Atlas (cloud) and update MONGODB_URI in .env- Start the Backend
cd backend
npm run dev- Start the Frontend (in a new terminal)
cd frontend
npm start- Access the Application
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000
ekesta-portfolio/
βββ backend/
β βββ models/
β β βββ BlogPost.js
β β βββ Contact.js
β βββ routes/
β β βββ blog.js
β β βββ contact.js
β βββ server.js
β βββ package.json
β βββ .env.example
βββ frontend/
β βββ public/
β β βββ index.html
β βββ src/
β β βββ components/
β β β βββ layout/
β β β βββ Navbar.js
β β β βββ Footer.js
β β βββ pages/
β β β βββ Home.js
β β β βββ WhoAmI.js
β β β βββ Blog.js
β β β βββ BlogPost.js
β β β βββ BlogEditor.js
β β β βββ Experience.js
β β β βββ Contact.js
β β β βββ NotFound.js
β β βββ theme/
β β β βββ theme.js
β β βββ App.js
β β βββ index.js
β β βββ index.css
β βββ package.json
βββ README.md
- Background:
#0D0D0D(Deep Black) - Secondary Background:
#1A1A1A(Slightly lighter) - Primary Accent:
#FFD700(Ekesta Yellow) - Secondary Accent:
#FFEB3B(Lighter Yellow) - Text Primary:
#E0E0E0(Light Gray) - Text Secondary:
#BDBDBD(Medium Gray)
- Primary Font: Montserrat (Headers, body text)
- Monospace Font: Roboto Mono (Code, captions)
GET /- Get all published blog postsGET /featured- Get featured postsGET /tags- Get all tagsGET /:slug- Get single blog postPOST /- Create new blog postPUT /:slug- Update blog postDELETE /:slug- Delete blog post
POST /- Submit contact formGET /- Get all contact messages (admin)PUT /:id/status- Update contact status
- Update social media links in
Footer.js - Replace placeholder content in page components
- Add your profile image to the public folder
- Update meta tags in
index.htmland page components
- Use the
/blog/newroute to create new posts - Edit posts at
/blog/edit/:slug - Posts support full markdown with syntax highlighting
- Set up Gmail App Password
- Update email credentials in
.env - Configure SMTP settings for other email providers
cd frontend
npm run buildcd backend
# Set environment variables on your platform
# Deploy using your platform's CLI- Create MongoDB Atlas account
- Set up cluster
- Update
MONGODB_URIin environment variables
- Rate limiting on API routes
- Input validation and sanitization
- CORS configuration
- Helmet.js security headers
- Environment variable protection
- React.js 18
- Material-UI (MUI)
- Framer Motion
- React Router
- React Markdown
- React Syntax Highlighter
- React Hook Form
- React Hot Toast
- Axios
- Node.js
- Express.js
- MongoDB with Mongoose
- Nodemailer
- Express Rate Limit
- Helmet.js
- CORS
- Joi Validation
This project is licensed under the MIT License - see the LICENSE file for details.
This portfolio showcases the power of modern web development with a unique Ekesta-inspired twist. It demonstrates full-stack development skills, responsive design, and attention to user experience.
"I am the Dark Knight Developer. I protect Gotham's digital infrastructure."
Made with π¦ and β‘ in Gotham City