Skip to content
← All work
AI products, privacyJanuary–April 2026Part-time contract for a defined piece of work, alongside the Nearform work, remote

Desktop and mobile interface for an on-device AI programme

I built the desktop and mobile interface for an AI programme that runs on the user's own device, with no cloud. The tests I handed over can be run by the client themselves.

Tether Data (QVAC programme) · official job title: AI Product and Cross-Platform Runtime Engineer

System diagram

QVAC: desktop and mobile interface for an on-device AI programmeSystem diagram. I built the interface of the desktop app (Electron and Pear) and the mobile app (Expo). Files are converted by Bare components running in a separate process (LibreOfficeKit, MuPDF, PyMuPDF). Everything runs on the device, and there is no external server. I tested the mobile app with Maestro and the desktop one with Playwright.External server: noneThe device: everything runs locallyDesktopElectron · PearMobileExpo · Android, iOSInterface (desktop and mobile)Bare componentsseparate process: file conversionLibreOfficeKit · MuPDF · PyMuPDFTestsMaestro (mobile, 20+ tasks) · Playwright (desktop)

Tether launched the local AI app QVAC Workbench in October 2025, before I joined; it is not my work. The open-source QVAC SDK followed in April 2026. These are public products of the programme.

Decrypt: QVAC Workbench, October 2025 ↗ · Decrypt: QVAC SDK, April 2026 ↗ — This public figure is about the company or product, not my personal result.

The situation

The QVAC programme runs AI locally, on the user's own device, with no cloud. I built chat-style AI interfaces and worked on the QVAC Converter, an app, not yet released, that converts files on the device.

What made it hard?

The app had to work on desktop and on mobile. For that we used Electron, Pear, separately running Bare processes, and Expo on Android and iOS. Files had to be processed on the device, and the AI could not send a request to any outside server.

What was I responsible for?

  • I worked on the app and on how its different runtime environments connect, so that the privacy requirements hold even without internet.
  • I converted files with LibreOfficeKit, MuPDF and PyMuPDF, in separate Bare subprocesses.
  • On mobile, users could cancel file processing or resume it after a restart. The app could also handle several converted files at once.
  • I used Maestro to test that more than 20 different tasks can be completed in the mobile app. I checked the desktop version with Playwright and recorded the compatibility results in tables.

Key decisions

  • Alternative

    File conversion in the same process as the interface

    Choice

    A separate process for file conversion

    Consequence

    If a converter crashes, it does not take the interface down with it.

  • Alternative

    One codebase for Pear and Electron, with features switched on or off

    Choice

    Pear and Electron in separate code paths

    Consequence

    The two environments can fail differently, so I handled them separately.

Results

  • The same interface worked on Electron, Pear and Expo.
  • In the handover material I also wrote down how to check the Android release and the basic behaviour of the iOS version.

When this matters to you

  • If customer data, or health or legal data, has to stay on the device, I know how to make AI run on it without a cloud.
  • If you need both a computer version and a mobile version, you do not end up with two separate products.

Links