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’s demonstration. The Android app works without extra hardware; connected hardware is optional.
Keep the question and its evidence together · Explanatory diagram
New questionAssociate the request with its camera evidence.
Check the frameReject stale context rather than answer from an earlier image.
Handle the responseCancel superseded work so an old answer does not replace a new one.
Context and scope
Frank is intended to help blind and low-vision users ask questions using voice and current camera context. The difficult part is not simply producing a spoken answer. It is ensuring that the answer relates to the right request, uses sufficiently current evidence and respects the limits of what the product should attempt.
I own the Android client, backend and cloud deployment. Android is in internal testing; iOS is planned. The product runs without additional hardware, although users can choose connected equipment for convenience. Its current stage is product development and research, not broad accessibility validation.
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.
Engineering decisions and trade-offs
The following decisions connect the implementation to its practical constraints. Each separates what I changed from what still needs verification.
Associate questions with their evidence
Constraint
An answer could be fluent while referring to an earlier camera frame.
My approach
I added request/frame association, freshness checks and regression coverage.
Implication
The control layer can reject stale context rather than treating every generated answer as ready to present. Automated checks still need physical-device confirmation.
Cancel superseded work
Constraint
An older response could arrive after a newer question.
My approach
I worked on cancelling requests that no longer represent the current interaction.
Implication
Response arrival order must not determine conversational meaning. Reconnection and delayed-provider behaviour remain important test conditions.
Put safety boundaries before generation
Constraint
Some requests, including crossing and movement-safety decisions, exceed the intended role of the assistant.
My approach
I implemented refusal handling before an AI-provider call for those requests.
Implication
This makes the boundary an application decision rather than relying only on generated wording. It does not make Frank a navigation or crossing-safety system.
Make memory reviewable and removable
Constraint
Stored context affects later interactions and should not be invisible to its owner.
My approach
I implemented owner-scoped review and deletion controls.
Implication
The user can inspect and remove saved context. This is a product control, not a claim of an independent privacy or security certification.
Evidence and limits
Different evidence answers different questions. This record distinguishes a visible demonstration, implementation history and validated operational outcomes.
Automated implementation checks
What it supports: The October 2026 record reports 92 server tests and 29 Android unit tests passing at specific revisions.
What it does not establish: Counts describe those revisions and test scopes, not real-world accessibility, present uptime or universal correctness.
User and advisory research
What it supports: One hands-on product test, eight demo-based interviews and one advisory review informed development.
What it does not establish: People who watched a demonstration are not counted as hands-on testers. The sample does not establish broad user validation.
Product demonstration
What it supports: Shows the intended interaction and product direction.
What it does not establish: A demonstration is not proof of safe performance in all environments.
Lessons and next acceptance checks
The stale-frame issue changed the emphasis from answer generation to evidence handling. A useful assistant needs to know when its context is inadequate, not only how to produce a response when context is available.
The next stage is physical-device retesting of capture changes and further testing with users. That work should examine failure recovery and accessible interaction as well as successful answers. These remain next steps, not completed validation claims.