Skip to content
Vijay Gojiya
All work

Inara Consultancy Services, 2024 to 2025

Legacy modernisation, offline and download architecture

LexVid

An ageing legal-education video app, migrated onto a current Expo, data and offline architecture.

Modernisation of an existing app

LexVid was an existing product with a codebase that had become expensive to change. My job was not to rewrite the app, it was to modernise the parts of it that were making every change slow: the Expo version it was pinned to, how it held state, how it fetched data, and how it behaved without a connection.

I migrated data fetching onto React Query and then used the same client as the offline mechanism: the query cache is persisted to storage, so the library paints from cold storage on launch and reconciles in the background instead of showing a spinner on every cold start. Credits, certificates and playlists all reconcile the same way once a connection returns.

The most involved piece was video download. The viewers are lawyers watching accredited courses, frequently without a connection, so downloading a series and playing it back offline is the product rather than a convenience. Downloads are resumable, report real progress, and run through a queue with a concurrency cap rather than starting everything at once.

What it does

  • Download a course or a whole series and watch it with no connection
  • A library that renders immediately on launch, from cache, before the network answers
  • Playback progress, credit tracking and certificates that reconcile after time offline
  • Download progress, queueing and deletion managed from inside the app

Engineering notes

  • Migrated to a current Expo release line, which is where most of the upgrade pain lived
  • Replaced ad-hoc data fetching and state handling with React Query as the single server-state layer
  • Offline built on the persisted query cache rather than a parallel storage layer, so there is one source of truth instead of two that disagree
  • Resumable downloads with real progress reporting, backed by a queue with a concurrency cap
  • Connection state drives the interface through NetInfo, so offline is a known state rather than a failed request
  • Modernisation rather than a rewrite: the product kept shipping while the architecture moved underneath it

Screens

  • LexVid, app screen 1
  • LexVid, app screen 2
  • LexVid, app screen 3
  • LexVid, app screen 4
  • LexVid, app screen 5
  • LexVid, app screen 6