← Back to selected work

Independent product · Android, backend & cloud

Frank

An accessibility assistant needs more than a convincing answer. It needs the right context.

Android internal testing · iOS plannedKotlin · Compose · TypeScript · Fastify · Google Cloud
Problem
Voice answers need current visual context, not yesterday’s frame.
My part
Android app, backend, memory controls, tests and cloud deployment.
Stage
Android internal testing, informed by hands-on feedback and research.
Frank accessibility assistant demonstration
Frank’s demonstration. The Android app works without extra hardware; connected hardware is optional.

Keep the question and its evidence together · Explanatory diagram

  1. New questionAssociate the request with its camera evidence.
  2. Check the frameReject stale context rather than answer from an earlier image.
  3. Handle the responseCancel superseded work so an old answer does not replace a new one.

What I built

Frank is an accessibility assistant for blind and low-vision users. I built its Android client, backend and cloud deployment, bringing together voice interaction, on-demand camera context and user-controlled memory.

Frank is a long-term personal product developed through Idumet. It works on Android without extra hardware; connected hardware is optional.

An answer about the wrong image is still wrong

A stale-image failure became an important engineering lesson: a fluent answer is not useful if it describes an earlier frame. The system needed to keep the question and its visual evidence together.

I added request/frame association, freshness checks and regression tests. I also worked on cancelling superseded requests, so old work does not quietly become the answer to a newer question.

Under the hood: evidence and failure paths

The Android client communicates with an authenticated REST and WebSocket backend. The control layer tracks context and evidence rather than treating every provider response as immediately ready to present.

Testing covers failure paths such as stale frames, reconnection and provider errors. My October 2026 implementation record reports 92 server tests and 29 Android unit tests passing at specific revisions. These are dated automated results—not a guarantee of real-world accessibility or current service reliability.

Control belongs to the user

Memory is useful only if the user has a say in it. I implemented owner-scoped review and deletion rather than treating saved context as something the user cannot inspect or change.

Frank is not a navigation or crossing-safety system. The implementation includes refusal handling for crossing and movement-safety requests before calling an AI provider. That boundary matters more than producing an answer to every question.

Testing and the next iteration

Testing and research so far include one hands-on product test, eight demo-based research interviews and one advisory review.

The next step is more physical-device testing, including retesting the capture changes with users.

See the work

Another side of the work

PickByLight →PackingBench →LastMile →Teremware × MAI →

Talk to me about a role →