A comprehensive full-stack web application for IELTS speaking practice with AI-powered feedback
A full-stack web application for IELTS speaking practice, built with FastAPI (backend) and Next.js with Tailwind CSS (frontend). Features AI-powered speech transcription using Whisper and text-to-speech for question audio playback.
english_speaking_test/
βββ backend/ # FastAPI backend
β βββ app/
β β βββ routers/ # API routes
β β βββ models.py # Database models
β β βββ schemas.py # Pydantic schemas
β β βββ main.py # FastAPI app
β βββ database/
β β βββ schema.sql # Database schema
β βββ requirements.txt
βββ frontend/ # Next.js frontend
β βββ app/ # Next.js app directory
β βββ components/ # React components
β βββ lib/ # Utilities and API client
β βββ package.json
βββ README.md
For detailed setup instructions, see Quick Start Guide.
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Create database
createdb ielts_speaking
# Run schema
psql ielts_speaking < database/schema.sql
.env file:cp .env.example .env
# Edit .env with your database credentials:
# DATABASE_URL=postgresql://user:password@localhost:5432/ielts_speaking
# SECRET_KEY=your-secret-key-change-in-production
# GOOGLE_CLIENT_ID=your-google-client-id # For Google OAuth
uvicorn app.main:app --reload --port 8000
Backend will be available at http://localhost:8000 API docs at http://localhost:8000/docs
cd frontend
npm install
# or
yarn install
.env.local file:NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-google-client-id # For Google OAuth
npm run dev
# or
yarn dev
Frontend will be available at http://localhost:3000
The application uses PostgreSQL with the following main tables:
users - User accountsquestions - Practice questionsuser_questions - Custom questions added by userspractice_sessions - Practice session recordsmock_tests - Mock test recordsdaily_progress - Daily practice progressstreaks - User streak trackingactivity_calendar - Activity calendar datapart_progress - Progress by IELTS part (1, 2, 3)See backend/database/schema.sql for the complete schema.
POST /api/auth/register - Register new userPOST /api/auth/login - LoginPOST /api/auth/google - Login/Register with Google OAuthGET /api/auth/me - Get current userGET /api/questions/ - Get questions (with optional part and topic filters)GET /api/questions/topics - Get all topicsGET /api/questions/user-questions - Get user's custom questionsPOST /api/questions/user-questions - Create custom questionDELETE /api/questions/user-questions/{id} - Delete custom questionPOST /api/practice/ - Create practice sessionGET /api/practice/ - Get practice sessionsPOST /api/mock-test/ - Create mock testGET /api/mock-test/ - Get mock testsGET /api/mock-test/{id} - Get specific mock testGET /api/progress/daily - Get daily progressGET /api/progress/streak - Get streak infoGET /api/progress/activity-calendar - Get activity calendarGET /api/progress/part-progress - Get part-wise progressYou can add questions to the database by inserting into the questions table:
INSERT INTO questions (part, topic, question_text) VALUES
(1, 'Doing something well', 'Do you have an experience when you did something well?'),
(1, 'Rules', 'Are there any rules for students at your school?');
For detailed environment variable setup, see Environment Setup Guide.
Backend (.env):
DATABASE_URL - PostgreSQL connection stringSECRET_KEY - Secret key for JWT tokensGOOGLE_CLIENT_ID - Google OAuth Client ID (get from Google Cloud Console)Frontend (.env.local):
NEXT_PUBLIC_API_URL - Backend API URLNEXT_PUBLIC_GOOGLE_CLIENT_ID - Google OAuth Client ID (same as backend)To deploy your application to production, see the comprehensive deployment guides:
Easiest option: Deploy frontend to Vercel and backend to Railway. See DEPLOY_QUICKSTART.md for step-by-step instructions.
http://localhost:3000 (for development)http://localhost:3000 (for development).env and frontend .env.local filesNote: For production, update the authorized origins and redirect URIs to your production domain.
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ for IELTS learners
β Star this repo if you find it helpful!
27 commits
Python
46.6%
TypeScript
42.6%
JavaScript
5.8%
Shell
3.2%
A comprehensive full-stack web application for IELTS speaking practice with AI-powered feedback
A full-stack web application for IELTS speaking practice, built with FastAPI (backend) and Next.js with Tailwind CSS (frontend). Features AI-powered speech transcription using Whisper and text-to-speech for question audio playback.
english_speaking_test/
βββ backend/ # FastAPI backend
β βββ app/
β β βββ routers/ # API routes
β β βββ models.py # Database models
β β βββ schemas.py # Pydantic schemas
β β βββ main.py # FastAPI app
β βββ database/
β β βββ schema.sql # Database schema
β βββ requirements.txt
βββ frontend/ # Next.js frontend
β βββ app/ # Next.js app directory
β βββ components/ # React components
β βββ lib/ # Utilities and API client
β βββ package.json
βββ README.md
For detailed setup instructions, see Quick Start Guide.
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Create database
createdb ielts_speaking
# Run schema
psql ielts_speaking < database/schema.sql
.env file:cp .env.example .env
# Edit .env with your database credentials:
# DATABASE_URL=postgresql://user:password@localhost:5432/ielts_speaking
# SECRET_KEY=your-secret-key-change-in-production
# GOOGLE_CLIENT_ID=your-google-client-id # For Google OAuth
uvicorn app.main:app --reload --port 8000
Backend will be available at http://localhost:8000 API docs at http://localhost:8000/docs
cd frontend
npm install
# or
yarn install
.env.local file:NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-google-client-id # For Google OAuth
npm run dev
# or
yarn dev
Frontend will be available at http://localhost:3000
The application uses PostgreSQL with the following main tables:
users - User accountsquestions - Practice questionsuser_questions - Custom questions added by userspractice_sessions - Practice session recordsmock_tests - Mock test recordsdaily_progress - Daily practice progressstreaks - User streak trackingactivity_calendar - Activity calendar datapart_progress - Progress by IELTS part (1, 2, 3)See backend/database/schema.sql for the complete schema.
POST /api/auth/register - Register new userPOST /api/auth/login - LoginPOST /api/auth/google - Login/Register with Google OAuthGET /api/auth/me - Get current userGET /api/questions/ - Get questions (with optional part and topic filters)GET /api/questions/topics - Get all topicsGET /api/questions/user-questions - Get user's custom questionsPOST /api/questions/user-questions - Create custom questionDELETE /api/questions/user-questions/{id} - Delete custom questionPOST /api/practice/ - Create practice sessionGET /api/practice/ - Get practice sessionsPOST /api/mock-test/ - Create mock testGET /api/mock-test/ - Get mock testsGET /api/mock-test/{id} - Get specific mock testGET /api/progress/daily - Get daily progressGET /api/progress/streak - Get streak infoGET /api/progress/activity-calendar - Get activity calendarGET /api/progress/part-progress - Get part-wise progressYou can add questions to the database by inserting into the questions table:
INSERT INTO questions (part, topic, question_text) VALUES
(1, 'Doing something well', 'Do you have an experience when you did something well?'),
(1, 'Rules', 'Are there any rules for students at your school?');
For detailed environment variable setup, see Environment Setup Guide.
Backend (.env):
DATABASE_URL - PostgreSQL connection stringSECRET_KEY - Secret key for JWT tokensGOOGLE_CLIENT_ID - Google OAuth Client ID (get from Google Cloud Console)Frontend (.env.local):
NEXT_PUBLIC_API_URL - Backend API URLNEXT_PUBLIC_GOOGLE_CLIENT_ID - Google OAuth Client ID (same as backend)To deploy your application to production, see the comprehensive deployment guides:
Easiest option: Deploy frontend to Vercel and backend to Railway. See DEPLOY_QUICKSTART.md for step-by-step instructions.
http://localhost:3000 (for development)http://localhost:3000 (for development).env and frontend .env.local filesNote: For production, update the authorized origins and redirect URIs to your production domain.
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ for IELTS learners
β Star this repo if you find it helpful!
27 commits
Python
46.6%
TypeScript
42.6%
JavaScript
5.8%
Shell
3.2%