This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
A batchmate of mine, has campus placement drives coming up and wants practice with real interview questions about their own projects, not another generic list from the internet.
So I built PlacePal, an offline mock-interview partner. You upload your resume (or paste its text), pick a target role and difficulty, and PlacePal:
- writes 5 questions tailored to your resume: 2 technical, 2 about your projects, 1 HR
- scores each answer from 1 to 10, with strengths, gaps and a stronger sample answer
- tracks your average score per topic and tells you which topics to revise
The problem it solves is simple. A resume has your phone number, email, college and projects, and your interview answers show exactly where you are weak. That is the data you least want to paste into a hosted chatbot. PlacePal never sends it anywhere.
Demo
There is no hosted demo, on purpose: the whole point is that PlacePal runs on your own machine. You can try it in a few minutes:
ollama pull gemma3:4b
git clone https://github.com/Aakif-Kohari/placepal.git
cd placepal
pip install -r requirements.txt
streamlit run app.py
Once the model is pulled, you can turn Wi-Fi off and it still works.
Code
Aakif-Kohari
/
placepal
Offline mock-interview coach for campus placements. Runs on a local open-weight model (Gemma via Ollama): resume-aware questions, honest scoring, weak-topic tracking. No cloud, no API key.
π― PlacePal
An offline mock-interview partner for campus placements, powered by an open-weight model running on your own laptop.
PlacePal reads your resume, asks questions tailored to your projects and your target role, scores each answer honestly, and tracks which topics keep dragging your scores down. Everything runs locally through Ollama with a Gemma model. There is no API key, no account, no cloud, and no bill.
Built for the DEV Hacktoberfest Weekend Challenge: Build for a Friend (Oct 2-5, 2026), for a friend preparing for campus placements.
Why local matters here
A resume carries your phone number, email, college and projects. Interview answers carry your weaknesses. That is exactly the data you do not want to paste into a hosted chatbot.
PlacePal (local open-weight model)
Typical hosted chatbot
Resume leaves your machine
No
Yes
Works with Wi-Fi off
Yes
No
Cost per practice session
Zero
Credits / subscription
Swap
How I Built It
The open-source AI: Gemma, Google's open-weight model, served locally by Ollama. The default is gemma3:4b (about a 3.3 GB download). The UI is Streamlit and resumes are parsed locally with pypdf.
The flow: resume text goes into a prompt along with the role's focus areas and the difficulty. Gemma returns JSON, which I validate and show in the UI. Finished sessions are saved to a local JSON file, and a progress tab aggregates scores by topic.
Most of the work was making a small local model behave reliably:
-
Defensive JSON handling. Small models sometimes wrap JSON in markdown fences, add chatter, or return a score like
"7/10". I extract the first valid JSON object, validate and clamp every field, and if the reply is unusable I tell the model what was wrong and retry twice before showing a clear error. - Scoring I can trust a bit more. Prompts alone didn't stop a small model from rewarding a one-line answer, so answers under 5 words are capped at 2/10 and under 15 words at 4/10, deterministically in code.
-
An honest privacy claim. The app checks
OLLAMA_HOSTand shows a warning banner if the server is not on the same machine. I also turned off Streamlit's anonymous usage stats so "nothing leaves this laptop" is actually true. -
Tests. 34 tests run in CI, including the full Streamlit flow using Streamlit's
AppTest. The model call is a single function that tests replace with a fake.
I used an AI assistant to help write the code, and I reviewed and tested it myself.
Why Does Open Innovation Matter?
A hosted API would have worked technically. For this project, it would have been the wrong tool:
- Privacy by architecture. With a local open-weight model, the resume and every answer stay on the laptop. I don't have to trust a privacy policy because there is no server to send the data to.
- Works offline. Placement prep happens in hostels, trains and places with bad Wi-Fi.
- Costs nothing to run. My friend can practice 20 rounds without credits, rate limits or a subscription.
-
Swappable. The model is one environment variable.
PLACEPAL_MODEL=qwen3:4b streamlit run app.pychanges the model without touching code. -
Inspectable. Every prompt the model sees is in one readable file,
placepal/prompts.py.
The trade-off is real. A 4B model is a more generous and less consistent grader than the biggest hosted models, which is why I added code-level guardrails and documented the limitation. People with more RAM can point PLACEPAL_MODEL at a larger Gemma and get stricter feedback, which a closed API wouldn't let them choose.
Prize Categories
- Best Use of Gemma
Top comments (0)