zgba Network

Rehearsal Mirror helps you find your own story before an interview

Entry for Hacktoberfest Weekend Challenge: Build for a Friend. What I Built Rehearsal Mirror is a browser-local interview practice tool. You write down experiences in Situation, Task, Action and Result cards, choose a practice question, and use a small local AI model to find relevant cards. Then you rehearse an answer in your own words. I built Rehearsal Mirror for someone close to me who wants help organising real experiences into interview answers. The problem it targets is specific: having an experience worth talking about, but struggling to recall and organise it when a question arrives. The app gives those experiences a place to live and a way to find them again. It has 12 questions across personal-assistant, customer-support and administration roles, plus a 60- or 90-second practice timer. The person practising controls the content. The model retrieves existing notes and quotes a related field directly. It cannot create a past achievement, rewrite a result or claim that an experience happened. This is a technical pilot. It has not yet been handed to its intended recipient, so there is no recipient feedback or claim of improved interview outcomes. Every example in the demo is fictional. Demo Try the live demo. Try the following sequence: Select Load fictional demo. This loads three clearly labelled examples: a calendar collision, a delayed delivery and a duplicate invoice. If cards already exist, the app asks for confirmation before replacing them; export any notes you want to keep first. Choose the first personal-assistant question and select Download & load local AI. The first load needs internet and downloads approximately 50 MB of model/runtime assets, depending on compression. Select Find relevant stories. The calendar card should rank first. The result includes an excerpt copied from that card and a link to the full story. Switch to the upset-customer question or the administration question about correcting a record. In the recorded checks, the delivery and invoice cards respectively ranked first. Write a practice answer and start the timer. Pause, resume or restart whenever needed. Export a JSON backup if you want to keep your notes outside this browser. The first model download is an explicit choice. Before it completes, the app clearly says it is in manual mode and lets you browse your cards yourself. Code Source code on GitHub. The original application code is MIT-licensed. Model, library and runtime licenses are recorded separately in the dependency notices. The built application serves static files and has no application backend, account system or upload endpoint. The repository includes the application source, tests, model provenance, dependency notices and licenses. Generated build output is not committed. To build and run it locally, use Node.js 22.12+ or 24 and Python 3: npm ci npm run build npm test python tools/serve.py For a browser-only Linux install, the README documents how to skip the unused native CUDA download. Then open http://127.0.0.1:4173 and keep the local server running. How I Built It The retrieval path uses Transformers.js 3.8.1 and the Xenova ONNX conversion of all-MiniLM-L6-v2, pinned to revision 751bff37182d3f1213fa05d7196b954e230abad9. The upstream Sentence Transformers model and the conversion declare Apache-2.0 licensing. The quantized model runs in a dedicated browser worker through WebAssembly. It turns the selected question and each story into normalized, 384-dimensional embeddings. Cosine similarity ranks the stories. A second comparison selects the most related STAR field from each of the top three cards, and the interface displays that field unchanged. This keeps the AI’s job narrow and inspectable. A related result is a prompt to review a memory. It is not a measure of English proficiency, employability or the quality of an answer. The interface never presents similarity as a hiring score. Practice text stays in browser local storage; embeddings stay in worker memory. During the model download, Hugging Face and its file hosts receive ordinary connection metadata. The application does not send stories or answers to a remote inference service. The production-build verification recorded four passing unit tests and 18 passing browser checks in Chrome on Windows. Those checks covered real model loading and ranking, timers, validated backup import/export, deletion, download failure, labels and mobile layout. They also inserted distinct synthetic markers into a story and an answer, then checked page and worker requests for either marker. Neither appeared in a request URL or body in the recorded flows. Another check edited a synthetic story and ran retrieval with browser networking disabled after model loading. That succeeded without additional requests. This supports the specific claim that a loaded model can run inference offline. It does not establish offline startup after closing or reloading the app. There are important limits. The three ranking examples are smoke tests, not a retrieval benchmark. Similar experiences may be harder to distinguish. Long text is truncated by the model, so concise cards work best. Browser storage and exported backups are unencrypted, and clearing browser data can remove notes. Other browsers, low-memory phones and full screen-reader accessibility have not been independently verified. Why Does Open Innovation Matter? The open model is the part that makes semantic retrieval work. Without it, this build has manual card browsing, but no automatic story matching. Local inference also makes the privacy design practical. The app can compare a question with personal notes without forwarding those notes to a hosted model endpoint. Once loaded, the model has no per-query API charge and can keep matching while the browser is offline. That still requires a suitable device, an initial download and a working app page. The weights, runtime and application code can be inspected separately. Pinning the model revision makes the current behaviour easier to reproduce, while the source can be adapted to try another embedding model later. The small model also makes the trade-offs visible: limited context, modest retrieval tests and no generated coaching. The next useful evaluation would be whether the intended recipient can add a truthful experience and find it when they need it. That remains untested. For this version, the demonstrated result is a working, local-first practice tool with a bounded AI feature and explicit limits. AI assistance OpenAI Codex and OpenAI writing tools provided substantial assistance with this application’s implementation, automated verification and article draft. The technical claims above are grounded in the source and recorded synthetic tests. No recipient testimonial was generated or inferred.

View original article