LexiFeed is a full-stack web application that helps users practice English interview and speaking skills using AI-driven question generation, voice transcription, smart resume processing, and session feedback.
- Secure auth with JWT-based login/signup.
- AI-powered interview question generation from company, role, and resume context.
- Voice transcription and analysis for spoken answers.
- Follow-up question generation based on candidate responses.
- Session feedback and progress stats saved per user.
- Modern frontend built with Next.js, TypeScript, Tailwind CSS.
- Next.js 16.2 (App Router)
- TypeScript
- Tailwind CSS
- React
- Lucide icons
- React hooks + custom auth state
- Flask 3.x
- Flask-CORS
- Flask-SQLAlchemy
- SQLite
- OpenAI via
openaiand LangChain helpers - JWT auth via custom Flask middleware
- Voice transcription + analysis routes
LexiFeed/
+-- backend/
¦ +-- app.py
¦ +-- config.py
¦ +-- requirements.txt
¦ +-- models/
¦ +-- routes/
¦ +-- services/
¦ +-- utils/
+-- frontend/
+-- app/
+-- components/
+-- lib/
+-- hooks/
+-- package.json
- Python 3.8+
- Node.js 18+
- npm
-
Open a terminal and navigate to the backend folder:
cd backend -
Create and activate a virtual environment:
- Windows PowerShell:
python -m venv venv .\venv\Scripts\Activate.ps1 - macOS/Linux:
python -m venv venv source venv/bin/activate
- Windows PowerShell:
-
Install dependencies:
pip install -r requirements.txt
-
Create a
.envfile insidebackend/:SECRET_KEY=your_app_secret_key_here JWT_SECRET_KEY=your_jwt_secret_key_here DATABASE_URL=sqlite:///app.db OPENAI_API_KEY=your_openai_api_key_here
-
Start the backend server:
python app.py
-
Verify the backend is running:
http://localhost:5000
app.dbis generated automatically when the backend starts.
-
Open a separate terminal and go to the frontend folder:
cd frontend -
Install dependencies:
npm install
-
Create a
.env.localfile infrontend/:NEXT_PUBLIC_API_URL=http://localhost:5000/api
-
Run the frontend:
npm run dev
-
Open the app at:
http://localhost:3000
- Sign up:
POST /api/auth/signup - Login:
POST /api/auth/login - Profile:
GET /api/auth/me
The frontend stores the returned JWT token and sends it in the Authorization: Bearer <token> header for protected endpoints.
POST /api/auth/signupPOST /api/auth/loginGET /api/auth/me
POST /api/interview/start- Starts a new interview session and returns AI-generated questions.
- Supports multipart form data and optional resume upload.
POST /api/interview/followup- Generates a follow-up question from the candidate answer.
POST /api/interview/feedback- Saves interview transcript and returns AI feedback.
GET /api/interview/sessions- Retrieves a user’s saved session history.
GET /api/interview/stats- Returns aggregated progress metrics and streak data.
POST /api/interview/generatePOST /api/interview/upload-resume
POST /api/voice/transcribePOST /api/voice/analyzePOST /api/voice/followupPOST /api/voice/analyze-agenticPOST /api/voice/session-comparison
- The frontend uses
frontend/lib/api.tsfor most interview-related API calls. - Voice transcription and analysis occur from
frontend/app/practice/interview/page.tsx. - The backend CORS policy allows local development requests from
http://localhost:3000andhttp://localhost:5000. OPENAI_API_KEYis required for AI generation and voice analysis features.
- Flask
- Flask-CORS
- Flask-SQLAlchemy
- python-dotenv
- PyJWT
- openai
- pdfplumber
- python-docx
- Next.js
- React
- TypeScript
- Tailwind CSS
- react-hook-form
- zod
- lucide-react
- Ensure the virtual environment is activated.
- Confirm
requirements.txtinstalled correctly. - Check
.envincludesOPENAI_API_KEY.
- Verify the backend is running on port
5000. - Confirm
NEXT_PUBLIC_API_URLishttp://localhost:5000/api. - If CORS errors appear, review the allowed origins in
backend/app.py.
cd backend
rm app.db
python app.pyFork the repository, create a branch, implement your changes, and open a pull request with a clear description. Keep backend and frontend changes separate when possible.