Jeslor-assistant is a voice-enabled AI chatbot built with Next.js, TypeScript, Tailwind CSS, Google Gemini API, Vapi, Vercel AI SDK, and NextAuth. It simulates mock technical interviews using voice or text.
- π‘ AI-powered by Google Gemini
- ποΈ Voice conversations via Vapi
- π§ Collects mock interview setup data
- π Auth via NextAuth.js (Credentials, github and google)
- π¨ Styled with Tailwind CSS
- β‘ Streamed responses using Vercel AI SDK
- βοΈ Easy to deploy on Vercel
git clone https://github.com/jeslor/jeslor_ai_assistant.git
cd jeslor_ai_assistantnpm install
# or
yarn installCreate a .env.local file at the root of the project and add all required keys:
# ββ Database ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DATABASE_URL=your_mongodb_connection_string
# ββ NextAuth ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your_nextauth_secret
# ββ Google OAuth ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
AUTH_WEBAPP_GOOGLE_CLIENT_ID=your_google_client_id
AUTH_WEBAPP_GOOGLE_CLIENT_SECRET=your_google_client_secret
# ββ GitHub OAuth ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
AUTH_GITHUB_ID=your_github_oauth_app_id
AUTH_GITHUB_SECRET=your_github_oauth_app_secret
# ββ Google Gemini AI ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
GOOGLE_GENERATIVE_AI_API_KEY=your_google_ai_api_key
# ββ Vapi (client-side) ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NEXT_PUBLIC_VAPI_WEB_TOKEN=your_vapi_web_token
# ββ LogoKit (client-side) βββββββββββββββββββββββββββββββββββββββββββββββββββββ
NEXT_PUBLIC_LOGO_TOKEN=your_logokit_tokenThis project uses MongoDB via Prisma.
- Go to https://cloud.mongodb.com and create a free account.
- Create a new Cluster (the free M0 tier is sufficient).
- Under Database Access, create a new database user with a username and password.
- Under Network Access, add
0.0.0.0/0to allow connections from anywhere (or restrict to your IP). - Click Connect on your cluster β Drivers β copy the connection string.
- Replace
<password>with your database user's password and append your database name:
DATABASE_URL="mongodb+srv://<username>:<password>@cluster0.xxxxx.mongodb.net/your_db_name?retryWrites=true&w=majority"
NEXTAUTH_URL: The canonical URL of your app. Usehttp://localhost:3000for local development and your production domain when deployed.NEXTAUTH_SECRET: A random secret used to sign and encrypt JWTs. Generate one with:
openssl rand -base64 32- Go to the Google Cloud Console.
- Create a new project (or select an existing one).
- Navigate to APIs & Services β Credentials β Create Credentials β OAuth 2.0 Client IDs.
- Set the application type to Web application.
- Under Authorized redirect URIs, add:
http://localhost:3000/api/auth/callback/google(local)https://your-domain.com/api/auth/callback/google(production)
- Copy the Client ID and Client Secret.
- Go to https://github.com/settings/developers.
- Click New OAuth App.
- Fill in the details:
- Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:3000/api/auth/callback/github
- Homepage URL:
- Click Register application.
- Copy the Client ID and generate a Client Secret.
This key is used by the @ai-sdk/google package to generate interview questions and analyse feedback via the Gemini model.
- Go to https://aistudio.google.com/app/apikey.
- Click Create API key.
- Copy the key and paste it as
GOOGLE_GENERATIVE_AI_API_KEY.
- Go to https://dashboard.vapi.ai and sign up.
- From the dashboard, navigate to API Keys or Settings.
- Copy your Web Token (the public/client-side token, not the private API key).
Note: The
NEXT_PUBLIC_prefix exposes this value to the browser. Never use your private Vapi API key here.
Used to display company logos on interview cards.
- Go to https://logokit.com and click Sign Up.
- Once logged in, navigate to your Dashboard β API Keys (or Settings).
- Copy your API Token.
Logo URLs are constructed like this:
https://img.logokit.com/{company-name}?token=YOUR_TOKEN&size=80x80&format=png
Note: The
NEXT_PUBLIC_prefix is required so the token is accessible in client-side components.