Skip to content

Releases: AI-DevOps-Interview-Avatar/devops-interview-app

v1.14.0

Choose a tag to compare

@mainocean mainocean released this 17 Sep 18:53
7ac9cbe

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:

The DevOps Interview Pro screen with a green-outlined banner reading "Test access is on — Practice & quiz and Resume review are open on this device. This is a tester unlock, not a purchase, and clearing app data removes it.", above the list of what a plan unlocks and the monthly/yearly/lifetime prices

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

  1. 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.
  2. 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.
  3. 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.
  4. 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
Interviewer selection screen where the Practice & quiz and Resume review nav pills no longer carry PRO chips The Practice & Self-Prep screen, open, with Questions and Quiz tabs and the four interviewers listed

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

Choose a tag to compare

@mainocean mainocean released this 07 Aug 22:18
7ac9cbe

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 .task bundle 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 /engine screen 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
Interviewer selection Engine check
Session on a phone Selection on a phone
Session at 390px Selection at 390px

apple-v1.2.0

Choose a tag to compare

@mainocean mainocean released this 17 Sep 20:29
7ac9cbe

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.gender rather 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-backend CI job had been failing on every pull request. It
    fetched the llama.cpp xcframework from /releases/latest, and upstream
    published a stable tag whose only asset is a text file — the actual builds are
    prerelease bNNNNN tags, which latest skips 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, so xattr -cr may be needed before the first
    launch.

apple-v1.1.0

Choose a tag to compare

@mainocean mainocean released this 03 Aug 10:52
7ac9cbe

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

Choose a tag to compare

@mainocean mainocean released this 10 Jul 19:11

Gemma3-1B-IT, multi-prefill-seq, q4, ekv2048. CPU/XNNPACK .task bundle for the on-device LLM engine.