AI News HubLIVE
站内改写4 min read

GrillKit – Self-hosted AI trainer for technical interviews with voice

GrillKit is an open-source, self-hosted AI technical interview trainer with support for voice input, structured scoring, and privacy. It features curated question banks, timer, and real-time scoring, running locally via Docker.

SourceHacker News AIAuthor: vitchenkokir

Notifications You must be signed in to change notification settings

Fork 1

Star 4

BranchesTags

Open more actions menu

Folders and files

NameName

Last commit message

Last commit date

Latest commit

History

11 Commits

11 Commits

.github

.github

alembic

alembic

app

app

assets

assets

data

data

static

static

templates

templates

tests

tests

.dockerignore

.dockerignore

.env.example

.env.example

.gitignore

.gitignore

ARCHITECTURE.md

ARCHITECTURE.md

CHANGELOG.md

CHANGELOG.md

CODE_OF_CONDUCT.md

CODE_OF_CONDUCT.md

CONTRIBUTING.md

CONTRIBUTING.md

Dockerfile

Dockerfile

LICENSE

LICENSE

NOTICE

NOTICE

README.md

README.md

SECURITY.md

SECURITY.md

alembic.ini

alembic.ini

docker-compose.yml

docker-compose.yml

docker-entrypoint.sh

docker-entrypoint.sh

pyproject.toml

pyproject.toml

uv.lock

uv.lock

Repository files navigation

Open-source AI technical interview trainer. Practice from curated YAML question banks, get structured scoring and follow-ups, and optionally use voice — with your own LLM (cloud or local).

Why GrillKit · Quick start · Changelog · Architecture

Why GrillKit (not just ChatGPT)

A general chat assistant is flexible, but it does not run an interview for you.

What you need ChatGPT-style chat GrillKit

Curated technical questions You prompt each time Built-in tracks (Python, Kafka, System Design, …), levels, and topics

Interview flow Free-form thread Fixed session: N questions, up to 2 AI follow-ups per question, 1–5 scoring, session summary

Practice history Scattered chats Dashboard with past sessions stored locally

Time pressure None Optional per-round timer (expired round → 0, move on)

Voice practice Depends on product Offline Whisper dictation; optional Piper question audio; audio answers when your model supports it

Where data lives Vendor cloud Self-hosted: SQLite + data/ on your machine; use Ollama, vLLM, or any OpenAI-compatible API

Structured practice — You pick tracks, difficulty, and topics; GrillKit builds a question plan and keeps score across the whole session, not a single ad-hoc prompt.

Privacy and control — Run via Docker on your laptop or server. API keys and interview history stay under ./data (gitignored). No account or subscription required beyond your LLM provider (if you use a cloud model).

Screenshots & demo

Demo video — full flow from setup to scored feedback

Dashboard — recent sessions and quick start

Interview setup — question-bank tracks, levels, topics, and session options

Interview session — real-time Q&A with AI scoring and final evaluation

Features

Interviews — multi-track setup, several topics per session, WebSocket Q&A, AI scoring 1–5, up to 2 follow-ups per question

Question banks — Python, Database/SQL, System Design, Kafka, RabbitMQ, Docker, Kubernetes, Observability, Airflow, and more under data/questions/{track}/ (junior / middle / senior where applicable)

Timer — optional per-round time limit; expired rounds score 0 and the session moves on

Voice — offline Whisper dictation for typed answers; optional Piper TTS to read questions aloud

Audio answers — when the configured model supports audio input and Whisper is ready, record and send a WAV answer from the interview page

Setup — model catalog on /config, interview locale (AI feedback language), Whisper/Piper downloads from the UI

Dashboard — recent interview history on the home page

Deployment — Docker Compose on port 8000 with ./data volume for config, DB, and models

Quick start

Prerequisites

Docker and Docker Compose

API key for a cloud provider, or a local OpenAI-compatible server (Ollama, vLLM, …)

Run with Docker

git clone https://github.com/yourusername/grillkit.git cd grillkit docker compose up --build

Open http://localhost:8000.

Optional question voice (Piper TTS, same app container):

Run docker compose up (or uv run uvicorn app.main:app for development).

Open /config, enable Read questions aloud, save.

On the Configuration page, use Download question voice when prompted (~60 MB per locale voice from Hugging Face).

Start an interview — questions can play aloud; WAV cache lives under data/tts-cache/v2/{locale}/.

./data on the host holds SQLite, config.json, llm_models.json, Whisper/Piper models, and TTS cache. Question banks, templates, and static files ship in the image.

If bind-mounted data/ is not writable (Linux UID mismatch):

PUID=$(id -u) PGID=$(id -g) docker compose up --build

First-time flow

Configuration (/config) — add one or more OpenAI-compatible models to the catalog, select an interview model, set interview locale; test connection, then save.

New interview (/setup) — enable one or more question-bank tracks (level per track), select multiple topics, set total question count (at least one per selected topic; interview locale is read-only from config).

Interview (/interview/{id}) — page loads history; text answers and completion go over WebSocket.

Without saved provider config, /setup redirects to /config.

Local development

For contributors: see CONTRIBUTING.md. Quick run:

uv sync --extra dev uv run uvicorn app.main:app --reload

Same first-time flow at http://127.0.0.1:8000.

Configuration (essentials)

Any OpenAI-compatible HTTP API works:

Provider Example base URL

OpenAI https://api.openai.com/v1

Ollama http://localhost:11434/v1

vLLM / others your endpoint + /v1

On /config:

Add model to catalog — base URL, model name, optional API key; enable Accepts audio input only if the model supports multimodal audio (and download Whisper for transcription).

Interview model — pick from the catalog, Test Connection, save.

Locale — language for AI feedback and speech (stored in data/config.json, gitignored).

Whisper — choose size (small, medium, large), download from the UI for dictation and audio answers.

Read questions aloud — enable Piper, download a voice (~60 MB).

Do not commit data/config.json, data/llm_models.json, or API keys.

Optional environment variables (full list in ARCHITECTURE.md):

Variable Purpose

DATABASE_URL SQLAlchemy URL (default: SQLite under data/db/)

HF_TOKEN Hugging Face token for faster Whisper/Piper downloads

WHISPER_DEVICE cpu or cuda

WHISPER_COMPUTE_TYPE int8 or float16

Roadmap

Planned

Session-wide time limit (total interview duration)

More question banks and categories

Code editor in the interview UI

Custom question banks, PWA / standalone frontend

For developers

Document Contents

ARCHITECTURE.md Layers, HTTP/WebSocket routes, data flows, persistence, question banks

CONTRIBUTING.md Dev setup, tests, ruff/mypy/pytest, contribution workflow

CHANGELOG.md Release history

Security

Report vulnerabilities as described in SECURITY.md. Do not open public issues for security problems.

License

Apache License 2.0 (see also NOTICE)

About

Self-hosted AI technical interview trainer with voice and real-time scoring

Topics

python

open-source

ai

interview

self-hosted

whisper

interview-preparation

fastapi

interview-preparation-kit

llm

interview-preparation-tool

interview-preparation-platform

Resources

Readme

License

View license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy

Uh oh!

There was an error while loading. Please reload this page.

Activity

Custom properties

Stars

4 stars

Watchers

0 watching

Forks

1 fork

Report repository

Releases 3

2026.5.31

Latest

May 31, 2026

+ 2 releases

Packages 0

Uh oh!

There was an error while loading. Please reload this page.

Contributors

Uh oh!

There was an error while loading. Please reload this page.

Languages

Python 82.9%

HTML 7.9%

JavaScript 5.8%

CSS 3.0%

Dockerfile 0.3%

Mako 0.1%