Repository navigation
Releases: AI-DevOps-Interview-Avatar/devops-interview-app
Release list
v1.14.0
DevOps Interview AI — v1.14.0
Testers and reviewers can now open the two Pro screens with a link, instead of
looking at a price list with no way past it.
v1.13.0 put Practice & quiz and Resume review behind a plan, and
payments are not live yet — which left both screens closed for everyone,
including the people asked to test them. This release adds the one door that
was missing.
🔓 Test access by link
Tapping the unlock link opens the app and grants test access on that device.
The screen says so in plain words rather than looking exactly as it did a
second earlier:
Test access is recorded as a tester unlock, not a purchase. The two are
stored separately on purpose: the day a refund has to be honoured, "was this
actually bought?" should be a question with an answer rather than a guess.
How to use it
- Install v1.14.0 — from the link below, or with Check for Updates on
the interviewer selection screen if you already have an earlier build. - Open the app once and let the one-time Gemma download finish. The link
does not skip this step; the model is what the interviews run on. - Tap the unlock link you were given. It looks like
mockops://pro?unlock=…and only works in this app — there is no website
to visit and nothing to log into. Tap it in the messenger where you received
it. - The app opens on the screen above. Tap Back to the interviewers.
You did not receive a code with this release, and that is deliberate: the code
is handed out privately to people testing the app. If you are testing and do
not have one, ask whoever invited you.
What it opens
The Practice & quiz and Resume review pills lose their PRO chips and
simply work:
| The pills, unlocked | Practice & quiz, open |
|---|---|
Everything else is unchanged — the interviews, the five-stage hiring pipeline,
the resources and your history were free before and stay free.
Good to know
- It applies to one device. The unlock is stored on the phone, like
everything else this app knows about you. Clearing app data removes it; the
same link restores it. - Tapping the link twice changes nothing. A device that already has access
keeps the access it has, and the banner does not reappear. - Payments are still not live. A tester unlock is not a purchase, and the
pricing screen keeps saying so on every path through it.
🧪 Test coverage
TesterUnlockTest— an empty configured code matches nothing, including
an empty value. Without that check, every build that forgot to set the code
would ship a working unlock for anyone who typed the link with a blank value.ProScreenTest(instrumented, new) — the three ways into the Pro screen
say three different things: refused from a locked pill, opened by the unlock
link, or opened with neither. It fails if the screen ever announces a lock in
the same breath as opening it.ProEntitlementStoreTest(instrumented) — extended for the new "where did
this entitlement come from" record.ProPlanIdParsingTest— an unrecognised source reads as "not recorded",
never as "locked"; the opposite would lock out anyone upgrading over an
entitlement written before this release.
✅ Verified
On a physical Samsung SM-T735 (Android 14): a wrong code writes nothing at all,
the right one records the grant, the banner appears without also announcing a
lock, the gated pills lose their PRO chips, Practice opens, and a second tap on
the same link leaves the original grant untouched. Instrumented suites for the
Pro screen and the entitlement store pass on the device, 12 tests in total.
Known limitations
- The gate is a product boundary, not a security one. There is no server —
that is the whole point of this app — so access is a local flag, and anyone
with adb can set it. The unlock code ships inside the APK, so it is not a
secret; what it buys is that access is not handed to everyone who opens the
app. Real enforcement arrives with Play Billing, together with the ability to
actually buy a plan. - A build made without the code has no unlock at all. That is intentional:
the alternative is a fallback value that quietly ships a working unlock in
every build that forgot to set one.
DevOps Interview AI — Web v1.1.0
Web build for DevOps Interview AI web-v1.1.0. Mirrored from
devops-interview-web
for the full changelog.
No downloadable asset — the web version is a static site, not a binary.
Live at https://mockops.online.
30 issues across 72 commits since web-v1.0.0. The headlines:
- Gemma 3 1B now runs in the browser. The MediaPipe LLM Inference Web API
engine landed and has been verified answering on real hardware, under the
site's real Content-Security-Policy — using the same.taskbundle this
repository ships for Android, unchanged. Sessions still speak from the
question bank: putting the weights on a device and writing the Gemma turn
template are the next two tickets. - A new
/enginescreen reports whether your device qualifies — WebGPU,
WebAssembly SIMD and the model bundle, each on its own line, instead of one
blank failure. - Every screen fits a phone. Fluid layout from 320px to 1920px, 44×44px
touch targets, a visible focus ring, and WCAG AA contrast throughout. - Voice that stays in character — deterministic per-persona voices across
sessions and reloads, RHVoice support on Linux, pitch separation when a locale
ships a single voice, and speech released on every exit from a session. - Privacy and supply chain — a Content-Security-Policy generated for both
<meta>and headers, a retention policy for on-device data, and the Rive
WebAssembly runtime served from our own origin instead of a CDN. - 211 unit tests and 64 acceptance tests, with bundle-size and Lighthouse
budgets that fail the build rather than warn.
| Choose Your Interviewer | Local engine check |
|---|---|
| Session on a phone | Selection on a phone |
|---|---|
apple-v1.2.0
apple-v1.2.0 — The interviewer speaks, and Resume Review arrives
apple-v1.1.0 brought the design system, the EN/UA toggle and a real navigation
stack, but left the app with a mute interviewer and three usable screens. This
release fixes the first and adds a fourth.
Both platform builds are attached below: an ad-hoc signed macOS .zip and an
unsigned iOS .ipa for sideloading.
The interviewer has a voice
Until now the persona on screen never said anything — Core/AudioVideo/ had a
speech recognizer and no synthesizer. The Rive avatar was mute for the same
reason: its rig takes a speak input, and nothing was driving it.
- Each persona speaks in its own gender's voice, resolved through
AVSpeechSynthesisVoice.genderrather than guessed from voice names. Marcus
and David deliberately share one voice, as they do on Android. - The same persona sounds the same every launch.
speechVoices()promises
no particular order, so "the first male voice" could differ between runs;
candidates are ranked by quality and then by identifier, which makes the
choice a function of what is installed rather than of luck. - It speaks the language you picked in the app, not the system language. A
mid-interview switch to Ukrainian reaches the very next reply. - The avatar's mouth now follows the audio. It used to follow token
generation, which meant it moved while the model was thinking and went still
exactly when the interviewer started talking. - The interviewer stops when you start. Tapping the mic cuts the reply off,
so its own voice does not land in an open microphone; leaving the session
stops it too, rather than letting it talk over the screen you left for.
If your device has no voice for the language
A missing Ukrainian voice is the normal case on a fresh device rather than an
edge case, so the app says so instead of going quiet: an on-call banner names
the language and points at Settings → Accessibility → Spoken Content
(System Settings → Accessibility → Spoken Content → System Voice on macOS).
Install a voice there and the interviewer speaks on the next reply.
Resume Review
The fourth screen, ported from Android — paste your resume text and get a score
out of 100 with a nine-point checklist.
- Nothing leaves the device. It is deterministic text analysis, not a model
call: the same nine rules, thresholds and patterns the Android and web apps
use. - It reads Ukrainian resumes properly. Section headings match in either
language at once, because a Ukrainian DevOps resume routinely keeps "Skills"
and "Experience" in English; the buzzword list and the "1 років" grammar check
are per-language. Translating the labels over English-only logic would have
scored good Ukrainian resumes at 20%. - The sample resume is deliberately imperfect — it trips the grammar check, so
the checklist visibly finds something instead of scoring 100% and teaching you
nothing.
Unlike Android, the nav pill carries no PRO chip: the paid tier does not exist
on this platform yet, and a lock over a screen that opens for everyone would be
misleading in the other direction.
Build
- The
build-llama-backendCI job had been failing on every pull request. It
fetched the llama.cppxcframeworkfrom/releases/latest, and upstream
published a stable tag whose only asset is a text file — the actual builds are
prereleasebNNNNNtags, whichlatestskips by definition. It now walks the
release list and takes the newest release that actually carries the asset,
which also steps over the top few whose binaries are still uploading.
Known limitations
- Nobody has heard the voice yet. This release was written and built without
an Apple device on hand; CI compiles all three targets green, but that proves
the code builds, not that the four personas sound right. If a persona sounds
wrong, or Ukrainian stays silent with a voice installed, that is worth
reporting. - Still four screens of nine. Practice & quiz, History, the five-stage
hiring pipeline and the Pro screens remain Android-only for now. - The iOS build is unsigned and needs sideloading (Sideloadly/AltStore); the
macOS build is ad-hoc signed, soxattr -crmay be needed before the first
launch.
apple-v1.1.0
Apple (iOS + macOS) build for DevOps Interview AI apple-v1.1.0. Mirrored from the private code repo — see docs/release-notes-apple-v1.1.0.md there for the full changelog once published.
Gemma 3 1B model bundle
Gemma3-1B-IT, multi-prefill-seq, q4, ekv2048. CPU/XNNPACK .task bundle for the on-device LLM engine.