A modern portfolio website built with Next.js 15, featuring AI chat integration and interactive animations.
- AI-Powered Email Generation: Create professional emails with AI assistance
- Interactive Chat: Talk directly with an AI version of me using advanced LLMs
- Vector Embeddings: Semantic search capabilities for more accurate AI responses
- Dynamic Animations: Engaging UI with smooth animations
- Responsive Design: Seamless experience across all devices
- Dark Mode: Eye-friendly interface for all lighting conditions
- Project Showcase: Interactive displays of my work and contributions
- AI-Powered Dynamic Theming: Transform the entire interface with natural language requests, allowing real-time visual customization
| Layer | Technologies |
|---|---|
| Frontend | Next.js 15, TypeScript, Tailwind CSS, Framer Motion |
| Backend | Node.js, Next.js API Routes |
| AI Integration | OpenRouter API |
| Embeddings | Google Gemini |
| Vector Database | Pinecone |
| Search | Tavily API |
| Nodemailer, Abstract API | |
| Deployment | Vercel + Edge Functions |
This badge shows the real-time operational status of selected AI models from OpenRouter.
Each badge displays:
- Model name: The model's identifier
- Status:
operationalβ model is healthy (uptime β₯ 90%)Degradedβ degraded performance (uptime β₯ 50%)offlineβ not available (uptime < 50%)
- Uptime: The average uptime over the past 30 minutes
Clicking the badge opens the live SVG endpoint.
β οΈ Note:
ADegradeddoes not mean the model is completely unusable.
It simply indicates that some requests may fail intermittently due to degraded uptime or performance.
This badge shows the real-time operational status of the Kimi model.
β οΈ IMPORTANT: Before starting, make sure to set up all required environment variables in a.envfile as described in the Environment Variables section below. The application will not work properly without these configurations.
- Clone and install:
git clone https://github.com/Rushikeshnimkar/portfolio2025.git
cd portfolio
npm install- Update your personal information:
# Edit the components/character/character.ts file with your own details
# This is crucial for the AI to represent you correctly- Run development server:
npm run devNote: The first run will take longer than usual as the system creates and saves your embeddings to the vector database. Take this time to relax and enjoy a coffee! β
β οΈ IMPORTANT NOTE: Make sure to uncomment the following line inapi/chat/route.ts&api/theme/route.tswhen working in development:// "http://localhost:3000",
The portfolio includes an AI-powered email generation system that:
- Creates professional emails based on simple prompts
- Validates sender email addresses
- Supports both AI-generated and manual email composition
- Features elegant text generation animations
Chat with an AI version of me that:
- Answers questions about my skills, experience, and projects
- Accesses real-time information when needed via Tavily search
- Maintains conversation context across messages
- Provides accurate information about my background and expertise
- Uses vector embeddings for more accurate and relevant responses
The portfolio includes an AI-powered theme customization system that:
- Transforms the UI with natural language commands
- Understands specific page elements through vector embeddings
- Applies changes in real-time with visual feedback
- Generates custom JavaScript on-the-fly for unique visual effects
- Maintains responsive design across all device sizes
- Supports both page-specific and site-wide modifications
The portfolio uses Pinecone vector database to store and retrieve embeddings:
- Semantic search capabilities for more accurate AI responses
- Google Gemini embeddings for high-quality vector representations
- Efficient retrieval of relevant information based on user queries
- One-time initialization with profile data for persistent storage
- CORS protection for API routes
- Email validation to prevent spam
- Rate limiting on sensitive endpoints
Create a .env file in the root directory and add your environment variables:
# Development environment (all the apis are free)
EMAIL_USER="your emailid"
EMAIL_APP_PASSWORD="your App Password" # get it from your Google Account settings
ABSTRACT_API_KEY="your abstract api key" # https://app.abstractapi.com/
OPENROUTER_API_KEY="your openrouter api key" # https://openrouter.ai/
TAVILY_API_KEY="your Tavily api key" # https://tavily.com/
# Vector Database (Pinecone)
PINECONE_API_KEY="your Pinecone API key" # https://app.pinecone.io/
PINECONE_INDEX_NAME="your index name" # e.g., portfolio-embeddings
# Google Gemini (for embeddings)
GOOGLE_API_KEY="your Google API key" # https://ai.google.dev/
#jwt auth
JWT_EXPIRY="1m"
JWT_SECRET="your jwt token" # use this command for linux = "openssl rand -hex 64" or node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" (works on windows/linux/mac)The vector store is configured in lib/embeddings.ts with the following settings:
- Dimension: 768 (Google Gemini embeddings)
- Metric: Cosine similarity
- Pod type: Starter (free tier)
You can modify these settings in the initializeVectorStore function if needed.
This project is open source under the MIT License.
Rushikesh Nimkar
π rushikeshnimkar.xyz
π§ rushikeshnimkar396@gmail.com

