InterviewMate is a Kotlin/Spring Boot backend that generates interview questions from job descriptions. Users can try it without an account (first three questions free) or subscribe for full access and future features like CV generation.
- Kotlin & Spring Boot
- PostgreSQL
- OpenAI API (pluggable LLM service)
- JWT authentication
- Start the database:
docker-compose up -d db - Copy
.env.exampleto.envand setOPENAI_API_KEYandJWT_SECRET. Other values match the defaults inapplication.yml. - Run the application:
The service listens on http://localhost:8080.
./gradlew bootRun
./gradlew test
Tests use an in-memory H2 database.
- Register –
POST /api/auth/registerwith{ "email": "...", "password": "..." } - Login –
POST /api/auth/loginreturns{ token, subscriptionStatus } - Generate Questions –
POST /api/questionswith{ "jobName": "Dev", "jobDescription": "Desc", "numQuestions": 5 }- Without a token only three questions are returned.
- Include
Authorization: Bearer <token>to persist sessions and unlock the full set.
- Subscribe –
POST /api/subscription/subscribe(requires token) to mark the user as subscribed.
- Create an app and database:
heroku create <app-name> heroku addons:create heroku-postgresql:hobby-dev - Configure required secrets:
The Postgres add-on sets
heroku config:set OPENAI_API_KEY=<your_key> heroku config:set JWT_SECRET=<jwt_secret>DATABASE_URLautomatically. - Deploy:
The included
git push heroku mainProcfileand Gradlestagetask buildinterviewmate.jar. - Verify:
heroku logs --tail heroku open /actuator/health
This hobby deployment runs a single dyno and is not intended for heavy load. Ensure secrets are kept out of version control and adjust CORS and other production settings as needed.
Tests run with ./gradlew test. TODO: add GitHub Actions and coverage badges.