An interactive, modern developer portfolio built with Next.js (App Router), Tailwind CSS, and an AI assistant powered by OpenAI.
It includes a classic portfolio layout (hero, projects, experience, skills, education, achievements, contact) plus API routes for:
- AI assistance (OpenAI Responses API proxy)
- OpenAI Realtime session creation
- Contact form email delivery via SMTP (Nodemailer)
Note: This repo uses environment variables for OpenAI + SMTP. The server routes will return errors until you configure them.
- Responsive portfolio UI with sections for Projects, Experience, Skills, Education, Achievements, and Contact.
- AI Assistant UI component in the site (see
src/components/assistant/). - OpenAI Responses proxy endpoint at
POST /api/aiAssistance/responses.- Supports both standard text responses and
json_schemastructured responses.
- Supports both standard text responses and
- OpenAI Realtime session endpoint at
GET /api/aiAssistance/session.- Validates required env vars (
OPENAI_API_KEY,OPENAI_API_URL,OPENAI_MODEL).
- Validates required env vars (
- Contact form API at
POST /api/contactwith basic validation.- Sends emails using SMTP credentials.
- Animations via Framer Motion + Lottie.
- Next.js 15 (App Router)
- React 19
- TypeScript
- Tailwind CSS
- Framer Motion, Lottie
- OpenAI SDK (
openai) + @openai/agents - Nodemailer (contact email)
- Node.js 18+ (recommended)
- npm (or your preferred package manager — scripts are npm-compatible)
npm installCopy the sample env file and fill in your values:
env.samplecontains safe placeholders- Create
.env.localfor local development (recommended)
Don’t commit real secrets (API keys, SMTP passwords). Keep them in
.env.localor set them in your hosting provider.
This project loads env from .env.local and .env on the server (see src/lib/envSetup.ts).
Required for GET /api/aiAssistance/session and POST /api/aiAssistance/responses:
OPENAI_API_KEY— your OpenAI API keyOPENAI_API_URL— the URL used byGET /api/aiAssistance/sessionto create a realtime sessionOPENAI_MODEL— model name used by the session route
Used by POST /api/contact (see src/app/api/contact/route.ts and src/lib/mail.ts):
SMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASSSMTP_FROM— fallback recipient ifCONTACT_TOis not setCONTACT_TO— (optional) admin recipient for contact submissions
If neither
CONTACT_TOnorSMTP_FROMis set, the contact endpoint will return a 500.
From package.json:
npm run dev— start the dev servernpm run build— production buildnpm run start— start production servernpm run lint— run Next.js lint
Creates an OpenAI Realtime session.
Requires: OPENAI_API_KEY, OPENAI_API_URL, OPENAI_MODEL
Proxy to OpenAI Responses API.
- If
body.text.format.type === "json_schema", it usesresponses.parse. - Otherwise it uses
responses.create.
Requires: OPENAI_API_KEY
Accepts JSON:
name,email,mobile,subject,message
Performs basic validation and sends an email.
src/
app/
page.tsx # Home page sections
api/ # Next.js route handlers
aiAssistance/
contact/
otp/
components/ # UI + sections + assistant
data/ # Portfolio content (projects, skills, etc.)
lib/ # server helpers (env, mail, templates)
hooks/ # custom hooks (audio recorder, theme, etc.)
This is a standard Next.js app and can be deployed to Vercel, Render, AWS, etc.
Key reminders:
- Configure all required environment variables on your host.
- Ensure your SMTP provider allows the deployment environment to send email.
Missing OPENAI_API_KEY: add it to.env.localand restart the dev server.- Contact API returns 500: configure
SMTP_*vars and also setCONTACT_TOorSMTP_FROM. - CORS issues: AI routes apply CORS headers via
src/app/api/utils/cors.ts.
See LICENSE.
