This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.
What I Built
My friend is preparing for campus placements at Trilogy, Assurant, and Joveo. I built Sparr, a local interview practice app, to bring their resume, projects, coding exercises, and explanations into the same session.
While testing it, I caught the interviewer giving bad advice.
A two-sum solution used a map to remember values and their indices. The model suggested replacing it with a set. The problem required the indices. Following that advice would throw away information needed to return the answer.
That failure made an existing design decision very concrete: the model can comment on a solution; the application keeps the execution results. A convincing explanation cannot turn a failed test into a pass. A passing test cannot make every sentence of AI feedback correct, either.
For my friend, a practice session works like this:
- Bring your own material. Import a resume, review the extracted details, and attach a public GitHub project, research document, notebook, or financial model.
- Work through an interview. Choose a role, answer a question, run a coding solution where applicable, and explain your reasoning. The model receives the answer and observed results before asking a follow-up.
- Return to the attempt. Reopen the saved session to see the answer, checks, and feedback together.
The available tracks span software engineering, quant, finance, markets, and ML. That breadth matters because a project discussion or a finance case needs a different kind of practice from a DSA exercise.
Editable company templates start with my friend's three targets, plus JPMorganChase and Goldman Sachs. They provide study context that the candidate can change; they are not banks of actual company questions.
My friend's initial feedback has been positive. I haven't measured a placement outcome or improvement in interview performance yet.
Demo
57 seconds: a resume, a coding attempt, and a finance-project discussion.
Open the video player · Read the walkthrough transcript
At 0:16, a Python solution runs against six test cases. At 0:18, Qwen's feedback appears alongside the results. At 0:38, the session moves to explaining assumptions in an imported financial model.
The recording is silent and uses a synthetic resume and forecast. Code execution and local model responses are real. It shows the app's practice flow; SEB lockdown is documented separately.
The checks and the model's advice remain visible together, so the candidate can examine both.
Code
Source code, screenshots, and setup instructions on GitHub
Sparr is MIT-licensed and runs from source on macOS. Windows support is planned. With Node.js 24+, Python 3, and Git installed:
git clone https://github.com/Hasan72341/sparr.git
cd sparr
npm ci
npm run build
npm start
Open http://127.0.0.1:4318. Guided practice works immediately without a model. For local AI feedback, install Ollama, run ollama pull qwen2.5:7b, and select it in Sparr's settings. The local-model guide records the tested hardware, setup, and limitations.
How I Built It
React provides the workspace; Express and SQLite handle the local service and saved sessions. Python and JavaScript answers run in a macOS sandbox. Qwen2.5 7B runs through Ollama in the demonstrated setup.
The responsibilities are explicit:
| Part | Responsibility |
|---|---|
| Interview controller | Select questions, manage timing and difficulty, and preserve the session |
| Execution and numeric checks | Run supported code tests and compare numeric answers with reference values |
| Model provider | Use the answer, context, and observed results to return feedback and a follow-up |
The model cannot execute project files or rewrite test results. Public repositories can be inspected, and supported project tests use dependency-free Python or Node test suites. Imported notebooks and spreadsheets are inspected without executing cells or recalculating formulas.
The first local-model failure was structural. Asking for JSON produced JSON—but sometimes no follow-up. That is a broken interview even if the HTTP request succeeds.
I added a regression test, sent Ollama an explicit output schema, and retained validation before saving the response. This is the schema from the provider implementation:
const feedbackFormat = {
type: "object",
properties: {
feedback: { type: "string" },
followup: { type: "string" },
observation: { type: "string" },
},
required: ["feedback", "followup", "observation"],
additionalProperties: false,
};
The second failure was the bad coding advice. The smaller 1.5B model could satisfy that schema and still recommend losing the indices. I moved the documented setup to Qwen2.5 7B and repeated the live checks.
The larger model still made mistakes. In the finance demo, it referred to a 1% margin increase when the source moved from 20% to 22%—two percentage points. I kept that limitation in the model evidence. Tests establish behavior on their cases; model feedback still needs judgment.
Testing the application found different problems. A late request could restore deleted data. A discussion response could still say “connect a model” after the model had answered. GitHub CI caught a sandbox test tied to a file on my own Mac. Each became a fix with a regression check.
The recorded macOS CI run passed 102 unit/integration tests, 44 browser tests, and 54 native checks. A separate real-model check verifies feedback, follow-ups, and saved reports; it fails if the app silently falls back to Guided practice.
For exam-style practice, Sparr also generates Safe Exam Browser launch links and offers an optional native guardian. The strict-mode guide explains the local device policy and its limits. Ordinary practice needs neither SEB nor camera or microphone access.
Why Does Open Innovation Matter?
An interview session can contain someone's resume, their project work, and an answer they are still struggling to explain. I wanted my friend to be able to practise with that material on their own laptop.
In the demonstrated setup, Qwen runs locally with Ollama's cloud features disabled. After downloading the runtime and model weights, feedback needs no hosted inference account. Fetching a GitHub repository still needs internet access.
Model replacement also became a practical part of development. Moving from the smaller Qwen model to 7B left the exercises, code runner, and saved history in place. My friend can try another installed model through the same interface. That choice comes with real trade-offs: the tested 7B download is about 4.7 GB, and local inference uses the Mac's memory and compute.
The application is open too. Someone can inspect how an answer was checked, contribute an edge case, improve a finance explanation, or add a provider. Useful contributions can be as small as a test that catches misleading feedback.
The outcome I care about is a specific one: my friend comes back to an answer and can explain a decision more clearly than before. Sparr gives us a place to practise that—and enough of the record to question the interviewer as well.
My Agent Session
This curated Codex transcript contains 37 original prompts and build updates, including the local-model failures, SEB integration, and verification work. Shortened messages are labeled; intermediate results reflect that point in development. Credentials, private machine paths, and raw tool logs are omitted.
Built and documented with coding-agent assistance.

Top comments (0)